Forum: Digitale Signalverarbeitung / DSP / Machine Learning FIR filter mit ARM7 zur Tonerkennung


von Philipp A. (st0ne)


Lesenswert?

hi leute,

vielleicht könnt ihr mir weiterhelfen :-)

ich möchte mit meinem Atmel ARM7 (AT91SAM7S64) einen FIR filter zur 
erkennung von Tönen realisieren.

Im speziellen gehts mir darum einen Ton mit 1750Hz zu erkennen.
Soweit so gut.

Hardware, C-Code für den FIR filter, ist soweit verständlich.

allerdings die mathematik dahinter und die einbindung kapier ich nicht 
so ganz, darum weiß ich auch nicht so recht was nach so einem FIR filter 
für werte rauskommen.

ich hab jetzt mal mit einem Programm einen C code für einen Bandpass mit 
200Taps (geht das mit dem ARM7 noch? hab da keinen bezug dazu was ich da 
an rechenleistung benötige...) berechnet. Sieht in der Theorie soweit 
gut aus.
Muss ich da jetzt nach jedem mal samplen des AD-Wandlers die 
filterfunktion aufrufen und den einen gesampelten wert reinschieben? 
oder wie genau funktioniert das dann...?

am ausgang des filters würde ich wahrscheinlich die werte rausbekommen 
welche ich auch rausbekommen würde wenn das filter analog aufgebaut 
wäre... nur wie hilft mir das in der tonerkennung? ich muss ja dann 
sozusagen festellen das hier ein sinus dann anliegt... sollte dann auch 
noch funktionieren wenn störungen im signal sind und der ton relativ 
leise ist, darum ein sehr schmaler bandpass...

vielleicht kann mir wer weiterhelfen! :-)

danke
st0ne

achja: FFT ist mir zu grob, da ich andere frequenzen auch noch erkennen 
möchte...

von Alex (Gast)


Lesenswert?

Was willst du nun, den Ton oder "andere Frequenzen"?

Prinzipiell würde ich FIR-Filter wenn es Performance-kritisch ist eher 
auf nem DSP mit einer MAC einsetzen als auf einem ARM7. Hier wäre eher 
ein IIR mit dem ihm eigenen Nachteilen angebracht.

von Philipp A. (st0ne)


Lesenswert?

vorerst mal einen ton, eventuell dann auch 2 verschiedene töne 
erkennen...

DSP hab ich zu wenig erfahrung damit...
ist ja auch nicht zeitkritisch, also muss nicht echtzeit sein, wenn er 
200ms braucht dafür ist das auch ok, falls ers in der zeit überhaupt 
schafft... ;-)

von Name goes here (Gast)


Lesenswert?

Guckst du z.B. hier pdfserv.maxim-ic.com/en/an/AN3386.pdf oder suchst du 
nach Goertzel.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

http://www.embedded.com/9900722?_requestid=574731
The Goertzel Algorithm
eine Art Kochrezept, es gibt aber auch C-code dazu

von Alex (Gast)


Lesenswert?

Oder halt einen Notch-Filter verwenden ... halt nur invers.

von Philipp A. (st0ne)


Lesenswert?

danke für die tollen links!

der goertzel algorythmus wird mir da sicher weiterhelfen, da ich sowieso 
vor hatte dtmf auch noch zu dekodieren, werde das morgen gleich mal 
testen!

sourcecode werde ich dann nach erfolgreicher funktion natürlich posten, 
dann haben andere auch was davon :-)

gruß st0ne

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.