STM32F4 FFT 音乐频谱 不要太easy!_音乐频谱灯stm32 fft(1)

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

如果你需要这些资料,可以戳这里获取

本系统在计算基-4浮点傅里叶变换运算时就是利用这个函数,通过指针pSrc传入采集到的输入信号数据(实部和虚部形式)。这里要特别注意,输入信号应以复数的形式传入,实部放在奇数位,虚部放在偶数位。进行4096点FFT运算,则pSrc指向4096个复数,实际应用中,系统通过A/D采样,这样偶数位全部为0,奇数位为A/D转换器采集到的电压值。同时FFT变换后的数据也存放在pSrc里面,pSrc必须不小于fftLen的长度。另外,S结构体指针参数是由先该函数设置好,然后传入该函数的。

3、第三个函数是

void arm_cmplx_mag_f32(float32_t * pSrc,float32_t * pDst,uint32_t numSamples)

系统通过这个函数来计算复数模值,可以对第二个函数* pSrc指向的输出结果进行傅里叶变换进行取模操作。pSrc指向第二个函数傅里叶变换的结果,为复数输入数组指针;pDst为输出数组指针,存储取模后的值;numSamples是进行取模的点数,系统进行4096点的傅里叶变换,在此配置为4096即可。

为了验证算的可靠性,我们可以通过模拟生成输入序列的方式进行验证。

for(i=0;i<Length;i++)
{
   Inputbuf[2*i]=1+
  1*arm_sin_f32(2*PI*10*i/Fs)+
  3*arm_sin_f32(2*PI*40*i/Fs)+
  5*arm_sin_f32(2*PI*80*i/Fs);
  Inputbuf[2*i+1]=0;
}
  arm_cfft_radix4_init_f32(&Base4fft,Length,0,1);
  arm_cfft_radix4_f32(&Base4fft,Inputdata);
  arm_cmplx_mag_f32(Inputdata,Outputdata,Length);

上段代码就是模拟生成一个序列。原始信号由三个正弦信号和一个直流信号叠加而成,频率分别是10Hz、40Hz和80Hz,峰值分别为1、3、5,直流分量为1。 通过测试,可以发现,系统计算4096点的傅里叶变换需要的时间仅仅只要2.71ms,可见其速度是非常快。在傅里叶变换的输出中,我们可以发现只有在Outputbuf[0]、Outputbuf[1]、Outputbuf[4]、Outputbuf[8]处傅里叶变换的结果分别为4096、2048、6144、10240;Outputbuf[4088]、Outputbuf[4092]、Outputbuf[4095]处的值分别为10240、6144、2048。下面来分析这些结果。

模拟的采样频率为40960Hz,采样的点数为4096,由数字信号处理知识可知,分辨率为10Hz,也即傅里叶变换计算后的频谱之间的间隔是10Hz。而Inputdata[2*i]=1+1*arm_sin_f32(2*PI*10*i/Fs)+3*arm_sin_f32(2*PI**40*i/Fs)+5*arm_sin_f32(2*PI*80*i/Fs)。可知待测信号由三个正弦信号和一个直流信号叠加而成,频率分别是10Hz、40Hz和80Hz,峰值分别为1、3、5,直流分量为1。

因为A/D采样后的时序信号为实信号,根据DFT的对称性可知,其傅里叶变换的结果具有共轭反对称性。Outputbuf[1]和Outputbuf[4095],Outputbuf[4]和Outputbuf[4092],Outputbuf[8]和Outputbuf[4088]幅值应该相同,实际情况再次和理论值完全相同。

根据DFT变换后的性质可知:Outputbuf[0]=4096,其傅里叶变换变换后的模值刚好是原始信号的4096倍,所以值为4096.0;而在其它频率点处,模值应该是幅值的4096/2=2048倍,输出的结果刚好为Outputbuf[1]=4096、Outputbuf[4]=2048、Outputbuf[8]=6144与理论值完全相同,可见傅里叶变换运算的精度极高,运算速度极快。

下面我们用Matlab验证算法的正确性:

Matlab 程序:

close all; %Turn off all the pictures 
clc;      
DC=1;   %The magnitude of the dc signal 
Amp1=1; %The amplitude  of the first signal 
Amp2=3; %The amplitude  of the second signal 
Amp3=5; %The frequency of the third signal 
Fre1=10;%The frequency of the first signal )
Fre2=40;%The frequency of the Second signal 
Fre3=80;%The frequency of the third signal 
Fs=40960; %The sampling frequency
N=4096;   %The sampling points 
t=[0:1/Fs:1]; %Sampling time
S=DC+Amp1*sin(2*pi*Fre1*t)+Amp2*sin(2*pi*Fre2*t)+Amp3*sin(2*pi*Fre3*t); %信号
%Display the original signal
subplot(3,1,1);
plot(S,'b');
grid on;
xlabel('                                                                       Frequency/HZ');
ylabel('Voltage');
title('The original signal');
Y = fft(S,N);    %Do FFT transform 
Module = (abs(Y));   %:Acquire modulus
subplot(3,1,2);
F=([1:N]-1)*Fs/N; 
h = stem(F(1:N/320)/10,Module(1:N/320),'fill','--');
set(get(h,'BaseLine'),'LineStyle',':')
set(h,'MarkerFaceColor','red')
grid on;
xlabel('                                                                       FFTout[i]');
ylabel('FFT module');
title('the module value of FFT');
Module=Module/(N/2);  
Module(1)=Module(1)/2;
F=([1:N]-1)*Fs/N; 
subplot(3,1,3);
h = stem(F(1:N/320),Module(1:N/320),'fill','--');
set(get(h,'BaseLine'),'LineStyle',':')
set(h,'MarkerFaceColor','red')
grid on;
xlabel('                                                                       Frequency /HZ');
ylabel('Voltage');
title('Amplitude - frequency curves');

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

024c (备注嵌入式)**

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值