Gibt es einen Algorithmus zum Finden einer Frequenz ohne DFT oder FFT?


34

Ich habe im Android App Store nach einem Gitarrentuner gesucht. Ich habe eine Tuner-App gefunden, die behauptet, sie sei schneller als andere Apps. Es behauptete, es könnte die Frequenz ohne Verwendung der DFT finden (ich wünschte, ich hätte noch die URL zu dieser Spezifikation).

Ich habe noch nie davon gehört. Können Sie ein Audiosignal erfassen und die Frequenz berechnen, ohne den DFT- oder FFT-Algorithmus zu verwenden?

Antworten:


29

FFT ist eigentlich kein guter Weg, um einen Tuner zu machen. FFT hat von Natur aus eine endliche Frequenzauflösung und es ist nicht einfach, sehr kleine Frequenzänderungen zu erkennen, ohne das Zeitfenster extrem lang zu machen, was es unhandlich und träge macht.

Bessere Lösungen können auf Phasenregelkreisen , Verzögerungsregelkreisen , Autokorrelation, Nulldurchgangserkennung und -verfolgung, Maximal- oder Minimaldetektion und -verfolgung und sicherlich einer intelligenten Kombination dieser Methoden basieren .

Vorverarbeitung hilft immer.


5
Ob eine FFT kleine Frequenzänderungen erkennen kann, hängt nicht von ihrer Länge ab, sondern vom Signal-Rausch-Verhältnis. Bei hinreichend geringem Rauschen und Interferenzen kann die Interpolation von FFT-Ergebnissen leicht eine Einzelfrequenzauflösung unter dem Bin erzeugen.
hotpaw2

kann mir jemand dabei helfen: - stackoverflow.com/questions/42359344/…
dreamBegin

12

Eine FFT meldet Frequenzspitzen oder -spitzen (quantisiert nach FFT-Bin-Größe), die sich von der musikalischen Tonhöhe unterscheiden. Es ist möglich, dass die wahrgenommene Tonhöhenfrequenz in einem FFT-Spektrum vollständig fehlt.

Einige der einfachsten Gitarrentuner haben nur Tiefpass- oder Bandpassfilter verwendet und die Zeit zwischen Nulldurchgängen gemessen. Der Kehrwert gibt eine Häufigkeitsschätzung an.

Autokorrelation ist eine weitere gängige Methode zur Tonhöhenschätzung. und gleitende Korrelation oder andere Selbstähnlichkeitsmaße weisen viele Variationen auf, wie gleitende ASDF (quadratische Differenz), AMDF (mittlere Differenz), nicht lineare Musteranpassungen, adaptive Prüfung nur für einen begrenzten Bereich von Verzögerungen, Verzögerungsinterpolation, Fensterbildung und Adaptive Fensterauswahl, verschiedene Gewichtungen oder Verwendung der Entscheidungstheorie zur Auswahl mehrerer potenzieller Verzögerungsverlaufssequenzen usw. Ein Problem bei den meisten Selbstähnlichkeitsmaßen ist die Auswahl der geeigneten Oktave, da eine Suboktave möglicherweise nahezu dieselbe Ähnlichkeit aufweist.

Andere Möglichkeiten umfassen die Verwendung von PLLs, gefilterten Quadraturdemodulatoren, gefilterten Hilbert-Transformationen usw.

Beachten Sie jedoch, dass einige DSP-Filter- und -Demodulationsmethoden rechnerisch fast dem Ausführen einer 1-Bin-DFT mit Fenster entsprechen, was möglicherweise als Antwort auf Ihre Frage passt oder nicht.


8

Die Tonhöhenerkennung kann auf vielfältige und kuriose Weise erfolgen. Eine Möglichkeit ist die Verwendung der Autokorrelation . Dieses Papier gibt ein Beispiel, wie es verwendet werden kann. Die Autokorrelation kann durch Verwendung eines 1-Bit-Korrelators auf lächerliche Weise vereinfacht werden (aus irgendeinem Grund konnten keine anständigen Artikel darüber gefunden werden). So theoretisch, Pech kann schneller erkannt werden als mit FFT, aber ich bezweifle , dass es ohne viel präziser sein wird , wirklich klug Vorverarbeitung.


Ich denke, die Verbindung ist unterbrochen? ...
Spacey

Nein, alles funktioniert. Ich habe es gerade überprüft.
Phonon

7

Schauen Sie sich auch die relativ neue algorithmisch definierte Hilbert-Huang-Transformation (HHT) an. Es kann nicht stationäre, nicht lineare Signale verarbeiten, die für Ihre Anwendung relevant sein können.


Dies war ein Juwel, als ich es fand, obwohl es Ihnen nicht die Fourier-Zerlegung, sondern die sofortige Frequenzzerlegung gibt.
Spacey

Die meisten realen Signale sind etwas instationär, dh sie variieren geringfügig in Amplitude und Frequenz. Das HHT reagiert weniger empfindlich auf diese Schwankungen und zersetzt solche Signale auf natürlichere Weise, wobei die Teile enger mit den zugrunde liegenden physikalischen Phänomenen zusammenhängen.
Nordlöw



2

Sie können die Frequenz eines Signals anhand seines Pseudospektrums berechnen, das die Eigenvektoren seiner Autokorrelationsmatrix betrachtet. Im Grunde zerlegt es Ihr Signal in Rausch- und Signalunterräume. Von dort finden Sie sein Spektrum. (Sie können ihn auch begrenzen und ihm einen zu überprüfenden Frequenzbereich zuweisen.) Es ist auch ziemlich geräuschunempfindlich. Dies ist natürlich eine parametrische Methode, keine unparametrische wie die DFT.


Anscheinend nutzt dies aber die FFT? mathworks.com/help/toolbox/signal/ref/peig.html
Endolith

1
@endolith Sie können es berechnen, ohne dass FFTs beteiligt sind. Aus der Korrelationsmatrix erhalten Sie die Eigenvektoren und dann den Rauschunterraum. Dann können Sie Ihren eigenen Frequenzvektor zum Projizieren erstellen, sodass keine FFTs verwendet werden.
Spacey

1

Es hängt alles davon ab, auf welcher Plattform Sie es verarbeiten möchten. Wenn Sie eine einfache Schaltung benötigen, schlage ich vor, das Signal mit Verstärkung auszustrahlen und in eine Rechteckwelle umzuwandeln und die Periode mit einem Mikrocontroller unter Verwendung des Timers zu messen.

Wenn Sie jedoch Lust auf Signalverarbeitung haben, sollten Sie die MUSIC-Methode ausprobieren:

http://en.wikipedia.org/wiki/Multiple_signal_classification

Ich hoffe es hilft


0

Es gibt viele Tonhöhenschätzungsmethoden ohne Verwendung von DFT / FFT. Einige davon, einschließlich der MUSIC-Methode, sind in diesem Artikel aufgeführt: https://ieeexplore.ieee.org/abstract/document/6521410/ Die Simulationsergebnisse in diesem Artikel geben an Wenn die Grundfrequenz sehr niedrig ist, übertrifft die exakte NLS-Methode andere unter den aufgelisteten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.