Forums

Modulated allpass filter in Matlab

Started by Gustave June 24, 2003
Hi everyone,

I'm looking for a 'simple' way to implement allpass filters of varying
depth in Matlab.
Any suggestion welcome.

Thanks,

Gus
Gustave wrote:
> > Hi everyone, > > I'm looking for a 'simple' way to implement allpass filters of varying > depth in Matlab. > Any suggestion welcome. > > Thanks, > > Gus
I can't help, but I'm curious: what do you mean by "depth"? Jerry -- Engineering is the art of making what you want from things you can get. �����������������������������������������������������������������������
Jerry Avins wrote:
> Gustave wrote: >> I'm looking for a 'simple' way to implement allpass filters of varying >> depth in Matlab. >> Any suggestion welcome. > I can't help, but I'm curious: what do you mean by "depth"?
I think he wants to build a guitar phaser ;-) To Gustave: You could look for "lattice" (or "ladder") filters. The Matlab-code is 2 or 3 lines then ... Mattias
Gus,

You can try the eigenfilter technique in

T.Q. Nguyen and et.al., "Eigenfilter Approach for the Design of Allpass
Filters Approximating a Given Phase Response", IEEE Trans on Signal
Processing, vol 42(9), 09/1994.

It approximates the least square error criterion using the Taylor
approximation so that the problem can be formulated into a Rayleigh
quotient.  I've used the iterative technique described in the paper,
though not for designing allpass filters, but for other FIR filters.
Nonetheless it's easy to implement and works quite well.

hth,

cf 

Mattias Schick wrote:
> > Jerry Avins wrote: > > Gustave wrote: > >> I'm looking for a 'simple' way to implement allpass filters of > >> varying depth in Matlab. > >> Any suggestion welcome. > > I can't help, but I'm curious: what do you mean by "depth"? > > I think he wants to build a guitar phaser ;-) > > To Gustave: > You could look for "lattice" (or "ladder") filters. > The Matlab-code is 2 or 3 lines then ... > Mattias
Some details about the filter I'd like to simulate:

H(z) = (g+z^-k)/(1+gz^-k) -> transfer function for an allpass filter
with fixed delay (trivial to implement with filter.m Matlab script).

For an allpass filter of varying depth:

H(z) = [g+z^(-k-d)]/[1+gz^(-k-d)]

where d is not a constant, but rather a varying quantity:

d = int(d0*sin(wt))

Thanks for your inputs.

Gustave
Gustave schrieb:
> For an allpass filter of varying depth: > H(z) = [g+z^(-k-d)]/[1+gz^(-k-d)] > where d is not a constant, but rather a varying quantity: > d = int(d0*sin(wt))
Hi Gustave, you want an allpass with modulated order? That's a real challenge! ;-) It could be done with cascaded allpasses and setting the amount needed to "passive" (pole(s) @z=0, zero(s) @z=inifinity <= that is the main problem !!). The other way is to tap a filter-cascade ... maybe with crossfade ... Mattias
i wrote (nonsense;-)
> It could be done with cascaded allpasses and setting the amount needed to > "passive" (pole(s) @z=0, zero(s) @z=inifinity <= that is the main problem !!).
... in this way they would still be allpasses! Zeros schould also be move to z=0, but when crossing the unit-circle that will temporarily become a highpass (N=1) or a notchfilter (N=2). Mattias