我想找到很多低通滤波器的截止频率。因此,我想要一个可以为我做到这一点的功能。我可以制作一个波特图并找到 -3dB 的频率,但这既无聊又耗时。有人知道我如何自动执行此过程吗?我正在尝试
[mag,phase] = bode(sys)
但失败了。我该怎么办?
我有滤波器系数a
,b
可用。当我离散化变换函数时,我尝试使用一些不同的技术,因此我希望根据经验从 EKV 中获得截止频率:
y_k = b(1)*x_k + b(2)*x_{k-1} – a(2)*y_{k-1}
我想找到很多低通滤波器的截止频率。因此,我想要一个可以为我做到这一点的功能。我可以制作一个波特图并找到 -3dB 的频率,但这既无聊又耗时。有人知道我如何自动执行此过程吗?我正在尝试
[mag,phase] = bode(sys)
但失败了。我该怎么办?
我有滤波器系数a
,b
可用。当我离散化变换函数时,我尝试使用一些不同的技术,因此我希望根据经验从 EKV 中获得截止频率:
y_k = b(1)*x_k + b(2)*x_{k-1} – a(2)*y_{k-1}
您可以在 LTI 对象(传输函数等)上使用带宽命令:
G = tf(1, [1 1])
bandwidth(G)
ans =
0.9976
如果您没有控制系统工具箱,您可以这样做:
% 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 Toolbox for freqz()
.
matlab中有一个函数可以给你你的截止频率,它叫做'freqz'
如果您已经知道您的滤波器系数“a”和“b”。然后 freqz 提供两个变量输出。一个变量存储复数幅度增益,另一个变量存储归一化频率。基本上,您需要做的就是运行一个循环,找到最接近您的通带增益负 3dB 的增益。然后读出你的频率变量的相应指数,你就有了答案。