finding the dominant frequency in a signal

Finding the dominant frequency is usually performed with a (fast-) fourier transformation (fft). An other method (not by far as accurate as fft) is zero crossing.

A third way can be: a binary search combined with band-pass filtering.

binary search combined with band-pass filtering

In this way, one splits the search-band (starting with 0...sample_rate/2 Hz) into two parts. The lower part is obtained by doing a band-pass filtering, same thing for the upper part.
Then, the standard deviation of the lower part and the upper part are compared.
If the lower part has a higher deviation, then the process is performed again for the lower part, else for the upper part.
This process is repeated no more than log2(sample_rate / 2) times.

sample implementation

download link: zc-test.py

graphs

calculating a spectral plot

This script: zc-test-specgen.py finds all frequencies in a signal.

changelog

2019/3/01: added noise to the signal

2019/3/14: added link to spectral plot generator





feedback