Identify discrete-time filter parameters from frequency response data

`[b,a]`

` = `

invfreqz(h,w,n,m)

[b,a]` = `

invfreqz(h,w,n,m,wt)

[b,a]` = `

invfreqz(h,w,n,m,wt,iter)

[b,a]` = `

invfreqz(h,w,n,m,wt,iter,tol)

[b,a]` = `

invfreqz(h,w,n,m,wt,iter,tol,'`trace`

')

[b,a]` = `

invfreqz(h,w,'`complex`

',n,m,...)

`invfreqz`

is the inverse
operation of `freqz`

; it finds
a discrete-time transfer function that corresponds to a given complex
frequency response. From a laboratory analysis standpoint, `invfreqz`

can
be used to convert magnitude and phase data into transfer functions.

`[b,a]`

returns
the real numerator and denominator coefficients in vectors ` = `

invfreqz(h,w,n,m)`b`

and `a`

of
the transfer function

$$H(z)=\frac{B(z)}{A(z)}=\frac{b(1)+b(2){z}^{-1}+\cdots +b(n+1){z}^{-n}}{a(1)+a(2){z}^{-1}+\cdots +a(m+1){z}^{-m}}$$

whose complex frequency response is given in vector `h`

at
the frequency points specified in vector `w`

. Scalars `n`

and `m `

specify
the desired orders of the numerator and denominator polynomials.

Frequency is specified in radians between 0 and π,
and the length of `h`

must be the same as the length
of `w`

. `invfreqz`

uses `conj`

`(h)`

at `-w`

to
ensure the proper frequency domain symmetry for a real filter.

`[b,a]`

weights
the fit-errors versus frequency, where ` = `

invfreqz(h,w,n,m,wt)`wt`

is a
vector of weighting factors the same length as `w`

.

`[b,a]`

and` = `

invfreqz(h,w,n,m,wt,iter)

`[b,a]`

provide
a superior algorithm that guarantees stability of the resulting linear
system and searches for the best fit using a numerical, iterative
scheme. The ` = `

invfreqz(h,w,n,m,wt,iter,tol)`iter`

parameter tells `invfreqz`

to
end the iteration when the solution has converged, or after `iter`

iterations,
whichever comes first. `invfreqz`

defines convergence
as occurring when the norm of the (modified) gradient vector is less
than `tol`

, where `tol`

is an optional
parameter that defaults to 0.01. To obtain a weight vector of all
ones, use

invfreqz(h,w,n,m,[],iter,tol)

`[b,a]`

displays
a textual progress report of the iteration.` = `

invfreqz(h,w,n,m,wt,iter,tol,'`trace`

')

`[b,a]`

creates
a complex filter. In this case no symmetry is enforced, and the frequency
is specified in radians between -π and π.` = `

invfreqz(h,w,'`complex`

',n,m,...)

[1] Levi, E. C. "Complex-Curve Fitting." *IRE
Transactions on Automatic Control*. Vol. AC-4,
1959, pp. 37–44.

[2] Dennis, J. E., Jr., and R. B. Schnabel. *Numerical
Methods for Unconstrained Optimization and Nonlinear Equations*.
Englewood Cliffs, NJ: Prentice-Hall, 1983.

Was this topic helpful?