Diskrete Fourier-Transformation - schnell das Fundament finden?

9

Erstens entschuldige ich mich, weil ich ein Softwareentwickler bin und es sehr lange her ist, dass ich mich nicht mit reiner Mathematik befasst habe, daher scheint meine Frage dumm zu sein. Ich hoffe nicht.

Der Kontext ist die Tonhöhenerkennung in der Musik.

Wenn Sie eine Musiknote nehmen und eine Fourier-Transformation darauf anwenden, haben Sie eine unendliche Summe von Amplituden für bestimmte Frequenzen. Zum Beispiel, wenn ich eine Note spielen , dessen Grund ist , auf jedem Instrument, nach dem Fourier - Transformation, werde I Harmonischen bei zumin hat F , 2 F , 3 - F , ... , n F . Jede Frequenz hat eine bestimmte Amplitude, die das Timbre des Instruments definiert (Klavier, Stimme, Trompete, ... alle folgen diesem Gesetz, aber Sie haben unterschiedliche Amplituden für jede Harmonische).FF,2F,3F,,nF

Nun möchte ich anhand eines bestimmten Audiosignals finden . Nur das. Es ist komplizierter als es scheint, weil Sie immer Hintergrundgeräusche haben und so weiter ... Außerdem ist F nicht unbedingt die Frequenz mit der höchsten Amplitude!FF

Meine Idee, besteht darin, eine DFT (eigentlich eine FFT für die Geschwindigkeit) anzuwenden und eine Frequenz F zu finden , so dass F + 2 F + 3 F + + n F in der FFT-Ausgabe maximal ist.FFF+2F+3F++nF

Glaubst du, dass das überhaupt möglich ist? Denken Sie, dass dies in sehr kurzer Zeit möglich ist (sagen wir <5 Millisekunden)?

Dinaiz
quelle
Wahrscheinlich könnte dies eine Antwort sein: edaboard.com/thread197897.html
Ja, aber das ist eine andere Methode, nicht wahr? IMHO, es ist einfacher, aber viel weniger zuverlässig, weil es nicht zwischen harmonischen und unharmonischen Klängen unterscheiden kann ...
Dinaiz
relevante dsp.stackexchange.com/a/2524/29
Endolith

Antworten:

6

Was Sie beschreiben, ist der Harmonic Product Spectrum-Methode zur Tonhöhenschätzung, wie sie in diesem Stanford CCRMA-Artikel aufgeführt ist, sehr ähnlich .

Eine FFT gibt Ihnen keine "unendliche Summe von Amplituden", sondern eine endliche Anzahl von Ergebnisfächern, abhängig von der Länge der FFT.

5 mS ist nur eine Periode einer 200-Hz-Note und nur ein Bruchteil einer Periode unter 200 Hz. Die musikalische Tonhöhenerkennung erfordert normalerweise das Hören oder Analysieren mehrerer Perioden der Periodizität eines Tonhöhenklangs. Und viel Musik verwendet Noten unter G2. Wenn Sie über eine ausreichende Datenlänge verfügen, dauert die Berechnung einer Tonhöhenschätzung aus diesen Daten auf einem modernen PC oder Mobilgerät möglicherweise nur in der Größenordnung von Mikrosekunden und nicht in Millisekunden.

hotpaw2
quelle
Guter Punkt. Wenn Sie jedoch bereits 2F und 3F haben, brauchen Sie F nicht wirklich, oder? In Ihrem Beispiel ist 2F = 400 Hz und 3F = 600 Hz, sodass Sie wahrscheinlich feststellen können, dass F 200 war, auch ohne genug Ton zu hören, um eine Periode von 5 ms zu haben, nicht wahr? Ich habe auch von Wavelet-Transformation gehört. Denken Sie, dass dies eine bessere Methode ist?
Dinaiz
@Dinaiz: Hängt von der Quelle des Tones ab und davon, ob diese Fragmente von Obertonfrequenzen tatsächlich stationär sind oder nicht. Wavelets sind eine völlig separate Frage.
hotpaw2
Diese Methode ist also nicht geeignet, um f0 in "fast Echtzeit" zu finden. Ist es nach dem gegenwärtigen Stand der Technik überhaupt möglich, f0 in weniger als ein paar Millisekunden mit einem Instrument zu finden, oder ist es eine verlorene Sache und ich sollte meine Suche aufgeben? : D
Dinaiz