我在MATLAB中创建一个过滤器,如下所示:
[num,den] = ellip(10,0.1,50,4000/22050,'high');
使用 freqz 然后我发现过滤器的频率响应如下:
freqz(num,den)
这会产生预期的高通滤波器图。但是,如果我尝试使用 bode 函数绘制相同的值集,我会得到完全不同的东西。
bode(tr(num,den))
这会产生低通滤波器图。我不明白这些功能是如何工作的?据我所知,freqz将传递函数的系数作为其参数。这也是我用bode函数做的事情。
为何与众不同?
答案 0 :(得分:2)
[b,a] = ellip(n,Rp,Rs,Wp)
其中b,a
是z-domain代表,
默认情况下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'))
。
检查variable property
的{{1}}。
指定传递函数显示变量的字符串。变量可以采用以下值:
's' - 连续时间模型的默认值
'z' - 离散时间模型的默认值
'p' - 相当于's'
'q' - 相当于'z'
'z ^ -1' - 'z'的反转
'q ^ -1' - 相当于'z ^ -1'