精华内容
下载资源
问答
  • matlab代码,直接运行出结果。FIR带通滤波器,并对数字信号进行带通滤波。建立含有3种频率和白噪声的信号。然后利用窗函数法设计
  • FIR带通滤波器代码

    2017-10-17 11:05:37
    FIR带通滤波器的M文件源代码,系数通过MATLAB的工具箱设计得到。
  • matlab设计FIR 带通滤波器,实例讲解,程序代码,图像均包含。
  • FIR滤波器设计文献集-基于MatlabFIR带通滤波器的设计与仿真.pdf 本帖最后由 zyzhang 于 2012-4-24 18:52 编辑 载自各大数据库希望能帮到大家 基于MatlabFIR带通滤波器的设计与仿真.pdf 基于...
  • 滤波器的阶数≥5,截止频率自行选定,滤波系数用MATLAB确定。 ② 编制C54XDSP实现FIR滤波器的汇编源程序。 ③ 用软件仿真器完成上述程序的模拟调试。 ④ 以数据文件形式自行设定滤波器输入数据,以数据文件形式...
  • 本文以工程师的角度,从介绍、特点、设计使用三个方面出发,并结合代码介绍如何设计并应用FIR滤波器。同时本文也是个人的学习笔记,学习链接也放在了下面,如果不足,请多指导。介绍:What is FIR filter? 特点:Why...

    看了很多介绍设计FIR滤波器的,但鲜有告诉你如何应用的。本文以工程师的角度,从介绍、特点、设计使用三个方面出发,并结合代码介绍如何设计并应用FIR滤波器。同时本文也是个人的学习笔记,学习链接也放在了下面,如果不足,请多指导。

    1. 介绍:What is FIR filter?
    2. 特点:Why is FIR filter?
    3. 如何设计并使用:How to apply a designed FIR filter?

    一,介绍:What is FIR filter?

    线性时不变系统(LTI)冲激响应按照其是有限长还是无限长可分为FIR(Finite Impulse Response)有限长冲激响应系统以及无限长冲激响应IIR(Infinite Impulse Response)系统。

    关于有限长和无现长的理解,如下图的,该图的冲激响应有无限多个,所以就是无限长冲击响应系统;如果冲激响应是有限个,就是有限长冲击响应系统。

    01126150fee29057021663bb84ba0eb2.png

    二,特点:Why is FIR filter?

    1,传递函数:

    equation?tex=H%28Z%29%3D%5Csum_%7Bi%3D0%7D%5E%7BN-1%7Dh%28n%29Z%5E%7B-n%7D+%5C%5C

    2,差分方程

    equation?tex=y%5Bn%5D%3D%5Csum_%7Bi%3D0%7D%5E%7BN%7Dh_ix%5Bn-i%5D+%5C%5C

    其中N代表滤波器阶数,N越大,该滤波器的幅频响应就会越理想,过渡带就会越陡峭,但缺点是带来了更多的计算量。需要综合考量选择。

    FIR是全零点系统,也即在Z复平面上Z传递函数的极点全在Z=0处。
    FIR滤波器具有多种实现形式,比如直接型、二阶级联型、Lattice结构,都只是上述基本传递函数的不同数学表达形式,没有本质区别,只是在具体算法实现上各具特点。这里将二阶级联形式描述如下。

    357ef50544393455e9acf5f536b365d7.png
    二阶级联的意思是将上述传递函数分解为二阶多项式块连乘的形式,其数学表达如下:

    equation?tex=H%28Z%29%3D%5Cprod_%7Bk%3D0%7D%5EM%28b_%7B0k%7D%2Bb_%7B1k%7DZ%5E%7B-1%7D%2Bb_%7B2k%7DZ%5E%7B-2%7D%29+%5C%5C援引部分来自手把手教系列之FIR滤波器设计 @逸珺 ,如有侵权,立即删除。

    三,如何设计并使用:How to apply a designed FIR filter?

    设计方法

    FIR滤波器主要设计方法有窗函数法、“最优法”(切比雪夫逼近法、最小均方差)等。其中窗函数法使用最为广泛。“最优法”也比较常用。

    最优法”主要思路就是找到一组脉冲响应,让它的频域响应
    equation?tex=H%28e%5E%7Bj%5Comega%7D%29与期望的滤波器的频域响应
    equation?tex=H_d%28e%5E%7Bj%5Comega%7D%29尽可能的一致,主要通过两种方法来实现,一个是最小二乘法,另一个是切比雪夫法。

    关于最小二乘法(最小均方差法)和切比雪夫逼近法,以及窗函数方法设计原理和流程,已有大牛介绍的比较好,详见

    J Pan:如何快速设计一个FIR滤波器(二)zhuanlan.zhihu.com
    dc0c4308cc4b8a13399cf648bbb77148.png

    从工程师的角度看这篇文章,虽理论性特别强(有关于连续信号的介绍,个人建议不要太深究。),但是缺乏更贴切的实践和使用介绍。我当时读了几遍之后对实际应用还是有一些疑问。接下来我举个例子,重点从仿真和实际使用来介绍一下。所以这里就不得不提到matlab了。

    如何利用MATLAB设计FIR滤波器

    如何快速设计一个FIR滤波器(一) 也介绍到,可以通过一种简单设计FIR的方法——零极点法 设计FIR滤波器。

    这个方法非常简单,稍加培训,用笔和纸就能完成;当然缺点也很显而易见:零极点设计出的滤波器,只能给出大概的频率响应,对于一些要求较高的系统,显得无能为力。今天我们介绍一种更加严谨的方法。

    matlab可以很方便的设计各种滤波器。具体就是命令行输入‘filterDesigner’弹出设计框。如下图,图上方的几个小方框对应着幅频响应、相频响应等。左下方可选择滤波器类型和具体参数等。

    举个例子,实现采样频率2kHz,带宽为100Hz~300KHz带通滤波器。

    设计一个128阶的FIR带通滤波器,Fstop1为100Hz, Fpass1为110Hz,Fpass2为290Hz, Fstop2为300Hz,Wstop1 为30dB, Wstop2 为30dB。

    分析:从下图可以看出,FIR滤波器的相位是线性的。

    4ecb97a1d716cffcfee1c6f41ec29948.png

    然后可以拷贝其系数,根据差分方程,进行滤波。

    matlab code:

    Fs = 2000;                    % Sampling frequency
    T = 1/Fs;                     % Sample time
    L = Fs*1;                     % Length of signal
    t = (0:L-1)*T;                % Time vector
    % Sum of a 50 Hz , 5.8 , 500 , 120 Hz sinusoid
    y = 1*sin(2*pi*50*t) + sin(2*pi*120*t) +  sin(2*pi*5.8*t) +  sin(2*pi*500*t); 
    y_target = sin(2*pi*120*t)
    
    N             = 128;     % Order
    Fc1           = 100;    % First Cutoff Frequency
    Fc2           = 300;    % Second Cutoff Frequency
    flag          = 'scale';  % Sampling Flag
    SidelobeAtten = 100;      % Window Parameter
    % Create the window vector for the design algorithm.
    win = chebwin(N+1, SidelobeAtten);
    
    % Calculate the coefficients using the FIR1 function.
    b  = fir1(N, [Fc1 Fc2]/(Fs/2), 'bandpass', win, flag);
    Hd = dfilt.dffir(b);
    
    figure
    freqz(b)
    
    filteredSignal = filter(Hd.Numerator,1,y);
    % filteredSignal = filter(b,1,y);
    
    figure
    subplot(3,1,1)
    plot(t,y)
    title('Original Signal')
    ys = ylim;
     
    subplot(3,1,2)
    plot(t,filteredSignal)
    title('Target Bandpass Signal')
    xlabel('Time (s)'); ylim(ys)
    
    subplot(3,1,3)
    plot(t,y_target)
    title('Filtered BandPass Signal')
    xlabel('Time (s)'); ylim(ys)

    C code: 手把手教系列之FIR滤波器设计

    其实这部分,对工程师来说很关键啊。

    References:

    手把手教系列之FIR滤波器设计

    如何快速设计一个FIR滤波器(一)

    如何快速设计一个FIR滤波器(二)

    展开全文
  • 基于MatlabFIR带通滤波器的设计与仿真.pdf 基于MatlabFIR带通滤波器的设计与仿真 基于MATLAB的FIR滤波器的设计与仿真.pdf 基于MATLAB的FIR滤波器的设计与仿真 ...
  • matlab代码仿真设计的导通低通带通带阻四种fir数字滤波器,亲测可用,并且做了非常详细的代码说明,
  • 基于MatlabFIR带通滤波器的设计与仿真.pdf 基于MatlabFIR带通滤波器的设计与仿真 基于MATLAB的FIR滤波器的设计与仿真.pdf 基于MATLAB的FIR滤波器的设计与仿真 ...
  • 2.1 IIR滤波器FIR滤波器的分析比较 2.2 FIR滤波器的原理 3 FIR滤波器的仿真步骤 ## `二、源代码` ```c function varargout = nain1(varargin) % NAIN1 MATLAB code for nain1.fig % ..

    ## 一、简介


    1 设计原理



    1.1 滤波器概念


    1.2 数字滤波器的系统函数和差分方程


    1.3 数字滤波器结构的表示


    1.4 数字滤波器的分类


    2.1  IIR滤波器与FIR滤波器的分析比较


    2.2 FIR滤波器的原理


    3 FIR滤波器的仿真步骤

    ## `二、源代码`

    ```c
    function varargout = nain1(varargin)
    % NAIN1 MATLAB code for nain1.fig
    %      NAIN1, by itself, creates a new NAIN1 or raises the existing
    %      singleton*.
    %
    %      H = NAIN1 returns the handle to a new NAIN1 or the handle to
    %      the existing singleton*.
    %
    %      NAIN1('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in NAIN1.M with the given input arguments.
    %
    %      NAIN1('Property','Value',...) creates a new NAIN1 or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before nain1_OpeningFcn gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to nain1_OpeningFcn via varargin.
    %
    %      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
    %      instance to run (singleton)".
    %
    % See also: GUIDE, GUIDATA, GUIHANDLES

    % Edit the above text to modify the response to help nain1

    % Last Modified by GUIDE v2.5 07-Jan-2020 15:57:07

    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @nain1_OpeningFcn, ...
                       'gui_OutputFcn',  @nain1_OutputFcn, ...
                       'gui_LayoutFcn',  [] , ...
                       'gui_Callback',   []);
    if nargin && ischar(varargin{1})
        gui_State.gui_Callback = str2func(varargin{1});
    end

    if nargout
        [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
    else
        gui_mainfcn(gui_State, varargin{:});
    end
    % End initialization code - DO NOT EDIT


    % --- Executes just before nain1 is made visible.
    function nain1_OpeningFcn(hObject, eventdata, handles, varargin)
    % This function has no output args, see OutputFcn.
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    % varargin   command line arguments to nain1 (see VARARGIN)

    % Choose default command line output for nain1
    handles.output = hObject;

    % Update handles structure
    guidata(hObject, handles);

    % UIWAIT makes nain1 wait for user response (see UIRESUME)
    % uiwait(handles.figure1);


    % --- Outputs from this function are returned to the command line.
    function varargout = nain1_OutputFcn(hObject, eventdata, handles) 
    % varargout  cell array for returning output args (see VARARGOUT);
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)

    % Get default command line output from handles structure
    varargout{1} = handles.output;


    % --- Executes on button press in pushbutton1.
    function pushbutton1_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    Fs = 1500;
    t = 1:1/Fs:6;
    t=t(1:5000);
    %写入chirp.wav文件
    [pyr1,fs]=audioread('1.wav');%声音读取
    pyr=pyr1(1:5000);
    n=length(pyr);
    pyr1=fft(pyr,n); %快速傅里叶变换
    f=Fs*(0:n/2 - 1)/n;

    noise1=0.1*sin(20*pi*t);%低频噪声
    x1=pyr+noise1;%加低频噪声信号
    n=length(t); %画出加噪之后,其时域频域
    S=abs(fft(pyr));%原始信号傅里叶变换
    y1=abs(fft(x1));%原始信号傅里叶变换
    handles.axes1;
    subplot(121);
    plot(pyr);
    xlabel('时间');
    ylabel('幅度');
    title('原始信号波形'); %绘出时域波
    subplot(122)
    plot(S((1:length(S)/2)));
    xlabel('频率');
    ylabel('幅度');
    title('原始信号频谱');
    %% IIR频率变换法
    %% 双线性变换法
    % 2.1低通
    Rp=3;%通带最大衰减dB
    Rs=10;%阻带最小衰减dB
    Wp=1000;%通带截止频率
    Ws=1200;%阻带截止频率
    [N,wn]=buttord(Wp,Ws,Rp,Rs,'s');
    [b,a,k]=buttap(N);
    [A,B,C,D]=zp2ss(b,a,k);
    [A,B,C,D]=lp2lp(A,B,C,D,wn);%type='底通';
    [b,a]=ss2tf(A,B,C,D);
    [b21,a21]=bilinear(b,a,Fs);
    [h21,w21]=freqz(b21,a21);         %根据参数求出频率响应
    x21=filter(b21,a21,x1); % 进行低通滤波
    y21=abs(fft(x21));  % 对滤波后信号做len点FFT变换
    %2.3 切比雪夫I型滤波器 高通
    Rp2=2;%通带最大衰减dB
    Rs2=20;%阻带最小衰减dB
    Wp2=3000;%通带截止频率
    Ws2=3200;%阻带截止频率
    [N,wn]=cheb1ord(Wp2,Ws2,Rp2,Rs2,'s');%求模拟的低通滤波器阶数和截止频率
    [b,a,k]=cheb1ap(N,Rp2); %求S域的频率响应的参数
    [A,B,C,D]=zp2ss(b,a,k);%阻带截止频率
    [A,B,C,D]=lp2hp(A,B,C,D,wn);%type='高通';
    [b,a]=ss2tf(A,B,C,D);%状态方程向传递函数转变
    [b23,a23]=bilinear(b,a,Fs);%利用双线性变换实现S域到Z域转换
    [h23,w23]=freqz(b23,a23);
    x23=filter(b23,a23,x1); % 进行稿通滤波
    y23=abs(fft(x23));  % 对滤波后信号做len点FFT变换
    % 带通滤波器
    Rp3=1;
    Rs3=100;
    Wp1=1200;
    Ws1=1000;
    Wp2=3000;
    Ws2=3200;
    Wp3=[Wp1,Wp2];
    Ws3=[Ws1,Ws2];
    %wp和ws分别是通带和阻带的频率(截止频率)。当wp和ws为二元矢量时,为带通或带阻滤波器,这时求出的Wn也是二元矢量;当wp和ws为一元矢量时,为低通或高通滤波器:当wp<ws时为低通滤波器,当wp>ws时为高通滤波器。
    %wp和ws为二元矢量
    Wp3=[1200 3000];                %设置通带频率
    Ws3=[1000 3200];                %设置阻带频率
    Rp3=1;                                   %设置通带波纹系数
    Rs3=20;                                  %设置阻带波纹系数 
    [N,wn]=buttord(Wp3,Ws3,Rp3,Rs3,'s');
    [b,a,k]=buttap(N);
    [A,B,C,D]=zp2ss(b,a,k);
    Wn=Wp2-Wp1;
    Wo=sqrt(Wp2*Wp1);
    [A,B,C,D]=lp2bp(A,B,C,D,Wo,Wn);% type='带通';
    [num22,den22]=ss2tf(A,B,C,D);
    % [b,a]=impinvar(num23,den23,Fs);
    [b22,a22]=bilinear(num22,den22,Fs);%双线性变换实现S域到Z域的转换
    [h22,w22]=freqz(b22,a22);                  %根据参数求出频率响应
    x22=filter(b22,a22,x1); % 进行低通滤波
    y22=abs(fft(x22));  % 对滤波后信号做len点FFT变换

    %% FIR窗函数
    % 3.1 低通滤波器
    %该函数采用hanning窗实现低通滤波
    fp=1000;%通带截止频率
    fs=2000;%阻带起始频率
    FS=8000;
    wp=2*pi*fp/FS;%将模拟通带截止频率转换为数字滤波器频率
    ws=2*pi*fs/FS;%将模拟阻带起始频率转换为数字滤波器频率
    wn=(wp+ws)/2/pi;%标准化的截止频率响应
    Bt=ws-wp;
    N0=ceil(6.2*pi/Bt);%滤波器长度
    N=N0+mod(N0+1,2);
    %设计加窗函数fir1
    [b31,a31]=fir1(N-1,wn,hanning(N));
    [h31,w31]=freqz(b31,a31,FS);                     %得到频率响应
    x31=filter(b31,a31,x1); % 进行低通滤波
    y31=abs(fft(x31));  % 对滤波后信号做len点FFT变换

    % 3.2 通带滤波
    Fs=8000;
    fp1=1200;%通带下限截止频率
    fp2=3000;%通带上限截止频率
    fs1=1000;
    fs2=3200;
    wp1=2*pi*fp1/Fs;%将通带下限截止频率转换为数字滤波器频率
    wp2=2*pi*fp2/Fs;%将通带上限截止频率转换为数字滤波器频率
    ws1=2*pi*fs1/Fs;%将通带下限截止频率转换为数字滤波器频率
    ws2=2*pi*fs2/Fs;%将通带上限截止频率转换为数字滤波器频率
    Bt=wp1-ws1;
    N0=ceil(6.2*pi/Bt);
    N=N0+mod(N0+1,2);
    wn=[(wp1+ws1)/2/pi,(wp2+ws2)/2/pi];
    %设计加窗函数fir1
    [b32,a32]=fir1(N-1,wn,'bandpass',hanning(N));
    %求滤波器的幅频响应
    [h32,w32]=freqz(b32,a32,FS);
    x32=filter(b32,a32,x1);
    y32=abs(fft(x32));  % 对滤波后信号做len点FFT变换

    ```

    ## 三、运行结果

    ## 四、备注

    完整代码或者代写添加QQ1575304183

    往期回顾>>>>>>

    【信号处理】基于HMM的睡眠状态检测matlab源码

    【信号处理】基于小波变换的音频水印嵌入提取matlab源码

    【信号处理】基于遗传算法的VST混响matlab源码

    【信号处理】脉搏信号之脉率存档matlab源码含GUI

    【信号处理】单通道盲源分离(SSA-ICA)算法

    【信号处理】数字电子琴设计与实现matlab源码

    【信号处理】LDPC码的校验矩阵、编译码matlab源码

    【语音加密】基于混沌算法的语音信号加密解密matlab源码

    【信号处理】基于小波变换的语音增强matlab源码

    【语音增强】基于维纳滤波之语音增强matlab源码
    【信号处理】OFDM-MIMO通信建模与仿真matlab源码

    【信号处理】数字调制信号仿真matlab源码含GUI

    【信号处理】基于LMS算法信号去噪matlab源码

    【信号处理】基于小波变换的量化音频数字水印matlab源码

    【信号处理】基于小波变换的音频水印嵌入与提取matlab源码

    【语音识别】基于BP神经网络的语音情感识别matlab源码

    【信号处理】基于小波变换的音频水印嵌入与提取matlab源码

    【情感识别】基于改进KNN语音情感分类识别malab源码含GUI

    【信号处理】8级m序列matlab源码

    【情感识别】语音情感分类识别matlab源码

    展开全文
  • 基于MatlabFIR带通滤波器的设计与仿真.pdf 基于MatlabFIR带通滤波器的设计与仿真 基于MATLAB的FIR滤波器的设计与仿真.pdf 基于MATLAB的FIR滤波器的设计与仿真 ...
  • 基于MatlabFIR带通滤波器的设计与仿真.pdf 基于MatlabFIR带通滤波器的设计与仿真 基于MATLAB的FIR滤波器的设计与仿真.pdf 基于MATLAB的FIR滤波器的设计与仿真 ...
  • 2.1 IIR滤波器FIR滤波器的分析比较 2.2 FIR滤波器的原理 3 FIR滤波器的仿真步骤 二、源代码 function varargout = nain1(varargin) % NAIN1 MATLAB code for nain1.fig % NAIN1, by itself, creates a new ...

    一、简介

    1 设计原理
    在这里插入图片描述
    1.1 滤波器概念
    在这里插入图片描述
    1.2 数字滤波器的系统函数和差分方程
    在这里插入图片描述
    1.3 数字滤波器结构的表示
    在这里插入图片描述
    在这里插入图片描述
    1.4 数字滤波器的分类
    在这里插入图片描述
    在这里插入图片描述
    2.1 IIR滤波器与FIR滤波器的分析比较
    在这里插入图片描述
    2.2 FIR滤波器的原理

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    3 FIR滤波器的仿真步骤
    在这里插入图片描述
    在这里插入图片描述

    二、源代码

    function varargout = nain1(varargin)
    % NAIN1 MATLAB code for nain1.fig
    %      NAIN1, by itself, creates a new NAIN1 or raises the existing
    %      singleton*.
    %
    %      H = NAIN1 returns the handle to a new NAIN1 or the handle to
    %      the existing singleton*.
    %
    %      NAIN1('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in NAIN1.M with the given input arguments.
    %
    %      NAIN1('Property','Value',...) creates a new NAIN1 or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before nain1_OpeningFcn gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to nain1_OpeningFcn via varargin.
    %
    %      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
    %      instance to run (singleton)".
    %
    % See also: GUIDE, GUIDATA, GUIHANDLES
    
    % Edit the above text to modify the response to help nain1
    
    % Last Modified by GUIDE v2.5 07-Jan-2020 15:57:07
    
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @nain1_OpeningFcn, ...
                       'gui_OutputFcn',  @nain1_OutputFcn, ...
                       'gui_LayoutFcn',  [] , ...
                       'gui_Callback',   []);
    if nargin && ischar(varargin{1})
        gui_State.gui_Callback = str2func(varargin{1});
    end
    
    if nargout
        [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
    else
        gui_mainfcn(gui_State, varargin{:});
    end
    % End initialization code - DO NOT EDIT
    
    
    % --- Executes just before nain1 is made visible.
    function nain1_OpeningFcn(hObject, eventdata, handles, varargin)
    % This function has no output args, see OutputFcn.
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    % varargin   command line arguments to nain1 (see VARARGIN)
    
    % Choose default command line output for nain1
    handles.output = hObject;
    
    % Update handles structure
    guidata(hObject, handles);
    
    % UIWAIT makes nain1 wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
    
    
    % --- Outputs from this function are returned to the command line.
    function varargout = nain1_OutputFcn(hObject, eventdata, handles) 
    % varargout  cell array for returning output args (see VARARGOUT);
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Get default command line output from handles structure
    varargout{1} = handles.output;
    
    
    % --- Executes on button press in pushbutton1.
    function pushbutton1_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    Fs = 1500;
    t = 1:1/Fs:6;
    t=t(1:5000);
    %写入chirp.wav文件
    [pyr1,fs]=audioread('1.wav');%声音读取
    pyr=pyr1(1:5000);
    n=length(pyr);
    pyr1=fft(pyr,n); %快速傅里叶变换
    f=Fs*(0:n/2 - 1)/n;
    
    noise1=0.1*sin(20*pi*t);%低频噪声
    x1=pyr+noise1;%加低频噪声信号
    n=length(t); %画出加噪之后,其时域频域
    S=abs(fft(pyr));%原始信号傅里叶变换
    y1=abs(fft(x1));%原始信号傅里叶变换
    handles.axes1;
    subplot(121);
    plot(pyr);
    xlabel('时间');
    ylabel('幅度');
    title('原始信号波形'); %绘出时域波
    subplot(122)
    plot(S((1:length(S)/2)));
    xlabel('频率');
    ylabel('幅度');
    title('原始信号频谱');
    %% IIR频率变换法
    %% 双线性变换法
    % 2.1低通
    Rp=3;%通带最大衰减dB
    Rs=10;%阻带最小衰减dB
    Wp=1000;%通带截止频率
    Ws=1200;%阻带截止频率
    [N,wn]=buttord(Wp,Ws,Rp,Rs,'s');
    [b,a,k]=buttap(N);
    [A,B,C,D]=zp2ss(b,a,k);
    [A,B,C,D]=lp2lp(A,B,C,D,wn);%type='底通';
    [b,a]=ss2tf(A,B,C,D);
    [b21,a21]=bilinear(b,a,Fs);
    [h21,w21]=freqz(b21,a21);         %根据参数求出频率响应
    x21=filter(b21,a21,x1); % 进行低通滤波
    y21=abs(fft(x21));  % 对滤波后信号做len点FFT变换
    %2.3 切比雪夫I型滤波器 高通
    Rp2=2;%通带最大衰减dB
    Rs2=20;%阻带最小衰减dB
    Wp2=3000;%通带截止频率
    Ws2=3200;%阻带截止频率
    [N,wn]=cheb1ord(Wp2,Ws2,Rp2,Rs2,'s');%求模拟的低通滤波器阶数和截止频率
    [b,a,k]=cheb1ap(N,Rp2); %求S域的频率响应的参数
    [A,B,C,D]=zp2ss(b,a,k);%阻带截止频率
    [A,B,C,D]=lp2hp(A,B,C,D,wn);%type='高通';
    [b,a]=ss2tf(A,B,C,D);%状态方程向传递函数转变
    [b23,a23]=bilinear(b,a,Fs);%利用双线性变换实现S域到Z域转换
    [h23,w23]=freqz(b23,a23);
    x23=filter(b23,a23,x1); % 进行稿通滤波
    y23=abs(fft(x23));  % 对滤波后信号做len点FFT变换
    % 带通滤波器
    Rp3=1;
    Rs3=100;
    Wp1=1200;
    Ws1=1000;
    Wp2=3000;
    Ws2=3200;
    Wp3=[Wp1,Wp2];
    Ws3=[Ws1,Ws2];
    %wp和ws分别是通带和阻带的频率(截止频率)。当wp和ws为二元矢量时,为带通或带阻滤波器,这时求出的Wn也是二元矢量;当wp和ws为一元矢量时,为低通或高通滤波器:当wp<ws时为低通滤波器,当wp>ws时为高通滤波器。
    %wp和ws为二元矢量
    Wp3=[1200 3000];                %设置通带频率
    Ws3=[1000 3200];                %设置阻带频率
    Rp3=1;                                   %设置通带波纹系数
    Rs3=20;                                  %设置阻带波纹系数 
    [N,wn]=buttord(Wp3,Ws3,Rp3,Rs3,'s');
    [b,a,k]=buttap(N);
    [A,B,C,D]=zp2ss(b,a,k);
    Wn=Wp2-Wp1;
    Wo=sqrt(Wp2*Wp1);
    [A,B,C,D]=lp2bp(A,B,C,D,Wo,Wn);% type='带通';
    [num22,den22]=ss2tf(A,B,C,D);
    % [b,a]=impinvar(num23,den23,Fs);
    [b22,a22]=bilinear(num22,den22,Fs);%双线性变换实现S域到Z域的转换
    [h22,w22]=freqz(b22,a22);                  %根据参数求出频率响应
    x22=filter(b22,a22,x1); % 进行低通滤波
    y22=abs(fft(x22));  % 对滤波后信号做len点FFT变换
    
    %% FIR窗函数
    % 3.1 低通滤波器
    %该函数采用hanning窗实现低通滤波
    fp=1000;%通带截止频率
    fs=2000;%阻带起始频率
    FS=8000;
    wp=2*pi*fp/FS;%将模拟通带截止频率转换为数字滤波器频率
    ws=2*pi*fs/FS;%将模拟阻带起始频率转换为数字滤波器频率
    wn=(wp+ws)/2/pi;%标准化的截止频率响应
    Bt=ws-wp;
    N0=ceil(6.2*pi/Bt);%滤波器长度
    N=N0+mod(N0+1,2);
    %设计加窗函数fir1
    [b31,a31]=fir1(N-1,wn,hanning(N));
    [h31,w31]=freqz(b31,a31,FS);                     %得到频率响应
    x31=filter(b31,a31,x1); % 进行低通滤波
    y31=abs(fft(x31));  % 对滤波后信号做len点FFT变换
    
    % 3.2 通带滤波
    Fs=8000;
    fp1=1200;%通带下限截止频率
    fp2=3000;%通带上限截止频率
    fs1=1000;
    fs2=3200;
    wp1=2*pi*fp1/Fs;%将通带下限截止频率转换为数字滤波器频率
    wp2=2*pi*fp2/Fs;%将通带上限截止频率转换为数字滤波器频率
    ws1=2*pi*fs1/Fs;%将通带下限截止频率转换为数字滤波器频率
    ws2=2*pi*fs2/Fs;%将通带上限截止频率转换为数字滤波器频率
    Bt=wp1-ws1;
    N0=ceil(6.2*pi/Bt);
    N=N0+mod(N0+1,2);
    wn=[(wp1+ws1)/2/pi,(wp2+ws2)/2/pi];
    %设计加窗函数fir1
    [b32,a32]=fir1(N-1,wn,'bandpass',hanning(N));
    %求滤波器的幅频响应
    [h32,w32]=freqz(b32,a32,FS);
    x32=filter(b32,a32,x1);
    y32=abs(fft(x32));  % 对滤波后信号做len点FFT变换
    
    
    

    三、运行结果

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    四、备注

    完整代码或者代写添加QQ1575304183

    往期回顾>>>>>>

    【信号处理】基于HMM的睡眠状态检测matlab源码

    【信号处理】基于小波变换的音频水印嵌入提取matlab源码

    【信号处理】基于遗传算法的VST混响matlab源码

    【信号处理】脉搏信号之脉率存档matlab源码含GUI

    【信号处理】单通道盲源分离(SSA-ICA)算法

    【信号处理】数字电子琴设计与实现matlab源码

    【信号处理】LDPC码的校验矩阵、编译码matlab源码

    【语音加密】基于混沌算法的语音信号加密解密matlab源码

    【信号处理】基于小波变换的语音增强matlab源码

    【语音增强】基于维纳滤波之语音增强matlab源码
    【信号处理】OFDM-MIMO通信建模与仿真matlab源码

    【信号处理】数字调制信号仿真matlab源码含GUI

    【信号处理】基于LMS算法信号去噪matlab源码

    【信号处理】基于小波变换的量化音频数字水印matlab源码

    【信号处理】基于小波变换的音频水印嵌入与提取matlab源码

    【语音识别】基于BP神经网络的语音情感识别matlab源码

    【信号处理】基于小波变换的音频水印嵌入与提取matlab源码

    【情感识别】基于改进KNN语音情感分类识别malab源码含GUI

    展开全文
  • 滤波器(Filter)可以对特定信号频率以外的频率进行有效滤除。按照所处理信号的不同分为...带通滤波器-允许一定频段的信号通过,抑制低于或高于该频段的信号、干扰和噪声;带阻滤波器-抑制一定频段内的信号,允许该频...

    14356484f68cad41e9761d92b3da512f.png

    滤波器(Filter)可以对特定信号频率以外的频率进行有效滤除。按照所处理信号的不同分为:模拟滤波器和数字滤波器。按照所通过信号频率的不同分为:

    低通滤波器-允许信号中的低频或直流分量通过,抑制高频分量或干扰和噪声;

    高通滤波器-允许信号中的高频分量通过,抑制低频或直流分量;

    带通滤波器-允许一定频段的信号通过,抑制低于或高于该频段的信号、干扰和噪声;

    带阻滤波器-抑制一定频段内的信号,允许该频段以外的信号通过。

    下图是小派曾经遇到的一款非常迷你的滤波器。

    537ddeaae17935c58daa8de1e473a62e.png

    数字滤波器在电子通信、图像处理、军事航天等领域有着十分广泛的应用,今天着重介绍数字滤波器。其中FIR滤波器为有限脉冲响应(Finite Impulse Response)数字滤波器。在信号进入FIR滤波器之前,要将信号通过A/D器件进行模数转换,使模拟信号(Analog Signal)变为数字信号(Digital Signal)。为使信号处理不失真,一般还要把采样频率设置为信号频率上限的4-5倍。

    下面使用MATLAB模拟设计FIR低通数字滤波器。例如:某信号频率为20kHz,噪声频率为35kHz,采样频率为100kHz(采样频率是信号频率的4-5倍)。然后设计一个带通衰减1dB,带阻衰减100dB,带通频率20kHz,带阻频率35kHz的FIR低通数字滤波器。

    首先,启动MATLAB,新建脚本,输入如下代码,使信号频率20kHz,噪声频率35kHz,采样频率100kHz的数字信号图形化显示。

    a971369c4365004e7b4113ab3e7cd702.png

    0f295c832b77bd9a2d5af12c2a7fc134.png

    其中黑线为含有噪声的原始信号,红线为想要通过的有用低频信号。

    第二,在MATLAB命令行窗口中输入fdatool,启动滤波器设计和分析工具。进入滤波器设计和分析工具(Filter Design & Analysis Tool)界面后:1.在Respone Type中选择低通滤波器(Lowpass);2.在Design Method中选择FIR Equiripple等波纹FIR滤波器;3.在Filter Order中选择最小滤波器阶次Minimum Order;4.在Options中设置Desity Factor为20(默认值);5.在Frequency Specification中设置Units为kHz,采样频率Fs=100kHz,带通频率Fpass=20kHz, 带阻频率Fstop=35kHz;6.在Magnitude Specification中指定带通衰减Apass=1dB,带阻衰减Astop=100dB。

    c0da43a6b9855760a3e7c6d1c5c965da.png

    第三,点击Design Filter,即完成了FIR低通数字滤波器的设计,可以看到该低通数字滤波器允许频率20kHz信号通过,阻止频率35kHz以上的信号通过。

    af7a4876b57c76df4c5f17fda7de60e2.png

    第四,点击File-->Generate MATLAB Code-->Filter Design Function,将该FIR低通数字滤波器保存为函数代码,可以命名为FIR_Lowpass.m。

    0ac8c37a9a5a6cf15f0096336e5a6a0d.png

    第五,在第一步脚本文件中接着输入以下代码,调用该FIR低通数字滤波器函数,并图形化显示低通滤波后的信号图形。

    de1a97f9c93fe3863b2d627d70e94c35.png

    2e51b20aaf92c33e6ed8f3a65e967f25.png

    可以看到,经过FIR低通数字滤波器后,35kHz的噪声信号被滤除,得到了20kHz的有用信号。

    以上就完成了MATLAB模拟设计FIR低通数字滤波器的工作。高通滤波器、带通滤波器、带阻滤波器可以参照此方法进行模拟设计。

    91eb607659ca30930315f37f5bcba990.png

    展开全文
  • 文件是用matlab设计的fir数字滤波器,包括带通、带阻、低通、高通、低通加带阻五种滤波器代码都是自己编写并且验证通过,代码中有非常详尽的说明,每行代码基本都有注释,对于学习用matlab设计fir数字滤波器有很大...
  • 采用窗函数法设计理想低通,...1) 确定滤波器类型,不同的FIR类型可设计不同类型的滤波器,I型可设计LP(低通滤波器),HP(高通滤波器),BP(带通滤波器),BS(带阻滤波器)。 Fir I型 Fir II型 ...
  • 2.1 IIR滤波器FIR滤波器的分析比较 2.2 FIR滤波器的原理 3 FIR滤波器的仿真步骤 二、源代码 function varargout = nain1(varargin) % NAIN1 MATLAB code for nain1.fig % NAIN1, by itself, creates a ...
  • 2.1 IIR滤波器FIR滤波器的分析比较 2.2 FIR滤波器的原理 3 FIR滤波器的仿真步骤 二、源代码 function varargout = nain1(varargin) % NAIN1 MATLAB code for nain1.fig % NAIN1, by itself, creates a ...
  • 采用海明窗,分别设计长度为41(阶数为40)的低通(截止频率为200Hz)、高通(截止频率为200 Hz)、带通(通带为200~400 Hz)、带阻滤波器(阻带为200~400 Hz)FIR滤波器,采样频率为2000 Hz,画出其脉冲响应及幅频...
  • 数字滤波器设计原理公式及其实例,包括各种窗函数、带通滤波、高通、低通滤波;有限脉冲(FIR滤波器
  • 2.1 IIR滤波器FIR滤波器的分析比较 2.2 FIR滤波器的原理 3 FIR滤波器的仿真步骤 二、源代码 %-------------------------------------------------------------------------- %利用kaiser窗设计低通...
  • 滤波器的设计(低通、带通、高通)的matalb代码

    万次阅读 多人点赞 2016-05-20 11:23:15
    可以直接使用matlab里的FDA,导出滤波器系数即可。 再就是参考数字信号处理课本里面三种滤波器设计的方法,由过渡带和所选的窗函数推导出滤波器阶数,进一步根据firl和filter函数编写即可。 下面给出三种滤波器的...
  • ex082900 椭圆带通滤波器设计-ELLIP函数的应用 ex083000 切比雪夫-2带阻滤波器设计-CHEBY2函数的应用 注:用ex开始的例为dspex文件夹中可执行的MATLAB程序,由汉字标注的例则一般不用 MATLAB或程序特别简单,故没列...
  • MATLAB7.x数字信号处理 源代码

    热门讨论 2008-10-30 18:57:20
    ex4_18 椭圆带通滤波器设计—ELLIP函数的应用 ex4_19 切比雪夫-2带阻滤波器设计—CHEBY2函数的应用 ex4_20 利用Z平面的简单零极点法设计一个高通滤波器 ex5_1 I-型线性相位FIR滤波器 ex5_2 II-型线性相位FIR滤波器 ...
  • 由于信号经过带通滤波器之后(本文采用的是FIR线性相位数字滤波器)会出现相移,所以不能直接用调制时候的载波信号与此时的band_passed_sig1信号相乘来相干解调,此时用来相干解调的载波应该与经过滤波器之后出现...
  • MATLAB7.x数字信号处理

    2013-05-07 12:10:40
    ex4_18 椭圆带通滤波器设计—ELLIP函数的应用 ex4_19 切比雪夫-2带阻滤波器设计—CHEBY2函数的应用 ex4_20 利用Z平面的简单零极点法设计一个高通滤波器 ex5_1 I-型线性相位FIR滤波器 ex5_2 II-型线性相位FIR滤波器 ...
  • 然后用MATLAB的fdatool生成滤波器系数,调用ise的fir IP核,生成2M-8M带通滤波器,下面是代码和图片(这个可以证明我滤波器是没配置错的),但是当我把5M方波信号接到滤波器上,信号就成未知状态了,无法理解,是...

空空如也

空空如也

1 2
收藏数 30
精华内容 12
关键字:

fir带通滤波器matlab代码

matlab 订阅