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?
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.
źródło
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.
źródło
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.
źródło
If you know exactly which frequency bin you are looking for in a DFT/FFT then you can use the Goertzel algorithm to get the value of that bin only.
http://en.wikipedia.org/wiki/Goertzel_algorithm
źródło
I have got a guitar a month ago and started writing a PLL-based tuner.
One of the resources I used to understand PLL was "Understanding Phase-Locked Loops" page by Paul Lutus.
źródło
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.
źródło
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
źródło
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.
źródło