Forums

Calculating filter coefficients from magnitude squared filter

Started by Unknown June 29, 2007
Good Morning,

As part of my current research, I am looking into applying IIR filters
to generate noise with a variety of spectra. These filters need to be
designed at runtime. Only the magnitude of the filter's transfer
function is relevant - the phase of the white noise process used to
drive to filter is already random. Because of this, I can use one of
the many magnitude-squared filter design approaches available.

I have implemented the method described by Dudgeon[1] (and a similar
method by Rabiner[2]), which casts the problem of designing a filter
as a linear programming problem, then uses a differential correction
algorithm to find a  Chebyshev-optimum filter for the given response.

My problem is that the output of this algorithm is the sets of
coefficients c_i and d_i of the polynomials C and D, making the
transfer function

F = C/D
and
F = H(z)H(z-1)

where
H(z) = B(z)/A(z)

What I want to get are the coefficients a and b of polynomials A and
B, to get a filter with the transfer function H(z).

The coefficients c and b of C and B are related like this:
C = \sum_{i=-m}^{m} c_i z^{-1}
and
C = (\sum_{i=0}^{m} b_i z^{-i})(\sum_{i=0}{m} b_i z^{i})
with the same going for D and A.

Is there a general way to extract co-efficients a and b from c and d?
It seems as though there should be, and I am just being extremely
slow.

Regards

Marc Brooker

References:

[1] @ARTICLE{Dudgeon1974,
   author = {Dan E. Dudgeon},
   title = {Recursive Filter Design Using Differential Correction},
   journal = {IEEE Transactions on Acoustics, Speech, and Signal
Processing},
   year = {1974},
   volume = {22},
   pages = {443-448},
   number = {6},
   month = dec
}

[2] @ARTICLE{Rabiner1974,
   author = {Lawrence R. Rabiner and Nancy Y. Graham and Howard D.
Helms},
   title = {Linear Programming Design of IIR Digital Filters with
Arbitrary Magnitude Function},
   journal = {IEEE Transactions on Acoustics, Speech, And Signal
Processing},
   year = {1974},
   volume = {22},
   pages = {117-123},
   number = {2},
   month = apr
}

On Jun 29, 8:58 pm, marcbroo...@gmail.com wrote:
> Good Morning, > > As part of my current research, I am looking into applying IIR filters > to generate noise with a variety of spectra. These filters need to be > designed at runtime. Only the magnitude of the filter's transfer > function is relevant - the phase of the white noise process used to > drive to filter is already random. Because of this, I can use one of > the many magnitude-squared filter design approaches available. > > I have implemented the method described by Dudgeon[1] (and a similar > method by Rabiner[2]), which casts the problem of designing a filter > as a linear programming problem, then uses a differential correction > algorithm to find a Chebyshev-optimum filter for the given response. > > My problem is that the output of this algorithm is the sets of > coefficients c_i and d_i of the polynomials C and D, making the > transfer function > > F = C/D > and > F = H(z)H(z-1) > > where > H(z) = B(z)/A(z) > > What I want to get are the coefficients a and b of polynomials A and > B, to get a filter with the transfer function H(z). > > The coefficients c and b of C and B are related like this: > C = \sum_{i=-m}^{m} c_i z^{-1} > and > C = (\sum_{i=0}^{m} b_i z^{-i})(\sum_{i=0}{m} b_i z^{i}) > with the same going for D and A. > > Is there a general way to extract co-efficients a and b from c and d? > It seems as though there should be, and I am just being extremely > slow. > > Regards > > Marc Brooker > > References: > > [1] @ARTICLE{Dudgeon1974, > author = {Dan E. Dudgeon}, > title = {Recursive Filter Design Using Differential Correction}, > journal = {IEEE Transactions on Acoustics, Speech, and Signal > Processing}, > year = {1974}, > volume = {22}, > pages = {443-448}, > number = {6}, > month = dec > > } > > [2] @ARTICLE{Rabiner1974, > author = {Lawrence R. Rabiner and Nancy Y. Graham and Howard D. > Helms}, > title = {Linear Programming Design of IIR Digital Filters with > Arbitrary Magnitude Function}, > journal = {IEEE Transactions on Acoustics, Speech, And Signal > Processing}, > year = {1974}, > volume = {22}, > pages = {117-123}, > number = {2}, > month = apr > > }
Don't completely understand your problem but the answer may well be Spectral Factorization. Given a Power spectrum one can always factor thus S(z)=H(z)H(z^-1) where H(z) is uncausal and H(z^-1) is causal. Loads of papers on this from the days of Wiener. You can even do this with multivariable spectra.
On Jun 29, 11:41 am, gay.highlan...@yahoo.co.uk wrote:
> On Jun 29, 8:58 pm, marcbroo...@gmail.com wrote: > > > > > Good Morning, > > > As part of my current research, I am looking into applying IIR filters > > to generate noise with a variety of spectra. These filters need to be > > designed at runtime. Only the magnitude of the filter's transfer > > function is relevant - the phase of the white noise process used to > > drive to filter is already random. Because of this, I can use one of > > the many magnitude-squared filter design approaches available.
snip
> > Don't completely understand your problem but the answer may well be > Spectral Factorization. Given a Power spectrum one can always factor > thus > > S(z)=H(z)H(z^-1) > > where H(z) is uncausal and H(z^-1) is causal. Loads of papers on this > from the days of Wiener. You can even do this with multivariable > spectra.
Thanks. "Spectral factorization" seems to be the term i was looking for. The problem I am having at the moment is that none of the poles or zeros of my S(z) are anywhere near being on (or outside) the unit circle. It's probably an implementation problem, though. Cheers Marc