|
@站长 您好,
想向您请教下STM32 音频的FFT相关知识。 我想将采集到的原始音频数据(16bit)转换成频率形式 根据不同的音乐频率处理不同的事情,我现在的做法如下:
1.初始化FFT- arm_cfft_radix4_instance_f32 scfft;
- [backcolor=#ffffff][color=#008ef1]arm_cfft_radix4_init_f32(&scfft,FFT_LENGTH,0,1);[/color][/backcolor]
复制代码 2. FFT计算- #define FFT_LENGTH 64 //1024 //FFT长度,默认是1024点FFT
- float fft_inputbuf[FFT_LENGTH*2]; //FFT输入数组
- float fft_outputbuf[FFT_LENGTH]; //FFT输出数组
- /* 将原始音频数据转换成浮点型 */
- for(i=0;i<FFT_LENGTH;i++) { //生成信号序列
- fft_inputbuf[2*i] = (float32_t)i2srecbuf1[i]; //生成输入信号实部
- [backcolor=#ffffff] [/backcolor][backcolor=#f7f7f7]fft_inputbuf[2*i+1]=0; //虚部全部为0[/backcolor]
- }
- arm_cfft_radix4_f32(&scfft, fft_inputbuf); //FFT计算(基4)
- arm_cmplx_mag_f32(fft_inputbuf, fft_outputbuf, FFT_LENGTH); //把运算结果复数求模得幅值
- for(i=0; i<FFT_LENGTH; i++) {
- printf("fft_outputbuf[%d]:%f\r\n",i,fft_outputbuf[i]);
- [backcolor=#f7f7f7]}[/backcolor]
复制代码 其中,音频采样频率为48KHz,DMA接收的音频数据为64个,频率分辨率为48000/64=750;
我想请教下:
1、arm_cmplx_mag_f32(fft_inputbuf, fft_outputbuf, FFT_LENGTH)中fft_outputbuf求得的模值可以与音频频率有什么关系?
2、我的录音数据是按照你那边来的,验证过了,没有问题,但是发现,audio codec插入耳机和没有插入耳机的fft_outputbuf差别不是很大,
3、怎么才能根据fft_outputbuf分析出音乐播放时产生的不同频率呢?
下面上传下我的fft_outputbuf的平均值:
64个fftout平均值.txt
(5 KB, 下载次数: 77)
希望能帮我分析下,感谢!!!
|
|