新手上路
- 积分
- 23
- 金钱
- 23
- 注册时间
- 2020-5-10
- 在线时间
- 3 小时
|
1金钱
请大家帮忙看看这个在STM32F103上使用官方库FFT进行音乐频谱分析的程序
首先用ADC采集的音频数据,频率范围应该在0~20KHz
设置采样周期为:#define Fs 35714.286 //ADC时钟周期 * 252
STM32进行FFT:
//1024点FFT变换
cr4_fft_1024_stm32(lBufOutArray, lBufInArray, NPT);
//计算出对应频率的模 即每个频率对应的幅值
GetPowerMag();
下面这一段应该是将幅值转换成电压
for(i=0; i<573; i++)
{
ADC_BUF = lBufMagArray/4096*3.3;
delay(0x00FFF);
}
下面是分组了,也就是频谱分析,把频率分为几段,想要展示几个频段的电压幅值,做一个类似于常见的频谱律动的。
请问为什么要选下面那几个ADC_BUF,2,3,9等,另外为什么要*d,*d*2,减去一定的数值是为什么?
////////////////////////////////////////////////////////////////////////
//频率:0~80Hz
F[0]=ADC_BUF[2]*d-4;
//频率:81~180Hz
F[1]=ADC_BUF[3]*d-4;
//频率:181~300Hz
F[2]=ADC_BUF[9]*d-3;
//频率:301~500Hz
F[3]=ADC_BUF[11]*d*2-6;
//频率:501~1000Hz
F[4]=ADC_BUF[14]*d*2-7;
//频率:1001~1800Hz
F[5]=ADC_BUF[30]*d*3-7;
//频率:1801~3000Hz
F[6]=ADC_BUF[90]*d*4-7;
//频率:3001~6000Hz
F[7]=ADC_BUF[150]*d*4-6;
//频率:6001~12000Hz
F[8]=ADC_BUF[170]*d*4-8;
//频率:12001~20000Hz
F[9]=ADC_BUF[270]*d*4-5;
真的看不懂,不知道频谱为什么要这么计算,请好心人解答!
|
|