[comp.dsp] Digital Filter Design

kevo@audiolab.uwaterloo.ca (Kevin Kotorynski) (11/15/90)

I am trying to implement some COMPLEX transfer functions which 
are not minimum-phase, and I need to retain the magnitude AND
PHASE characteristics of the original filter transfer function.

The impulse responses are too long for realization using FIR filters,
since real-time processing is required.  Can any-one suggest an
algorythm or some good reading to help me predict the
coefficients for a direct-form filter, given the reqired impulse
response or transfer function?  Any suggestions welcome; please
E-Mail or Post responses.

larry@rsiatl.UUCP (Larry Kahhan) (11/16/90)

In article <1990Nov14.194941.16247@watserv1.waterloo.edu> kevo@audiolab.uwaterloo.ca (Kevin Kotorynski) writes:
>I am trying to implement some COMPLEX transfer functions which 
>are not minimum-phase, and I need to retain the magnitude AND
>PHASE characteristics of the original filter transfer function.
>
>The impulse responses are too long for realization using FIR filters,
>since real-time processing is required.  Can any-one suggest an
>algorythm or some good reading to help me predict the
>coefficients for a direct-form filter, given the reqired impulse
>response or transfer function?  Any suggestions welcome; please
>E-Mail or Post responses.


MathCad will do what you want. I've used it to fit arbitray transfer
functions representing IIR type filters against a complex frequency
response dataset. This is probably the simplest approach.

MatLab has similar capabilities using their System Identification
Toolbox.

Another approach would be to use an adaptive filter and let it find
its own coefficients.

If you're into Fortran, there is a program in the IEEE DSP collection
by Andy Deczky that will also do what you want.


In sum, it pretty much depends on which tools you happen to have
available. I like the MathCad approach, but that's my personal
preference.

Larry Kahhan - NRA, NRA-ILA, CSG, GSSA , & GOA 

berchin@nicmad.UUCP (Greg Berchin) (11/23/90)

It sounds like a good application for "Frequency Domain Least Squares" system 
identification.  Inputs are frequency response values (magnitude and phase) at 
a number of discrete frequencies from DC to one-half the sampling frequency 
(for filters having real coefficients), or from DC to the sampling frequency 
(for filters having complex coefficients).  Outputs are coefficients of a 
transfer function of the form:

                    -1           -n
            b  + b z  + ... + b z
             0    1            n
    H(z) = --------------------------
                    -1           -m
             1 + a z  + ... + a z
                  1            m

Causality is assumed, stability is not necessary.  You have total control over
"m" and "n", so you can model an all-zero system, an all-pole system, or a
pole-zero system.  Both magnitude and phase are modeled.  The algorithm is
VERY good at finding discrete equivalents for continuous-domain filters, which
is what it sounds like you are trying to do.

Your friendly university library should have, or be able to get, these:

    G. Berchin, R. Roberts, and M.A. Soderstrand; "A New Model-Based Parameter
    Estimation Technique for Use in Deconvolution"; Proceedings of the 1986
    Asilomar Conference on Signals, Systems, and Computers; Pacific Grove, CA,
    November 1986.

    G. Berchin, M.A. Soderstrand, and R. Roberts; "Deconvolution Using
    Model-Based Parameter Estimation", Proceedings of the 30th Midwest
    Symposium on Circuits and Systems; Syracuse NY, August 1987.

    G. Berchin and M.A. Soderstrand; "A Total Least-Squares Approach to
    Frequency Domain System Identification"; Proceedings of the 32nd Midwest
    Symposium on Circuits and Systems; Urbana IL, August 1989.

If not, or if you need any help with the algorithm, contact me through the net.

        Greg Berchin