Czy istnieje algorytm znajdowania częstotliwości bez DFT lub FFT?


34

Szukałem tunera gitarowego w sklepie z aplikacjami na Androida. Znalazłem aplikację tunera, która twierdziła, że ​​jest szybsza niż inne aplikacje. Twierdził, że może znaleźć częstotliwość bez użycia DFT (szkoda, że ​​nadal nie mam adresu URL do tej specyfikacji).

Nigdy o tym nie słyszałem. Czy można uzyskać sygnał audio i obliczyć częstotliwość bez użycia algorytmu DFT lub FFT?

Odpowiedzi:


29

FFT is actually not a great way of making a tuner. FFT has inherently a finite frequency resolution and it's not easy to detect very small frequency changes without making the time window extremely long which makes it unwieldy and sluggish.

Lepsze rozwiązania mogą być oparte na pętli fazowej , pętle opóźniające zablokowana , auto korelacji, wykrywanie i śledzenie przejścia przez zero, max lub min wykrywania i śledzenia i na pewno inteligentne połączenie tych metod.

Wstępne przetwarzanie zawsze pomaga.


5
Whether an FFT can detect small frequency changes is not inherent in its length, but depends on the signal-to-noise ratio. Given sufficiently low noise and interference, interpolation of FFT results can easily produce sub-bin single frequency resolution.
hotpaw2

can anybody help me out with this : - stackoverflow.com/questions/42359344/…
dreamBegin

12

An FFT reports spectrum frequency peak or peaks (quantized by FFT bin size), which is different from musical pitch. It's possible for the perceived pitch frequency to be completely missing from an FFT spectrum.

Some of the simplest guitar tuners just used low-pass or band-pass filtering and measured the time between zero-crossings. The reciprocal gives a frequency estimate.

Autocorrelation is another common pitch estimation method; and sliding correlation or other self-similarity measures have lots of variations, such as sliding ASDF (squared difference), AMDF (mean difference), non-linear pattern matchers, adaptive checking only for a limited range of lags, lag interpolation, windowing and adaptive window selection, various weightings or using decision theory to select among multiple potential lag history sequences, and etc. One problem with most self-similarity measures is choosing the appropriate octave, as a sub-octave may show nearly the same similarity.

Other possibilities include using PLLs, filtered quadrature demodulators, filtered Hilbert transforms, and etc.

But note that some DSP filtering and demodulation methods are computationally nearly equivalent to doing 1-bin of a windowed DFT, which may or may not fit as an answer to your question.


8

Pitch detection can be done in many versatile and curious ways. One way to do it is by using autocorrelation. This paper gives an example of how it can be used. Autocorrelation can be made ridiculously simple by using a 1-bit correlator (couldn't find any decent papers on that for some reason). So theoretically, pitch can be detected faster than with FFT, but I doubt that it will be much more precise without really clever pre-processing.


I think the link is broken?...
Spacey

No, all works. I just checked it.
Phonon

7

Also take a look at the relatively new algorithmically defined Hilbert-Huang Transform (HHT). It can handle non-stationary-non-linear signals which may be relevant for your application.


This was quite a gem when I found it, although it does not give you the fourier decomposition, but rather, the instantaneous frequency decomposition.
Spacey

Most real-life signals are somewhat non-stationary, that is they vary slightly in amplitude and frequency. The HHT is less sensitive to these variations and thereby decompose such signals in a more natural way, where the parts are more closely related to the underlying physical phenomena.
Nordlöw



2

You can actually compute the frequency of a signal using its pseudo-spectrum, which looks at the eigenvectors of its autocorrelation matrix. It basically decomposes your signal into noise and signal subspaces. From there, you can find its spectrum. (You can also limit it and give it a range of frequencies to check). It is also pretty noise immune. Of course, this is a parametric method, not an unparametric one like DFT.


Apparently this uses the FFT though? mathworks.com/help/toolbox/signal/ref/peig.html
endolith

1
@endolith You can compute it without any FFTs involved. From the correlation matrix, you get the eigenvectors, and then the noise subspace. Then you can construct your own frequency vector to project against, so no FFTs used.
Spacey

1

It all depends with what platform you want to process it, if you need a simple circuit, i suggest blasting out the signal with gain and turn it into a square wave and measure the period with a microcontroller using the timer.

But if you want to go fancy with signal processing, check out MUSIC method:

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

Hope it helps


0

There exist a lot of pitch estimation methods without using DFT/FFT, some of them including the MUSIC method are listed in this paper: https://ieeexplore.ieee.org/abstract/document/6521410/ The simulation results in this paper indicate that when the fundamental frequency is very low, the exact NLS method outperforms others among the listed.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.