Home > Mobile >  Equivalent to MATLAB's freqz in Julia
Equivalent to MATLAB's freqz in Julia

Time:12-13

MATLAB has a nice library of digital signals processing functions that give you a lot of control over linear-time invariant systems. My goal is to view the frequency response of a system governed by two vectors a=[1, -1.1, 0.46] and b=[1, 0.04, 0.76].

To do this in MATLAB, I'd just use the freqz(b,a) and get back the frequency response h and frequencies evaluated w. I am working in Julia and am using the DSP package, so I'm attempting to use the DSP.Filters.freqresp function. To set this up, I define the vectors and import the relevant package:

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

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

When I run this I get the error

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

How should I be implementing this function to obtain a valid result?

CodePudding user response:

@Shayan pointed me in the right direction by mentioning PolynomialRatio, as plugging in the a and b vectors give a representation that freqresp will accept. As a result, I get the same answer as in 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))

Which gives

enter image description here

  • Related