我在MATLAB中创建一个过滤器,如下所示:
[num,den] = ellip(10,0.1,50,4000/22050,'high');
使用freqz然后我找到了滤波器的频率响应,如下所示:
freqz(num,den)
这会产生预期的高通滤波器图.但是,如果我尝试使用波特函数绘制相同的值集,我会得到完全不同的东西.
bode(tr(num,den))
这产生低通滤波器图.我不明白这些功能是如何工作的?据我所知,freqz将传递函数的系数作为其参数.这也是我用bode函数做的事情.
为什么不同?
最佳答案
[b,a] = ellip(n,Rp,Rs,Wp)
其中b,a是z域代表,
而tf默认为s-domain:
你可以使用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’