我正在 MATLAB 中创建一个过滤器,如下所示:
[num,den] = ellip(10,0.1,50,4000/22050,'high');
使用 freqz 然后我发现滤波器的频率响应如下:
freqz(num,den)
这会按预期生成高通滤波器图。但是,如果我尝试使用 bode 函数绘制同一组值,我会得到完全不同的结果。
bode(tr(num,den))
这会生成一个低通滤波器图。我不明白这些功能是如何工作的吗?我的理解是 freqz 将传递函数的系数作为其参数。这也是我对 bode 函数所做的。
为什么不同?
最佳答案
[b,a] = ellip(n,Rp,Rs,Wp)
其中 b,a
是 z 域代表,
而默认情况下 tf
用于 s 域:
你可以使用filt
,
[b,a] = ellip(10,0.1,50,4000/22050,'high');
freqz(b,a)
figure
bode(filt(b,a))
您还可以使用 bode(tf(b,a,-1,'variable','z^-1'))
。
检查 tf
的变量属性
。
String specifying the transfer function display variable. Variable can take the following values:
's' — Default for continuous-time models
'z' — Default for discrete-time models
'p' — Equivalent to 's'
'q' — Equivalent to 'z'
'z^-1' — Inverse of 'z'
'q^-1' — Equivalent to 'z^-1'
关于matlab - bode 和 freqz 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27241406/