From: Robert Adams on 15 Jan 2010 09:37 I am wondering if anyone has a good program for achieving an arbitrary desired phase response with a cascade of allpass filters (either 1st or 2ndorder). I've begun writing a gradientsearch algorithm but I'm thinking it's already been done. Thanks for any pointers. Bob Adams
From: robert bristowjohnson on 15 Jan 2010 17:49 On Jan 15, 9:37 am, Robert Adams <robert.ad...(a)analog.com> wrote: > I am wondering if anyone has a good program for achieving an arbitrary > desired phase response with a cascade of allpass filters (either 1st > or 2ndorder). I've begun writing a gradientsearch algorithm but I'm > thinking it's already been done. > > Thanks for any pointers. Bob, dunno about the zplane, but in the splane, but considering group delay, it's a lot like designing allpole filters, but twice as much. Consider a single pole (and zero) APF: H(s) = (w0  s)/(w0 + s) H(jw) = (w0  jw)/(w0 + jw) H(jw)^2 = (w0^2 + w^2)/(w0^2 + w^2) = 1 (as it should) arg{ H(jw) } = arg{ w0  jw }  arg{ w0 + jw } =  2 * arctan(w/w0) group delay: tau(w) =  (d/dw)arg{ H(jw) } =  (d/dw)(2 * arctan(w/w0)) = (2/w0) * 1/(1 + (w/w0)^2) = (2/w0) * H_lpf(jw)^2 where H_lpf(s) = 1/(w0 + s) now, for second order, i think something very similar comes out. so if you take your desired phase response, convert that to your desired group delay, then considering the inverse bilinear transform, prewarp the desired group delay, then design an analog allpole LPF that hits that warped function. i dunno. but maybe it's a start. r bj
From: Robert Adams on 17 Jan 2010 20:50 On Jan 15, 5:49 pm, robert bristowjohnson <r...(a)audioimagination.com> wrote: > On Jan 15, 9:37 am, Robert Adams <robert.ad...(a)analog.com> wrote: > > > I am wondering if anyone has a good program for achieving an arbitrary > > desired phase response with a cascade of allpass filters (either 1st > > or 2ndorder). I've begun writing a gradientsearch algorithm but I'm > > thinking it's already been done. > > > Thanks for any pointers. > > Bob, dunno about the zplane, but in the splane, but considering > group delay, it's a lot like designing allpole filters, but twice as > much. > > Consider a single pole (and zero) APF: > > H(s) = (w0  s)/(w0 + s) > > H(jw) = (w0  jw)/(w0 + jw) > > H(jw)^2 = (w0^2 + w^2)/(w0^2 + w^2) = 1 (as it should) > > arg{ H(jw) } = arg{ w0  jw }  arg{ w0 + jw } > > =  2 * arctan(w/w0) > > group delay: > > tau(w) =  (d/dw)arg{ H(jw) } > > =  (d/dw)(2 * arctan(w/w0)) > > = (2/w0) * 1/(1 + (w/w0)^2) > > = (2/w0) * H_lpf(jw)^2 > > where > > H_lpf(s) = 1/(w0 + s) > > now, for second order, i think something very similar comes out. > > so if you take your desired phase response, convert that to your > desired group delay, then considering the inverse bilinear transform, > prewarp the desired group delay, then design an analog allpole LPF > that hits that warped function. > > i dunno. but maybe it's a start. > > r bj Thanks! Actually I discovered in the last few days that there are Matlab routines designed to implement phasecompensated IIR filters that do the job pretty well. Bob

Pages: 1 Prev: Newbie: Need coefficients for a linearphase FIR filter Next: branch cuts in the way 