32 的FFT学习 (未整理版)

32FFT   需移植arm的dsp库

开始是下载stm32的DSP库,提供一个下载地址:
链接:https://pan.baidu.com/s/1M28W7WXNsO3QVfkZunh7rg
提取码:s7kb

可以看到官方提供的是256点和1024点FFT,关于FFT的点数,我以前有个误区,以为点数和采样频率有关,看了相关资料后发现两者没有本质上的关系,但是点数影响测量的分辨率。
将DSP库移植到Keil工程里面:
原文链接:https://blog.csdn.net/weixin_43368814/article/details/103552114

主要用到的函数

void cr4_fft_256_stm32(void *pssOUT, void *pssIN, u16 Nbin);
void cr4_fft_1024_stm32(void *pssOUT, void *pssIN, u16 Nbin);
//   *pssOUT是FFT之后输出频域的数组,*pssIN为输入的时域采样信号数组,Nbin为FFT点数
 

 
如需与信号频率对应则需要采样频率Fs      方法为用定时器触发ADC,再用DMA中般运

ADC由定时器角发DMA中断读取      改ADC数据内存为256 1024 等凑整的点数
  

奈重斯特采样定理。

开 AD C
定时器
PP
实部看频率虚部可以朋判断行相经
工程配置使用  ADC+DMA的历程为基础模板。

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC1 工作在独立模式
 ADC_InitStructure.ADC_ScanConvMode =DISABLE; //模数转换工作在非扫描模式
 ADC_InitStructure.ADC_ContinuousConvMode =DISABLE; //模数转换工作在不连续转换模式
 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; //Timer1触发转换开启(定时器T1的CC1通道,控制采样频率)


Apc vaue地址

信号频率f0=(Fs/N)m ,信号幅值Vpp=val/(N/2)。N为FFT的点数,Fs为采样频率。如果还要求信号相位,则FFT运算后最大幅度对应的数组OutBufArray[]要转化成实部加虚部的形式:假设OutBufArray[m]=Num=a+b*i (i是虚部单位,a=Num/65536,b=Num%65536)。相位Pha=atan2(a, b),注意结果是弧度制。

以stm32f103 为例子    。定时器的采样频率由定时器分频系数和自动装载值确定,

假设ARR为71,PAC为9,定时器PWM频率f=72M/((ARR+1)(PSC+1)),ADC采样频率fs=f。
此实验中所用采样频率为100KHz,根据奈奎斯特采样定理可知,被测信号频率最大值要小于或等于采样频率的二分之一,因此被测信号频率最大值为50Khz。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值