2012-08-24 160 views
2

我想找到很多低通濾波器的截止頻率。因此,我想要一個可以爲我做的功能。我可以做一個波德圖,找到-3dB的頻率,但這是無聊而費時的。有人知道我如何自動執行此過程嗎?我試着用功能,找到低通濾波器的截止頻率(在matlab中)

[mag,phase] = bode(sys) 

但失敗。我應該怎麼做呢?

我有濾波器係數a,b可用。我嘗試在我的離散變換函數使用一些不同的技術,因此,我想截止頻率從經驗EKV:

y_k = b(1)*x_k + b(2)*x_{k-1} – a(2)*y_{k-1} 
+2

哪種形式的過濾器可用?轉換功能?濾波器係數? – Deve

+0

如果您有關濾波器設計類型的信息,您可能會更好地分析找到-3 dB點,而不是憑經驗找到它。請提供更多信息或一些示例代碼。 – learnvst

回答

4

您可以使用LTI對象bandwidth命令(傳遞函數等):

G = tf(1, [1 1]) 
bandwidth(G) 

ans = 

    0.9976 
+0

我可以讓帶寬(G)輕鬆與HP,BP,BS-過濾器(如LP過濾器一樣)使用嗎? – user1564762

+1

不是直接的,因爲描述中說「...增益下降到DC值的70.79%(-3 dB)」以下。例如,HP濾波器的DC值爲0,因此該命令不起作用。但是,對於惠普過濾器,1-HP是指令可以工作的LP過濾器。 – Kavka

2

如果沒有控制系統工具箱,你可以那樣做:

% some filter 
[b, a] = butter(5, 0.6); 

% Determine frequency response 
[h, w] = freqz(b, a, 2048); 

% linear approximation of 3 dB cutoff frequency 
ind = find(abs(h) < sqrt(1/2), 1, 'first'); 
slope = (abs(h(ind)) - abs(h(ind - 1)))/(w(ind) - w(ind - 1)); 
w_3dB = (sqrt(1/2) - abs(h(ind - 1)) + slope * w(ind - 1))/slope; 

% check result 
figure; plot(w,abs(h)) 
hold on; 
plot(w_3dB, sqrt(1/2), 'rx'); 

Addmitedly,你需要的DSP工具箱freqz()

0

有一個在MATLAB的功能,可以給你的截止頻率和其所謂的「freqz」

如果你已經知道你的濾波器係數「a」和「B」。然後freqz提供兩個可變輸出。一個變量存儲複數幅度增益,另一個變量存儲歸一化頻率。基本上所有你需要做的就是運行一個循環,找到最接近你的通帶增益減去3dB的增益。然後讀出您的頻率變量的相關索引,然後獲得答案。