2015-04-04 131 views
0

我剛剛在MATLAB中用fdatool設計了一個IIR濾波器,並將這些係數導出到一個頭文件中。我將數組複製到MATLAB,現在我試圖繪製頻率響應。然而,由於某些原因,數組是多維的,我不知道如何讓MATLAB處理它。MATLAB多維濾波器陣列

這是我的濾波器係數的樣子:

num = [ 
    [0.7167852126947,0,0], 
    [1,-1.919646855375,1], 
    [0.4393545211166,0,0], 
    [1,-1.603319802493,1], 
    [0.03175470360035,0,0], 
    [1,-1.942960840584,1], 
    [1,0,0] 
]; 

den = [ 
    [1,0,0], 
    [1,-1.904445073337,0.9382561062801], 
    [1,0,0], 
    [1,-1.837789625289,0.8507293334097], 
    [1,0,0], 
    [1,-1.942552416592,0.9865719866549], 
    [1,0,0] 
]; 

如果他們是一維的我可以將它們傳遞到freqz功能的MATLAB像這樣:

freqz(num,den); 

但這給我一個上述數組的錯誤。

繪製濾波器頻率響應的最佳方法是什麼?

回答

2

numden的格式,我有以下假設:

MATLAB默認的fdatool創建第二階段的IIR濾波器和返回的第二階段的矩陣(他們稱之爲SOS矩陣)。該SOS形式如下:

SOS form

同時通過MATLAB返回的SOS矩陣具有以下格式:

sos matrix

現在,您num長相酷似基質含有一部分所有b's,而den包含的(其實是a_0的)和a的。

大部分MATLAB函數(includeing的freqz功能)可以處理sos -matrices,所以這將是明智的做法,以創建SOS矩陣和調用函數:

sos = [num,den]; 
freqz(sos); 

看來這在老年人不支持MATLAB的版本。在這種情況下,你必須把它轉換爲tf(傳遞函數)格式第一:

[b,a] = sos2tf(sos); 
freqz(b,a); 
+0

這樣擺脫了錯誤,但它仍然看上去一點也不像在的FDATool過濾器預覽。我使用了以下代碼: freqz(num,den,1:1:10000,48000) 這就是它的樣子:http://i.imgur.com/CZwBaOh.png – codedude 2015-04-04 15:25:25

+0

只需使用'num'和你在你的問題和我發佈的代碼中有沒有其他的變化。那麼你將得到相同的預覽在'fd​​atool' – hbaderts 2015-04-04 15:47:07

+0

這產生這個:http://i.imgur.com/0Eaimb2.png – codedude 2015-04-04 15:49:53