ygcldrz 发表于 2017-7-18 17:50:08

STM32 音乐频谱分析

@站长 您好,
    想向您请教下STM32 音频的FFT相关知识。 我想将采集到的原始音频数据(16bit)转换成频率形式 根据不同的音乐频率处理不同的事情,我现在的做法如下:
   
1.初始化FFT
arm_cfft_radix4_instance_f32 scfft;
arm_cfft_radix4_init_f32(&scfft,FFT_LENGTH,0,1);2. FFT计算#define FFT_LENGTH      64 //1024      //FFT长度,默认是1024点FFT
float fft_inputbuf;   //FFT输入数组
float fft_outputbuf;    //FFT输出数组


/* 将原始音频数据转换成浮点型 */
                for(i=0;i<FFT_LENGTH;i++) { //生成信号序列
   fft_inputbuf = (float32_t)i2srecbuf1;   //生成输入信号实部
   fft_inputbuf=0;                              //虚部全部为0
                }
                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);
}
其中,音频采样频率为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的平均值:




希望能帮我分析下,感谢!!!

ygcldrz 发表于 2017-7-18 17:51:30

11行后面的代码完整的如下
                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);
                  avr += fft_outputbuf;
                }
                avr /= FFT_LENGTH;
                printf("fft average:%f\\r\\n", avr);

eric2013 发表于 2017-7-19 01:32:42

如果你要是显示频谱的话,搞个64点可以的,如果是音频分析的话,不行,分辨率太低,搞个2048点好点。

这个采样点数分析音频频率很方便的。

ygcldrz 发表于 2017-7-19 17:00:11

arm_cfft_radix4_init_f32(&scfft,FFT_LENGTH,0,1);认有5种不同的设置,分别是(16/64/256/1024/4096) 我现在选的是1024 ; 但是现在是没有外部音乐输入的情况下FFT变换求模的结果跟输入音乐后FFT变换后的结果 没有明显差异 。

ygcldrz 发表于 2017-7-19 17:00:51

回 eric2013 的帖子

eric2013:如果你要是显示频谱的话,搞个64点可以的,如果是音频分析的话,不行,分辨率太低,搞个2048点好点。

这个采样点数分析音频频率很方便的。 (2017-07-19 01:32) images/back.gif

arm_cfft_radix4_init_f32(&scfft,FFT_LENGTH,0,1);认有5种不同的设置,分别是(16/64/256/1024/4096) 我现在选的是1024 ; 但是现在是没有外部音乐输入的情况下FFT变换求模的结果跟输入音乐后FFT变换后的结果 没有明显差异 。

eric2013 发表于 2017-7-20 10:31:48

回 ygcldrz 的帖子

ygcldrz:arm_cfft_radix4_init_f32(&scfft,FFT_LENGTH,0,1);认有5种不同的设置,分别是(16/64/256/1024/4096) 我现在选的是1024 ; 但是现在是没有外部音乐输入的情况下FFT变换求模的结果跟输入音乐后FFT变换后的结果 没有明显差异 。 (2017-07-19 17:00) images/back.gif

想办法动态显示下频谱,方便观察。
页: [1]
查看完整版本: STM32 音乐频谱分析