找到低通滤波器的截止频率的函数(在matlab中)

时间:2012-08-24 08:53:35

标签: matlab frequency lowpass-filter

我想找到很多低通滤波器的截止频率。因此,我想要一个能为我做到这一点的功能。我可以制作波德图并找到-3dB的频率,但这很无聊且耗时。有人知道如何自动执行此程序吗?我正在尝试

[mag,phase] = bode(sys) 

但失败了。我应该怎么做呢?

我有可用的过滤系数ab。当我对变换函数进行离散化时,我尝试使用一些不同的技术,因此我希望从EKV经验地得到截止频率:

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

3 个答案:

答案 0 :(得分:4)

您可以在LTI对象(传输函数等)上使用bandwidth命令:

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

ans =

    0.9976

答案 1 :(得分: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');

另外,您需要freqz()的DSP工具箱。

答案 2 :(得分:0)

matlab中有一个函数可以为您提供截止频率及其所谓的频率&#39;

如果您已经知道过滤系数&#39; a&#39;和&#39; b&#39;。然后freqz提供两个变量输出。一个变量存储复数幅度增益,另一个变量存储标准化频率。基本上你需要做的就是运行一个循环,找到最接近你的通带增益减去3dB的增益。然后读出频率变量的相应索引,你就得到了答案。