I would like to generate coefficents for an all pass that approximates a desired group delay response. I was surfing the net for methods and came across a ieee article that uses the hilber transform method to design such a filter. http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=112149&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D112149 I guess the method is based on ceptral coefficients and some minium phase arguments and i must admit soem of my theory on the topic is a little shabby. None the less, the paper lists the 10 steps to generate the coefficient in a cookbook type maner. The paper does an example and lists the coefficients that should result from the method. I figured id throw the equations in Matlab and see what if i could mimic the resuls and got stuck and the wrong result. If any of you guys have ieee and could see the article and are willing to help, i could post what i have as MATLAB code to mimic the paper and hopefully someone could tell me where i went wrong. (i think step/equation 9 out of 10 is where i screwed up.) Anyone familiar with such design method and willing to look at the code? I made a version that shoudl mimic the steps verbatim and have commented it. Thanks in advance.
Help with All-Pass Filter Design Method
Started by ●May 2, 2013
Reply by ●May 2, 20132013-05-02
I tried to download the article, but was politely told that "This
content is outside your IEEE member subscription".
Since this is a digital filter, I'm assuming that trivial sample
delay is not an option (i.e., your desired group delay is either
not an integer number of samples, or is not constant). Would
oversampling such that the delay *is* an integer number of samples
help?
Otherwise, at the risk of sounding like Rudy Giuliani ("A noun, a
verb, and FDLS"), I'd run it through FDLS to see if it can find a
viable solution for you.
Greg
Reply by ●May 2, 20132013-05-02
>I tried to download the article, but was politely told that "This >content is outside your IEEE member subscription". > >Since this is a digital filter, I'm assuming that trivial sample >delay is not an option (i.e., your desired group delay is either >not an integer number of samples, or is not constant). Would >oversampling such that the delay *is* an integer number of samples >help? > >Otherwise, at the risk of sounding like Rudy Giuliani ("A noun, a >verb, and FDLS"), I'd run it through FDLS to see if it can find a >viable solution for you. > >GregMy 'desired' group delay is a nasty one, but very specific. Ive played with some ifft methods to design the filter, but no good so far. Ive never had a need for a 'perfect' all pass until now. From what i understand i cant have zeros in my transfer function, so i was pushed to look for true 'all pass' filter design methods. -bummer about the IEEE polite denial
Reply by ●May 2, 20132013-05-02
On Thu, 02 May 2013 10:13:05 -0500, "westocl" <31050@dsprelated> wrote:>From what i understand i cant have zeros in my transfer function, so i was >pushed to look for true 'all pass' filter design methods.You need TRUE allpass behavior all the way down to DC? That's going to make for a very long impulse response. Years ago I needed to design a FIR Hilbert Transformer for audio. Trying to maintain 90� phase shift near DC was untenable, but allowing a highpass characteristic with a cutoff ~30Hz made the job pretty easy. So I recommend that you compromise on the amplitude response in any way available to you. Greg
Reply by ●May 2, 20132013-05-02
On May 2, 11:13�am, "westocl" <31050@dsprelated> wrote:> > My 'desired' group delay is a nasty one, but very specific. Ive played with > some ifft methods to design the filter, but no good so far. Ive never had a > need for a 'perfect' all pass until now. >you cannot simply have whatever group delay you want (even as a target) while having a causal impulse response. now you *can* add a constant delay to your "desired" group delay and approach that to within some level of tolerance. but there is no filter design method that can give you an APF that approaches any given nasty target, unless you allow it to toss in additional constant delay. (sometimes, like with the Hilbert, you can delay other signals by that constant delay so that the relative phase is what you want.)> From what i understand i cant have zeros in my transfer function, so i was > pushed to look for true 'all pass' filter design methods.i think you *must* have zeros. you are not going to get an APF with just poles, unless it is a pure delay. r b-j
Reply by ●May 2, 20132013-05-02
On May 2, 11:19�am, Greg Berchin <gjberc...@chatter.net.invalid> wrote:> On Thu, 02 May 2013 10:13:05 -0500, "westocl" <31050@dsprelated> > wrote: > > >From what i understand i cant have zeros in my transfer function, so i was > >pushed to look for true 'all pass' filter design methods. > > You need TRUE allpass behavior all the way down to DC?then i think he needs to build it outa cascaded IIR blocks. except for a pure delay, i don't think an FIR will cut it.> That's going to make for a very long impulse response. > > Years ago I needed to design a FIR Hilbert Transformer for audio. > Trying to maintain 90� phase shift near DC was untenable, but > allowing a highpass characteristic with a cutoff ~30Hz made the > job pretty easy.still a pretty large number of taps.> So I recommend that you compromise on the > amplitude response in any way available to you.yup. or he has to build it out of IIR APFs. r b-j
Reply by ●May 2, 20132013-05-02
On Thu, 2 May 2013 08:37:00 -0700 (PDT), robert bristow-johnson <rbj@audioimagination.com> wrote:>> Years ago I needed to design a FIR Hilbert Transformer for audio. >> Trying to maintain 90� phase shift near DC was untenable, but >> allowing a highpass characteristic with a cutoff ~30Hz made the >> job pretty easy. > >still a pretty large number of taps.About 4K, IIRC, for the coefficient precision that I had. Since I was using 16K FFTs, it fit nicely. It was a whole lot better than the >64K taps I would have needed to take it all the way down to DC. Greg
Reply by ●May 2, 20132013-05-02
> >I would like to generate coefficents for an all pass that approximates a >desired group delay response. I was surfing the net for methods and came >across a ieee article that uses the hilber transform method to designsuch>a filter. >I have used the simple 'iirgrpdelay' function in Matlab before and it worked fine for what I was trying to approximate. I believe it falls short if you're trying to do something too nasty, but it's worth a shot. The reference quoted in the help has very good information on the topic and is worth reading if you want to know what the function actually does. Dave
Reply by ●May 2, 20132013-05-02
>Years ago I needed to design a FIR Hilbert Transformer for audio. >Trying to maintain 90� phase shift near DC was untenable, but >allowing a highpass characteristic with a cutoff ~30Hz made the >job pretty easy. So I recommend that you compromise on the >amplitude response in any way available to you. > >Greg >Wouldn't maintaining a 90 degree phase shift at DC be impossible? In any event, if the only constraint of the filter is the group delay, than there is no reason why the phase at DC should not be 0. If the group delay is dp(w)/dw, where p is the phase and w is the angular frequency, than p(w) = integral from 0 to w of dp(w)/dw with an initial conidition of dp(w)/dw = 0. While I'm sure everyone already got that far, I don't see why the ifft based approach wouldn't work, at least as an inefficient proof of concept in MATLAB. westocl, would you elaborate on the problems you encountered in this approach? Was the impulse response non-convergent (or really really long) or acausal or something of that nature? Or did the impulse response generated simply not behave as expected?
Reply by ●May 2, 20132013-05-02
On 5/2/2013 10:13 AM, westocl wrote:>> I tried to download the article, but was politely told that "This >> content is outside your IEEE member subscription". >> >> Since this is a digital filter, I'm assuming that trivial sample >> delay is not an option (i.e., your desired group delay is either >> not an integer number of samples, or is not constant). Would >> oversampling such that the delay *is* an integer number of samples >> help? >> >> Otherwise, at the risk of sounding like Rudy Giuliani ("A noun, a >> verb, and FDLS"), I'd run it through FDLS to see if it can find a >> viable solution for you. >> >> Greg > > My 'desired' group delay is a nasty one, but very specific. Ive played with > some ifft methods to design the filter, but no good so far.If FFT doesn't work, then your problem is that you don't have a clue. As such, no cookbook method is going to help. Seek for professional assistance or go read textbooks. VLV






