DSPRelated.com
Forums

How to best detect tone amplitudes quickly?

Started by Gery August 23, 2006
Hello



I need to be able to detect the amplitude of a frequency faster than 6ms 
(the measurement is not made continuously). The sample frequency is 46800 Hz 
and the frequency to detect is 1650 Hz.



If I use a IIR filter it has an transient period before it gives a steady 
state output, so I must wait long enough for the output to reach steady 
state before I measure the amplitude. So the 6 ms is too short to wait.



Is the Goertzel algorithm the easiest alternative or are there other 
alternatives?



Gery wrote:
> Hello > > > > I need to be able to detect the amplitude of a frequency faster than 6ms > (the measurement is not made continuously). The sample frequency is 46800 Hz > and the frequency to detect is 1650 Hz.
The 6ms window implies that you measure in a band with bandwidth 1/6ms = 170 Hz centered at 1650 Hz. Is that OK for you?
> If I use a IIR filter it has an transient period before it gives a steady > state output, so I must wait long enough for the output to reach steady > state before I measure the amplitude. So the 6 ms is too short to wait. > > > > Is the Goertzel algorithm the easiest alternative or are there other > alternatives?
The Goetzel may be the "easier" option, but all alternatives will have some sort of initial transient. And of course, if your spec is tighter than the 170 Hz implied by the 6ms window, it doesn't really matter since it is not possible to get tighter with Fourier-based methods. Rune
Gery wrote:
> Hello > > > > I need to be able to detect the amplitude of a frequency faster than 6ms > (the measurement is not made continuously). The sample frequency is 46800 Hz > and the frequency to detect is 1650 Hz. > > > > If I use a IIR filter it has an transient period before it gives a steady > state output, so I must wait long enough for the output to reach steady > state before I measure the amplitude. So the 6 ms is too short to wait. > > > > Is the Goertzel algorithm the easiest alternative or are there other > alternatives?
You need to give more information. What else will be in the channel with the 1650Hz tone? What is the tolerance on the tone? How precisely do you need to determine the onset time of the tone? These will determine what is feasible. As you found, a narrow bandpass IIR takes time to pump up. If you want a Goertzel transform to respond only to a narrow band it will also require quite a lot of samples to give its answer, and it will not tell you the exact time on onset, if that is important. A good way is often to reverse the problem. Measure the total power in the channel, and measure the output from a narrow bandstop filter, centred at 1650Hz. If the total is large, but the bandstop output is small, the bulk of the energy must be in the stop band of the filter - bingo, you know the tone is there. The total power measurement will obviously respond quickly. The energy coming out of the notch filter will initially be large, and take a little time to decay. However, I've found this approach to work very well in telephony tone detection. When the tone stops, the output of the bandstop filter can go a bit wild, if its Q is high, but if the goal is crisp detection of he onset of the tone it can be very effective. Regards, Steve
Rune Allnor" <allnor@tele.ntnu.no> wrote in message
news:1156326967.177861.155210@p79g2000cwp.googlegroups.com...


> The 6ms window implies that you measure in a band with bandwidth > 1/6ms = 170 Hz centered at 1650 Hz. Is that OK for you?
The BW is 184 Hz in the calculated IIR-filter.
> The Goetzel may be the "easier" option, but all alternatives will have > some sort of initial transient. And of course, if your spec is tighter > than the 170 Hz implied by the 6ms window, it doesn't really matter > since it is not possible to get tighter with Fourier-based methods.
A 6 ms measurement window gives me 280 samples to evaluate. With the Goetzel algorithm I would get a frequency bin width of 167 Hz. (i think). And if i multiply the input signal with a simple window function (triangle) i get better dampening of other frequency's. Maby I try that.
"Steve Underwood" <steveu@dis.org> wrote in message 
news:echaig$rvr$1@home.itg.ti.com...

> You need to give more information. What else will be in the channel with > the 1650Hz tone? What is the tolerance on the tone? How precisely do you > need to determine the onset time of the tone? These will determine what is > feasible.
The closest other signal is at 2200 Hz. (so its pretty close) What do you mean with "onset time"?
Gery wrote:
> "Steve Underwood" <steveu@dis.org> wrote in message > news:echaig$rvr$1@home.itg.ti.com... > > >>You need to give more information. What else will be in the channel with >>the 1650Hz tone? What is the tolerance on the tone? How precisely do you >>need to determine the onset time of the tone? These will determine what is >>feasible. > > > The closest other signal is at 2200 Hz. (so its pretty close) > > What do you mean with "onset time"?
The time at which the tone begins. Steve
"Steve Underwood" <steveu@dis.org> wrote in message 
news:echmvd$lik$1@nnews.pacific.net.hk...
> Gery wrote: >> "Steve Underwood" <steveu@dis.org> wrote in message
>>>need to determine the onset time of the tone? These will determine what >>>is feasible.
>> What do you mean with "onset time"? > > The time at which the tone begins. >
It's not important.
"Gery" <gery@ddd.com> wrote in message 
news:44ec192f$0$75035$14726298@news.sunsite.dk...
> Hello > > > > I need to be able to detect the amplitude of a frequency > faster than 6ms (the measurement is not made > continuously). The sample frequency is 46800 Hz and the > frequency to detect is 1650 Hz. > > > > If I use a IIR filter it has an transient period before it > gives a steady state output, so I must wait long enough > for the output to reach steady state before I measure the > amplitude. So the 6 ms is too short to wait. > >
Have you considered feeding the signal into a delay line, making your detection decision on the real-time signal but doing your processing on the delayed signal?
In article <bu8Hg.6423$L6.1003@bignews8.bellsouth.net>, "John E. Hadstate" <jh113355@hotmail.com> wrote:
> >Have you considered feeding the signal into a delay line, >making your detection decision on the real-time signal but >doing your processing on the delayed signal? >
This sounds like a good idea to me. You have a processor anyway, you might as well take advantage of it. If your SNR is low, you will need a matched filter to get a good estimate.