我試圖在Matlab(2011a)中使用fvtool
函數。在Matlab中顯示數字濾波器響應時輸入採樣率
這是一個由許多功能組成的交互式「工具」。我的代碼是這樣的:
%fs1=256; fs2=64; fs3=32;
b1 = fir1(52,0.25,kaiser(53,7.85726));
b2 = fir1(40,0.5,kaiser(41,7.85726));
b3 = fir1(204,0.5,kaiser(205,10.0613));
fvtool(b1,1,b2,1,b3,1);
這將產生:
現在我去了「分析」 menue並選擇「採樣頻率」,然後輸入採樣頻率。爲每個過濾器。其結果是:
不是很好,因爲第二和第三濾波器的響應被重複。第一個濾波器的響應很好,從0到256/2 = 128 Hz。我希望第二個和第三個過濾器的響應速度達到64/2 = 32和32/2 = 16。分別。
於是,我就做手工,
%Digital filter:
fs1=256; fs2=64; fs3=32;
b1 = fir1(52,0.25,kaiser(53,7.85726)); b1(end+256)=0;
b2 = fir1(40,0.5,kaiser(41,7.85726)); b2(end+448)=0;
b3 = fir1(204,0.5,kaiser(205,10.0613)); b3(end+480)=0;
%Filters Response
n=1024;
w = logspace(-1,2,n);
digi_1 = freqz(b1,1,n,fs1); semilogx(w,20*log10(abs(digi_1)),'Color','k'); hold on
digi_2 = freqz(b2,1,n,fs2); semilogx(w,20*log10(abs(digi_2)),'Color','b'); hold on
digi_3 = freqz(b3,1,n,fs3); semilogx(w,20*log10(abs(digi_3)),'Color','r');
axis ([0.1 128 -140 10])
在這裏,我用freqz,並給它過濾分子和denomenator,加點的數n,加上採樣頻率。 FS。問題在於,如果沒有采樣頻率,Matlab似乎沒有做任何改變,即如果我沒有改變任何改變。
所以如果有人想幫忙,他/她可以幫我fvtools
或我的手動代碼,這是一個比fvtools
晚一步。
爲了符合Matlab文檔語法,我應該寫[h1 f1]而不是[h1 w1]。這不是什麼大不了的事情,但是在引用文檔時可以消除混淆。看到這裏:http://www.mathworks.com/help/signal/ref/freqz.html – student1