Dear friends I need to implement a call progress tone detector using goertzel algorithm. To avoid strong signal inputs to the Goertzel filters, additional gain control is used to prevent early overflow: ; Control gain of the input sample x(n) ; On a 32 samples length buffer of input samples, the average peak ; amplitude GAIN_amp is computed using the last 32 samples. The current ; input samples are then attenuated using the foll formulas: ; GAIN_CON = (1/2)SQRT(2) ; GAIN_AMP(n) = GAIN_CON*(1/16)*[abs(x(n))+abs(x(n+1))+...+abs(x(n+31))] ; if( GAIN_AMP > GAIN_THR ) ; y(n) = (GAIN_THR/GAIN_AMP) * x(n) ; else ; y(n) = x(n) But overflow STILL occured in goertzel by using this gain control.For example,i need to calculate 205 points DFT.using the equation: vk(n) = 2*coef*vk(n-1) - vk(n-2) + x(n) In assemble code,first calculate (1/2)vk(n)=coef*vk(n-1)-(1/2)vk(n-2)+(1/2)x(n) to avoid 2coef overflow, then multiplied by 2 to get vk(n). In my code, the overflow occured in the 80th loop, while (1/2)vk(n) < -0.5, if multiplied by 2, vk(n)<-1, it is OVERFLOW! I use the same code to detect DTMF signal, no overflow occured, and DTMF signal can be detected. So I want to know how can I avoid overflow in CPT detection. If each of you have any experince or idea, I will appreciate to propose me. Tian This message was sent using the Comp.DSP web interface on www.DSPRelated.com
Goertzel algorithm:Overflow occured in Call Progress Detection!
Started by ●July 13, 2005
Reply by ●July 13, 20052005-07-13
"tian" <fengtian1116@163.com> wrote in message news:65WdnYkzrZ3kY0nfRVn-3g@giganews.com...> Dear friends > I need to implement a call progress tone detector using goertzel > algorithm. To avoid strong signal inputs to the Goertzel filters, > additional gain control is used to prevent early overflow: >> But overflow STILL occured in goertzel by using this gain control.For > example,i need to calculate 205 points DFT.using the equation: > vk(n) = 2*coef*vk(n-1) - vk(n-2) + x(n) > In assemble code,first calculate > (1/2)vk(n)=coef*vk(n-1)-(1/2)vk(n-2)+(1/2)x(n) to avoid 2coef overflow, > then multiplied by 2 to get vk(n). > In my code, the overflow occured in the 80th loop, while (1/2)vk(n) < > -0.5, if multiplied by 2, vk(n)<-1, it is OVERFLOW! > I use the same code to detect DTMF signal, no overflow occured, and > DTMF signal can be detected. So I want to know how can I avoid overflow in > CPT detection. > If each of you have any experince or idea, I will appreciate to > propose me. > > > > Tian >Hello Tian, The gain of a Goertzel is 2/N where N is the number of samples. I used to scale down the input by this factor before the Goertzel loop. Clay