我试图使用可用于PIC32MZ2064DAB176的FFT库导出音频信号的频率。
我正在使用MPLAB Harmony进行配置。
为了进行测试,使用了两个频率为1002 Hz和750 Hz的正弦波。这是借助在线音调生成器工具完成的。我在一个浏览器窗口上有1002 Hz,在另一个浏览器窗口上有750 Hz。直流偏置后,音频O / P插孔的输出被馈送到微控制器ADC。
在执行1.6 V的DC偏置后,信号被发送到12位ADC。我期望的最大电压是3 V PP,因此我猜想DC偏置为1.6 V就足够了。
信号以48 kHz采样,因为我将需要读取高达20 kHz的频率。
FFT是1024点FFT。
我能够在频率档的第0个索引中获得DC值。
用于从仓中获取频率值的公式为:频率=索引*采样频率/ FFT点数
但是,对于任何输入频率值,我总是在第一和第二频率仓中得到很高的幅值。根据我的理解,对于1002 Hz,振幅应在频率仓的第21个索引附近较高,而对于750 Hz信号,该振幅应在第16个索引附近较高。
我附上我的代码,ADC Harmony配置屏幕截图,结果屏幕截图和信号输入屏幕截图。
在代码中,用于频点的阵列是“ singleSidedFFT”
我们非常感谢您提供正确的频率值的任何帮助。
/* FFT */
#define N 1024// Also change the log2N variable below!!
#define SAMPLE_FREQ 48000
#define PI 3.14
// Section: Global Data Definitions
APP_DATA appData;
/* ADC */
long count = 0;
/* FFT */
int16c fftCoefs[N];
int16c *fftc;
int log2N = 10;
extern const int16c twiddleFactors[];
long int freqVector[N]; …Run Code Online (Sandbox Code Playgroud)