在Julia中等效于MATLAB的freqz

7gcisfzg  于 2022-12-13  发布在  Matlab
关注(0)|答案(1)|浏览(330)

MATLAB有一个很好的数字信号处理函数库,可以给予你对线性时不变系统进行大量的控制。我的目标是查看由两个矢量a=[1, -1.1, 0.46]b=[1, 0.04, 0.76]控制的系统的频率响应。
要在MATLAB中执行此操作,我只需使用freqz(b,a)并返回频率响应h和频率评估值w。我在Julia中工作,使用DSP包,因此我尝试使用DSP.Filters.freqresp函数。要进行设置,我定义矢量并导入相关包:

a=[1, -1.1, 0.46]
b=[1, 0.04, 0.76]
using DSP.Filters : freqresp

h, w = freqresp([b,a])

当我运行这个程序时,我得到错误

MethodError: no method matching freqresp(::Vector{Int64})

我应该如何实现此函数以获得有效的结果?

h9vpoimq

h9vpoimq1#

@Shayan提到了PolynomialRatio,为我指出了正确的方向,因为插入ab向量给予freqresp可以接受的表示。结果,我得到了与MATLAB中相同的答案

a=[1, -1.1, 0.46]
b=[1, 0.04, 0.76]

using DSP

z = PolynomialRatio(b,a)
h, w = freqresp(z)

mag = abs.(h)
phase = atan.(imag.(h)./real.(h))*180/pi
p1 = plot(w, mag)
xaxis!("")
yaxis!("Magnitude")

p2 = plot(w, phase)
xaxis!("Normalized Frequency")
yaxis!("Wrapped Phase [deg]")

plot(p1, p2, layout=(2,1))

这就给了

相关问题