FDATool設計FIR低通濾波器
阿新 • • 發佈:2018-12-26
(一) 設計一個低通濾波器
取樣頻率 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的訊號被過濾掉了