我正致力于在手机上获取音频数据的频率。我正在使用Jtransforms对样本数据进行FFT以获得结果。但我不确定如何设置样本数据数组大小。
硬件采样率为44100.我的理解是我只能得到低于44100/2的频率
如果我想得到频率范围为0~44100 / 2的全范围,我应该如何在下面的代码中设置FFT_Size,bufferSize。
当我从realForward获得结果时。如何将结果解释为特定范围内的频率幅度(例如5khz)?
recorder.read(audioData,0,bufferSize);
DoubleFFT_1D fft = new DoubleFFT_1D(FFT_Size);
fft.realForward(audioData);
非常感谢你的时间。
答案 0 :(得分:2)
给定特定的采样率R,FFT的结果可以被认为是在-R / 2到R / 2Hz范围内的不同频带中存在的能量的直方图。因此,对于44100 Hz采样率,您的频率直方图范围为-22050 Hz至22050 Hz。输入到FFT的样本数是输出的二进制数。因此,如果您输入1024个样本,则您将在-22050 Hz和22050 Hz之间拥有1024个直方图箱,或每箱2 44100/1024(约430)Hz。如果你想要5000 Hz的分辨率,你真的只需要9个样本。
从(实数,虚数)复数格式转换为(频率,幅度)与从矩形(复数)到极坐标(freq / mag)的转换相同。