1750 Hz Ton Auswertung mit TMS320VC5505

Gast #2226239
Lesenswert?

Hi,

ich würde gerne mit meinem TMS320VC5505 einen 1750 Hz Ton auswerten.

Momentan habe ich mit dem DSP eine Audio Verzögerung von 200 ms + 
Hochpassfilter (600 Hz, 4. Ordnung)  realisiert und zusätzlich sollte 
ein GPIO Pin geschaltet werden, wenn sich im Audio Signal ein 1750 Hz 
Ton befindet.

Wie kann ich das am besten anstellen?

Bin für jeden Tipp dankbar.

Grüße
Stephan
Gast #2226272
Lesenswert?

Könnte man evtl. auch durch extreme Unterabtastung das Signal in das 
Basisband verschieben und dann "nur" die sehr langsame Spiegelfrequenz 
detektieren.
Im Extremfall wäre die ja grad bei f=0Hz (Gleichanteil).
(Firma: Raich Gerätebau & Entwicklung) #2229448
Lesenswert?

Ich hab so was für ein Rundsteuersignal-Messgerät gemacht. Die Frequenz 
war 121Hz bei wenigen Volt Amplitude aufmoduliert auf 230V 50Hz. Ging 
mit 2 hintereinandergeschalteten IIR Bandpassfiltern 2. Ordnung sehr gut 
und einfach. Eine gewisse Verzögerung fürs Einschwingen des Filters 
ergab sich allerdings auch daraus. Dieses Problem tritt aber auch bei 
einer FFT auf, weil du ja erst mal auf alle 2^n Abtastwerte warten 
musst, bis du mal anfangen kannst zu rechnen.

Grüsse
#2229463
Lesenswert?

Von Analog Devices gibt es eine ausführliche Application note zur 
Touchtone-Decodierung mittels Goertzel, auf deren Festkomma-DSP ADSP2100

auf die Schnelle habe ich nur ein ZIP-File MODTMF.ZIP gefunden:
http://www.analog.com/en/processors-dsp/adsp-21xx/content/21xx_applications_handbook_file_area/fca.html
"for the development of a multi-channel DTMF decoder using the ADSP-2100 
Family DSP"
Gast #2230768
Lesenswert?

>>>>>>>>>>>>>>>
Eine gewisse Verzögerung fürs Einschwingen des Filters
ergab sich allerdings auch daraus. Dieses Problem tritt aber auch bei
einer FFT auf, weil du ja erst mal auf alle 2^n Abtastwerte warten
musst, bis du mal anfangen kannst zu rechnen.
<<<<<<<<<<

Das ist immer so, ob bei IIR oder Goertzel oder FFT: Je schmalbandiger, 
umso länger das Einschwingen des Filters/Detektors.

Cheers
Detlef
Gast #2230791
Lesenswert?

Hier noch nen Goertzel in K&R C:

Der macht Goertzel auf der Frequenz 9/64 (wenn die Abtastfrequenz 1 
ist). Der Algorithmus nimmt 64 Abtastwerte, liefert also den gleichen 
Wert wie eine FFT der Länge 64 am 9. bin. Die Rechnung ist im relevanten 
Teil rein integer, die Umrechnung zum Schluss braucht allerdings float 
(aber ohne Sinus/cosinus Berechnung, das sind Konstanten). Der 
Algorithmus ist auch relativ einfach auf andere Frequenzen umrüstbar, 
siehe die Kommentare. Die Funktion 'winkel' ist 'atan2', also die 
Umrechnung von Imaginärteil/Realteil in den Winkel.

Nicht ganz schön und elegant, z.B. das Umkopieren der q0/q1 und die 
Rechnung am Schluß, aber geht.

/* ************************************************** */
uint16_t goertzel_9_64(int16_t r[],int32_t re[],int32_t im[])
/* ************************************************** */
{
// macht goertzel auf der Frequenz 9/64
// 2*cos(9/64*2*pi) = 1.26878
// 2202/8192= 0.26879
int32_t q0,q1,q2;
int16_t k;
q1=0l;
q2=0l;
for(k=0;k<64;k++){
 q0=q1+((q1*2202)>>13)-q2+r[k];
 q2=q1;
 q1=q0;
}

 q0=q1+((q1*2202)>>13)-q2;
 q2=q1;
 q1=q0;
 im[0]=(int32_t)(q2   *sin(2*M_PI*9/64.0));
 re[0]=(int32_t)(q1-q2*cos(2*M_PI*9/64.0));
return (winkel(im[0],re[0]));
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren