1. 程式人生 > >FDATool設計FIR低通濾波器

FDATool設計FIR低通濾波器

 

 

(一) 設計一個低通濾波器

           取樣頻率 Fs = 50Hz   Fpass = 10Hz   Fstop = 20Hz

開啟matlab,鍵入fdatool後,會彈出該工具的對話方塊。然後按照下圖設定相關引數,引數列表中的Fs應該是取樣頻率,Fc是截止頻率,即幅頻特性曲線-3dB對應的頻率。點選“Design Filter”後,幅頻特性曲線會被更新。

Targets -> generate C Header  生成的標頭檔案

/*
 * Filter Coefficients (C Source) generated by the Filter Design and Analysis Tool
 * Generated by MATLAB(R) 9.0 and the Signal Processing Toolbox 7.2.
 * Generated on: 26-Dec-2018 09:54:34
 */

/*
 * Discrete-Time FIR Filter (real)
 * -------------------------------
 * Filter Structure  : Direct-Form FIR
 * Filter Length     : 6
 * Stable            : Yes
 * Linear Phase      : Yes (Type 2)
 */

/* General type conversion for MATLAB generated C-code  */
#include "tmwtypes.h"
/* 
 * Expected path to tmwtypes.h 
 * C:\Program Files\MATLAB\R2016a\extern\include\tmwtypes.h 
 */
const int BL = 6;
const real64_T B[6] = {
   -0.08631845386171,   0.0581511407323,   0.5053647362323,   0.5053647362323,
     0.0581511407323, -0.08631845386171
};   //Fir 濾波器引數   

(二 )Matlab 指令碼測試

clear all;

Ts = 0.02;      %取樣時間   
%FDAtool設計的引數  Target -> generate C header 
b = [ -0.08631845386171    0.0581511407323    0.5053647362323    0.5053647362323  0.0581511407323  -0.08631845386171];  %濾波器引數
ss = [0 0 0 0 0 0];
for i = 1:1:100
    time(i) = i * Ts;
    x(i) = 2*sin(10 * pi * time(i)) + cos(40 * pi * time(i)) + 0.1 * rands(1);        %5Hz 20Hz 原訊號
    
    %代數方法求濾波後的波形
    ss(6) = ss(5);
    ss(5) = ss(4); 
    ss(4) = ss(3);
    ss(3) = ss(2);
    ss(2) = ss(1);
    ss(1) = x(i);
    zz(i) = b(1) * ss(1) +  b(2) * ss(2) +  b(3) * ss(3) +  b(4) * ss(4) +  b(5) * ss(5) +  b(6) * ss(6);
end

yy = filter(b,1,x);         %使用 filter 函式執行濾波器
figure(1);
plot(time,x,'b',time,yy,'r',time,zz,'y+');
xlabel('秒');

%% 傅立葉變換,左半,檢查濾波效果
figure(2)
fy = fft(x);
fyy = fft(yy);
fzz = fft(zz);
i=1:1:100;
plot(i,abs(fy),'y',i,abs(fyy),'g+',i,abs(fzz),'r-');
xlabel('1/2 Hz');
ylabel('幅度乘以取樣頻率')

 (三)模擬結果

 

20Hz的訊號被過濾掉了