## Documentation Center |

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] = invfreqz(h,w,n,m)` returns
the real numerator and denominator coefficients in vectors

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] = invfreqz(h,w,n,m,wt)` weights
the fit-errors versus frequency, where

`[b,a] = invfreqz(h,w,n,m,wt,iter)` and

`[b,a] = invfreqz(h,w,n,m,wt,iter,tol)` 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,[],iter,tol)

`[b,a] = invfreqz(h,w,n,m,wt,iter,tol,'trace')` displays
a textual progress report of the iteration.

`[b,a] = invfreqz(h,w,'complex',n,m,...)` creates
a complex filter. In this case no symmetry is enforced, and the frequency
is specified in radians between -π and π.

Convert a simple transfer function to frequency response data and then back to the original filter coefficients:

a = [1 2 3 2 1 4]; b = [1 2 3 2 3]; [h,w] = freqz(b,a,64); [bb,aa] = invfreqz(h,w,4,5) bb = 1.0000 2.0000 3.0000 2.0000 3.0000 aa = 1.0000 2.0000 3.0000 2.0000 1.0000 4.0000

Notice that `bb` and `aa` are
equivalent to `b` and `a`, respectively.
However, `aa` has poles outside the unit circle and
thus the system is unstable. Use `invfreqz`'s iterative
algorithm to find a stable approximation to the system:

[bbb,aaa] = invfreqz(h,w,4,5,[],30) bbb = 0.2427 0.2788 0.0069 0.0971 0.1980 aaa = 1.0000 -0.8944 0.6954 0.9997 -0.8933 0.6949

[1] Levi, E.C., "Complex-Curve Fitting," IRE Trans. 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*,
Prentice-Hall, 1983.

Was this topic helpful?