Sie sollten Wissen über Frequenzen und Quantisierung mitbringen.
Die Funktionsweise der Algorithmen ist unwichtig, das Ergebnis
zählt ;)
Man nimmt per Mikrophon ein Signal auf und speichert es.
Da hat man einen Amplitudenverlauf. Wie könnte man
nun prüfen, ob eine bestimmte Frequenz im Signal enthalten ist?
Jean Baptiste Joseph Fourier, franz. Mathematiker, hat den Grundstein gelegt.
Seine Fourier Transformation kann dazu verwendet werden, ein Signal
aus der Zeit- in die Frequenzdomäne (reversibel) zu transferieren.
Hat man also eine Sinuskurve, kann deren Amplitude mit der FT bestimmt werden.
Die FT gibt ein Frequenzspektrum zurück, überprüft also in einem Durchgang
so viele Frequenzen (eigentlich Frequenzbänder), wie es Daten bekommen hat.
Mehr zur Fourier Transformation z.B. hier
Die Fourier Transformation selber ist ein sehr rechenintensiver Algorithmus,
wir wollen aber eine schnelle Methode, 1 Frequenz im Signal zu bestimmen.
Der Goertzel Algorithmus basiert auf der FT, berechnet aber nur 1 Frequenz,
also genau, was wir wollen.
Ich habe folgenden aus C nach VB übersetzt: Music DSP Goertzel
Ein DTMF (Dual Tone Multi-Freqeuncy) Signal besteht aus 2 Frequenzen, die
zusammen eine Taste auf einem Telefon repräsentieren. Mit Hilfe des Goertzel
können wir schnell alle möglicherweise vorkommenden Frequenzen untersuchen
und aus den 2 mit der größten Amplitude die gedrückte Taste ermitteln.
Das downloadbare Beispiel erzeugt solch ein Signal, und kann zusätzlich noch
Rauschen generieren, um die Genauigkeit des Algorithmus zu testen.
Download: DTMF Tonerkennung