DSPRelated.com
Forums

IIR filter design, Matlab and a genetic algorithm

Started by steph_tsf March 19, 2008
Hello,

Can somebody indicate some Matlab code, where IIR filters do get
synthezised based on a target magnitude curve and optionally a target
phase curve also ?

There are interesting publications, like from :

- Baicher
- Juang-Kong
- Kakaboga-Cetinkaya

I'd like experiment on that idea using Matlab. Especially comparing the
results with the Yule-Walker method and with the FDLS-Bechin method.
Any clue welcome.

Thanks
On Mar 19, 2:02 am, "steph_tsf" <stephanecnocka...@hotmail.com> wrote:
> Hello, > > Can somebody indicate some Matlab code, where IIR filters do get > synthezised based on a target magnitude curve and optionally a target > phase curve also ? > > There are interesting publications, like from : > > - Baicher > - Juang-Kong > - Kakaboga-Cetinkaya > > I'd like experiment on that idea using Matlab. Especially comparing the > results with the Yule-Walker method and with the FDLS-Bechin method. > Any clue welcome.
Also try the search terms "differential evolution", a genetic algorithm. There's Matlab code for it on a berkeley.edu web site. IMHO. YMMV. -- rhn A.T nicholson d.0.t C-o-M
Thanks for pointing the DE method !

found here indeed :
http://www.icsi.berkeley.edu/~storn/code.html

and the Digital Filter Design Software based on the DE method:
http://www.icsi.berkeley.edu/~storn/fiwiz.html

Steph
hello
i need some matlab or c or c++ cod for IIR filter design with DE algoritm, some one can help me.
tank you


Hello,

I tried the DE method on a 16-tap FIR design problem, and got pretty good
results.

- The 'technical report' explains a crossover algorithm near Fig. 2 (link
on the DE page above): The number of updated parameters is effectively
drawn from a geometrical distribution.
- The Matlab code implements this as option, and uses a binominal
distribution instead for the number of changed parameters.
- So far so good, but the default settings are set in such a way that ALL
parameters are updated.

What would be the motivation behind these methods? I can try and compare,
but maybe there is a good reason to use one or the other.

BTW, I'm using 'strategy 2' (local-to-best), updating all parameters for
now. Population size 100 and weight 0.85 seem to work well.

-markus
 
found the answer under the 'practical advice' section: 
- change few parameters if they aren't tightly coupled (tends to search
along the axes)
- change more parameters if they are highly inter-dependent. The latter is
probably the case for digital filters, as optimizing tap-by-tap makes no
sense at all.
preliminary conclusion from some weekend hacking, if anybody is
interested:
- DE finds global optimum regularly (maybe 9 times out of 10) for a 16 tap
peak-limited FIR within ~1 min of CPU time
- results for a 32-tap filter didn't look to promising, but were meaningful
(local optimum)
- strategy 2 "local-to-best" (see web page and example code) converges
faster than strategy 1 "random" but is more greedy and thus gets easier
stuck in a local optimum.
- Intuition tells me that the problem gets substantially harder for the DE
algorithm with an increasing number of parameters, and results seem to
confirm this.

>On Mar 19, 2:02 am, "steph_tsf" <stephanecnocka...@hotmail.com> wrote: >> Hello, >> >> Can somebody indicate some Matlab code, where IIR filters do get >> synthezised based on a target magnitude curve and optionally a target >> phase curve also ? >> >> There are interesting publications, like from : >> >> - Baicher >> - Juang-Kong >> - Kakaboga-Cetinkaya >> >> I'd like experiment on that idea using Matlab. Especially comparing the >> results with the Yule-Walker method and with the FDLS-Bechin method. >> Any clue welcome. > >Also try the search terms "differential evolution", >a genetic algorithm. There's Matlab code for it on a >berkeley.edu web site. > >
There is a very nice 'generic' Matlab toolbox version of the DE algorithm on FileExchange. I've used it from time to time and always served me well. It's trivial to write your own objective function with cost function, so I find it more flexible than the fiwiz software. It supports quantizing at the same time, which is nice. http://www.mathworks.com/matlabcentral/fileexchange/18593-differential-evolution%20 Dave
interesting, thanks. 
I might just plug in my existing objective function and give it a go.

How many parameters can it handle, and still give "good" results?

A generic solver would be very convenient if it can optimize a cascade of
filters. 
But it needs to be better than designing each stage on its own with a
conventional method and then just running fminsearch to optimize locally.
But I think what I'm asking is impossible, as the number of parameters gets
too large.
>interesting, thanks. >I might just plug in my existing objective function and give it a go. > >How many parameters can it handle, and still give "good" results? > >A generic solver would be very convenient if it can optimize a cascade of >filters. >But it needs to be better than designing each stage on its own with a >conventional method and then just running fminsearch to optimize locally. >But I think what I'm asking is impossible, as the number of parameters
gets
>too large. >
I have used it for exactly that (quantization for a cascade of multirate filters), but the number of coefficients was low (<8) since it was based on the bireciprocal lattice (wave filters). Honestly a long exhaustive search around the ideal solution worked better. However I thought it was extremely impressive that even given a random starting point, DE would find a near optimal solution in about 10 minutes.