1

我在信號處理方面相當新穎,我的一個項目是實現一個C++濾波器類。我需要典型濾波器的更高階係數,比如Chebyshev類型I和II,Butterworth,Elliptic,不幸的是,網絡中的大多數係數表只列出最高10階。我決定用MATLAB來生成這些濾波器並得到它們的高階係數,然而我所困惑的一件事是它們只給出了一組係數,我假設它們類似於說(ao,a1,a2 .....一個)。我知道IIR濾波器有兩組係數,通常表示爲a0,a1 ... an和b0,b1,...,bn。這裏是我的MATLAB代碼來生成這些coefs並將其導出到Excel文件:MATLAB:IIR濾波器係數

%Chebyshev Filter Coefficients 

filename = 'cheby2coefs.xlsx'; 
for Order = 1:64 
fprintf('This is'); 
disp(Order); 
fprintf('coefficients'); 
[i,j] = cheby2(Order, 20, 300/500); 
disp([i,j]); 
fprintf('\n'); 

    xlswrite(filename,[i,j]',Order); 
end 

到目前爲止,已經就如何想出這些係數與MATLAB淨源少,所以我有很難。我的問題是,如何產生這些濾波器的IIR係數(假設它們是IIR)?

+0

那麼你的問題是什麼? –

+0

@EitanT編輯我的帖子,對此感到抱歉。 – Erasmus

回答

2

它看起來像你在正確的軌道上。您撥打cheby2的電話缺少Wst參數(阻帶頻率)。您應該閱讀MATLAB's official documentation這個命令並驗證您的呼叫。

此外,不要命名輸出變量ij,這是不好的做法。 ijsqrt(-1)虛數的保留名稱。至少命名輸出變量ba

一旦完成切比雪夫,分別使用butterellip作爲巴特沃斯和橢圓濾波器。

+0

謝謝!並會做可變的約定。我對輸出的係數有點擔心。正如我在我的帖子中所說的,IIR濾波器每個訂單應該有兩組係數,這個只產生一組數字。有什麼我完全錯過了嗎? – Erasmus

+1

'b'是一組係數(在傳遞函數的分子中),'a'是第二組係數(在傳遞函數的分母中)。請注意,'a'和'b'是數組(矢量)。 –

+0

我明白了!我從來不知道,我認爲[i,j]是係數列表。如果我和j是係數,[i,j]中的內容是說,如果將其導出或顯示在cmd窗口中? – Erasmus

0

這似乎在MATLAB documentation被覆蓋:

並[b,A] = cheby2(N,R,WST)設計與歸一化的阻帶邊緣頻率WST和n階低通數字切比雪夫II型濾波器阻帶紋波峯值通帶值下降R dB。它返回長度爲n + 1行向量b和a的濾波器係數,其係數爲z的下降冪。