你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F103使用官方库FFT进行音乐频谱分析的疑问

[复制链接]
stm1708 提问时间:2020-5-9 14:52 /
请大家帮忙看看这个在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[i] = lBufMagArray[i]/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;       

真的看不懂,不知道频谱为什么要这么计算,请好心人解答!
       


收藏 评论4 发布时间:2020-5-9 14:52

举报

4个回答
stm1708 回答时间:2020-5-10 19:53:38
顶一下啊
stm1708 回答时间:2020-5-12 14:00:05
顶顶顶顶顶顶
butterflyspring 回答时间:2020-6-2 16:16:24
帮顶一下,有谁懂得 FFT在音频上的这种应用还请指点一下
jz21zfr 回答时间:2020-6-2 23:11:46
    这不是分组,只是在512个频点中取了9个点来作显示而已。至于对模值再次运算,是为了增强显示的观赏效果。因为低频的幅值大,高频的幅值小,所以放大的倍率不一样。
    35714.286Hz的采样频率,1024个采样点,经过FFT变换可以得到0~17857.143Hz的512个频点的幅值,ADC_BUF[0]是表示直流分量,其中ADC_BUF[1]是34.8Hz的值,以此类推,ADC_BUF[511]就是17857.143Hz的值,间隔(分辨率)就是34.8Hz。ADC_BUF[512]~ADC_BUF[1023]和前面是镜像关系,就是ADC_BUF[512]=ADC_BUF[511],...ADC_BUF[1023]=ADC_BUF[0]。我用stm32f103c8t6做的音乐频谱仪作1024的FFT运算速度是达不到的,只能进行256或64的FFT运算。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版