lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]




Am 12.01.2017 um 22:53 schrieb Fernando Jefferson:

I'm developing a Lua application and I need to identify frequencies in an audio recording (Wav format).

By theory, it would be enough to apply a Fast Fourier Transform in the sample sequence and extract the real part.

I got a package of FFT for Lua:
Https://rosettacode.org/wiki/Fast_Fourier_transform#Lua

My first test was with a very simple audio (1 second of 440Hz tone, sample rate 16KHz). The output of the routine would be an array with only the value 440 on all elements ... But it is not working.

I would appreciate any help. I can send the test audio and the Lua routine which reads the wav file and tries to apply the FFT.

Fernando Jefferson
HI Fernando,

do you have to test for a single (or a few) known frequency?
In that case, the Goertzel algorithm may be your friend. It is a DFT (not fast one) for a single frequency, which is faster for a single frequency tha FFT
If you have to find the loudest tone; FFT is the first step. Then find the highest amplitude; for this don't rely on the real part, it may be zero with the imaginary part carrying all the power of the signal.

Real and imaginary part can be converted to amplitude and phase angle. Phase is irrelevant in terms of power, amplitude is relevant. If you want to be exact, you need to computer the sum of the squares of real and imaginary part, and find the position of the largest result.

Which frequency this is depends on the number of samples that you computed the FFT of. With 1024 samples, you get a frequency resolution of 16kHz/512.

--
Oliver