利用Matlab filterDesigner 工具生成FIR濾波器函式,並呼叫實現低通濾波

我可以睡到中午嗎發表於2019-04-09

本文使用的開發環境為:Win10 Matlab2018a 版本。

  1. 在matlab命令視窗輸入:filterDesigner命令,即可開啟filterDesigner設計工具。
    命令列視窗

  2. 按照下圖調整FIR低通濾波器的引數:

    我們設計的是取樣頻率100Hz,截止頻率10Hz的8階FIR低通數字濾波器。
    FIR低通濾波器引數設定

  3. 生成matlab函式程式碼:File—Generate MATLAB Code—Filter Design Function

    我在這裡將生成的m檔案儲存為fir_8.m。
    生成matlab程式碼

  4. 在matlab中開啟fir_8.m是這個樣子的:

    程式碼如下:
    fir_8

    function Hd = fir_8
    %FIR_8 Returns a discrete-time filter object.
    
    % MATLAB Code
    % Generated by MATLAB(R) 9.4 and DSP System Toolbox 9.6.
    % Generated on: 09-Apr-2019 11:22:46
    
    % FIR Window Lowpass filter designed using the FIR1 function.
    
    % All frequency values are in Hz.
    Fs = 100;  % Sampling Frequency
    
    N    = 7;        % Order
    Fc   = 10;       % Cutoff Frequency
    flag = 'scale';  % Sampling Flag
    
    % Create the window vector for the design algorithm.
    win = hamming(N+1);
    
    % Calculate the coefficients using the FIR1 function.
    b  = fir1(N, Fc/(Fs/2), 'low', win, flag);
    Hd = dfilt.dffir(b);
    
    % [EOF]
  1. 接下來我們要設計一個帶噪聲的訊號函式,然後通過這個濾波器,來測試濾波效果:

    在matlab中新建一個指令碼,儲存為signal.m,與fir_8.m儲存在同一資料夾中。

    程式碼如下:

    signal.m

    x = 0:0.01:4;%定義400個取樣點
    y = 0.1*sin(pi*x) +0.1*sin(2*pi*49*x);%設計含有高頻訊號與低頻訊號的輸入訊號
    figure(1);
    plot(x,y);%畫出輸入訊號圖形
    title('輸入訊號');
    
    Hd = fir_8;%引入濾波器,Hd包含了fir_8濾波器的各項引數
    d = filter(Hd,y);%通過filter函式將訊號y送入引數為Hd的濾波器,輸出訊號d
    figure(2);
    plot(x,d);%畫出通過濾波器的訊號d的波形
    title('輸出訊號');
    
    figure(3);
    plot(x,y,'r');%畫出輸入訊號圖形
    hold on;%保持畫出的輸入訊號圖形
    plot(x,d,'b');%畫出輸出訊號波形
    title('輸入/輸出訊號');
    legend('輸出訊號','輸入訊號');
  1. 執行signal.m(在matlab命令列視窗輸入signal即可)

    輸入訊號

    輸出訊號

    輸入/輸出訊號

PS: 本文主要參考惠飛《FPGA嵌入式系統開發與例項》第5.4.3節

程式碼檔案下載

相關文章