MATLAB中用FDATool設計濾波器及使用
該文章講述了MATLAB中用FDATool設計濾波器及使用.
1. 在Matlab中鍵入fdatool運行Filter Design and Analysis Tool。具體使用請參見Matlab Help中的Signal Processing Toolbox->FDATool。
2. 在fdatool工具中應該注意的幾個問題:(a)Fstop(阻帶截止頻率)不能大於或等於采樣頻率Fs/2,這是由於數字濾波器設計的方式決定的。(b)將設計好的濾波器導出,可以采用兩種方式Export the filter either as filter coefficients variables or as a dfilt or mfilt filter object variable。(詳細說明參見Matlab Help中的Signal Processing Toolbox-> FDATool-> Exporting a Filter Design。
導出:File---Export彈出EXPORT對話框,選擇“Export As”為“Objects”,“Varable Names”可以更改,默認為Hd。
3. (a)如果導出的是dfilt or mfilt filter object variable,則可以用[b, a] = tf(Hd)將dfilt filter object轉換為轉移函數形式,然后用 d=filter(b,a,x); 使用這個濾波器。其中:filter是默認函數,b、a是剛剛設計的傳遞函數參數,x是原始采集信號,d為濾波后的信號。 x=importdata('E:\matlab_work\xy\bb\O6.txt');
N=length(x); %取長度
fs=4000; %采樣頻率
t=(0:N-1)/fs; 輸出Hd;
[b,a]=tf(Hd);%得到傳遞函數
d=filter(b,a,x); subplot(311); plot(t,x); title('原始信號');
xlabel('t');
ylabel('y');
grid on;
基於 fdatool工具的數字濾波器的matlab設計
數字濾波器的matlab設計
1.1 fdatool界面設計
1.1.1 fdatool的介紹
fdatool(filter design & analysis tool)是matlab信號處理工具箱里專用的濾波器設計分析工具,matlab6.0以上的版本還專門增加了濾波器設計工具箱(filter design toolbox)。fdatool可以設計幾乎所有的基本的常規濾波器,包括fir和iir的各種設計方法。它操作簡單,方便靈活。
fdatool界面總共分兩大部分,一部分是design filter,在界面的下半部,用來設置濾波器的設計參數,另一部分則是特性區,在界面的上半部分,用來顯示濾波器的各種特性。design filter部分主要分為:
filter type(濾波器類型)選項,包括lowpass(低通)、highpass(高通)、bandpass(帶通)、bandstop(帶阻)和特殊的fir濾波器。
design method(設計方法)選項,包括iir濾波器的butterworth(巴特沃思)法、chebyshev type i(切比雪夫i型)法、 chebyshev type ii(切比雪夫ii型)法、elliptic(橢圓濾波器)法和fir濾波器的equiripple法、least-squares(最小乘方)法、window(窗函數)法。
filter order(濾波器階數)選項,定義濾波器的階數,包括specify order(指定階數)和minimum order(最小階數)。在specify order中填入所要設計的濾波器的階數(n階濾波器,specify order=n-1),如果選擇minimum order則matlab根據所選擇的濾波器類型自動使用最小階數。
frenquency specifications選項,可以詳細定義頻帶的各參數,包括采樣頻率fs和頻帶的截止頻率。它的具體選項由filter type選項和design method選項決定,例如bandpass(帶通)濾波器需要定義fstop1(下阻帶截止頻率)、fpass1(通帶下限截止頻率)、fpass2(通帶上限截止頻率)、fstop2(上阻帶截止頻率),而lowpass(低通)濾波器只需要定義fstop1、fpass1。采用窗函數設計濾波器時,由於過渡帶是由窗函數的類型和階數所決定的,所以只需要定義通帶截止頻率,而不必定義阻帶參數。
magnitude specifications選項,可以定義幅值衰減的情況。例如設計帶通濾波器時,可以定義wstop1(頻率fstop1處的幅值衰減)、wpass(通帶范圍內的幅值衰減)、wstop2(頻率fstop2處的幅值衰減)。當采用窗函數設計時,通帶截止頻率處的幅值衰減固定為6db,所以不必定義。
window specifications選項,當選取采用窗函數設計時,該選項可定義,它包含了各種窗函數。
1.1.2 帶通濾波器設計實例
本文將以一個fir 濾波器的設計為例來說明如何使用matlab設計數字濾波器:在小電流接地系統中注入83.3hz的正弦信號,對其進行跟蹤分析,要求設計一帶通數字濾波器,濾除工頻及整次諧波,以便在非常復雜的信號中分離出該注入信號。參數要求:96階fir數字濾波器,采樣頻率1000hz,采用hamming窗函數設計。
本例中,首先在filter type中選擇bandpass(帶通濾波器);在design method選項中選擇fir window(fir濾波器窗函數法),接着在window specifications選項中選取hamming;指定filter order項中的specify order=95;由於采用窗函數法設計,只要給出通帶下限截止頻率fc1和通帶上限截止頻率fc2,選取fc1=70hz,fc2=84hz。設置完以后點擊design filter即可得到所設計的fir濾波器。通過菜單選項analysis可以在特性區看到所設計濾波器的幅頻響應、相頻響應、零極點配置和濾波器系數等各種特性。設計完成后將結果保存為1.fda文件。
在設計過程中,可以對比濾波器幅頻相頻特性和設計要求,隨時調整參數和濾波器類型,
以便得到最佳效果。其它類型的fir濾波器和iir濾波器也都可以使用fdatool來設計。
圖1 濾波器幅頻和相頻響應(特性區)
fig.1 magnitude response and phase response of the filter
1.2 程序設計法
在matlab中,對各種濾波器的設計都有相應的計算振幅響應的函數【3】,可以用來做濾波器的程序設計。
上例的帶通濾波器可以用程序設計:
c=95; %定義濾波器階數96階
w1=2*pi*fc1/fs;
w2=2*pi*fc2/fs; %參數轉換,將模擬濾波器的技術指標轉換為數字濾波器的技術指標
window=hamming(c+1); %使用hamming窗函數
h=fir1(c,[w1/pi w2/pi],window); %使用標准響應的加窗設計函數fir1
freqz(h,1,512); %數字濾波器頻率響應
在matlab環境下運行該程序即可得到濾波器幅頻相頻響應曲線和濾波器系數h。篇幅所限,這里不再將源程序詳細列出。
2 simulink仿真
本文通過調用simulink中的功能模塊構成數字濾波器的仿真框圖,在仿真過程中,可以雙擊各功能模塊,隨時改變參數,獲得不同狀態下的仿真結果。例如構造以基波為主的原始信號,,通過simulink環境下的digital filter design(數字濾波器設計)模塊導入2.1.2中fdatool所設計的濾波器文件1.fda。仿真圖和濾波效果圖如圖2所示。
圖2 simulink仿真圖及濾波效果圖
fig.2 simulated connections and waveform
可以看到經過離散采樣、數字濾波后分離出了83.3hz的頻率分量(scope1)。之所以選取上面的疊加信號作為原始信號,是由於在實際工作中是要對已經經過差分濾波的信號進一步做帶通濾波,信號的各分量基本同一致,可以反映實際的情況。本例設計的濾波器已在實際工作中應用,取得了不錯的效果。