不说再见

  • 1 主题
  • 1 帖子
  • 107 积分
  • 身份:LV1 技术小白
  • E币:102

FFT算在STM32上如何实现

2019-6-23 08:28:01 显示全部楼层
怎么实现

最新评论

楼层直达:

qwqr3231

  • 10 主题
  • 52 帖子
  • 571 积分
  • 身份:LV3 中级技术员
  • E币:323
qwqr3231 2019-6-24 09:09:50 显示全部楼层
本帖最后由 qwqr3231 于 2019-6-24 09:11 编辑

FFT算法?

没搞过

翻了网上的码源,题主是要做什么项目?


  • #include "fft.h"
  • #include "math.h"
  • u32 lBufInArray[NPT];
  • u32 lBufOutArray[NPT];
  • u32 lBufMagArray[NPT];
  • float PI2=6.28318530717959;
  • u32 Fs=192000;
  • /******************************************************************
  • 函数名称:InitBufInArray()
  • 函数功能:模拟采样数据,采样数据中包含3种频率正弦波
  • 参数说明:
  • 备    注:在lBufInArray数组中,每个数据的高16位存储采样数据的实部,
  •           低16位存储采样数据的虚部(总是为0)
  • *******************************************************************/
  • void InitBufInArray(void)
  • {
  •     unsigned short i;
  •     float fx;
  •     for(i=0; i<NPT; i++)
  •     {
  •         fx = 1000 * sin(PI2 * i * 1000.0 / Fs) +
  •              3000 * sin(PI2 * i * 3000.0 / Fs) +
  •              4000 * sin(PI2 * i * 5000.0 / Fs);
  •         lBufInArray = ((signed short)fx) << 16;
  •     }
  • }
  • /******************************************************************
  • 函数名称:GetPowerMag()
  • 函数功能:计算各次谐波幅值
  • 参数说明:
  • 备  注:先将lBufOutArray分解成实部(X)和虚部(Y),然后计算幅值(sqrt(X*X+Y*Y)
  • *******************************************************************/
  • void GetPowerMag(void)
  • {
  •     signed short lX,lY;
  •     float X,Y,Mag;
  •     unsigned short i;
  •     for(i=0; i<NPT/2; i++)
  •     {
  •         lX  = (lBufOutArray << 16) >> 16;
  •         lY  = (lBufOutArray >> 16);
  •         X = NPT * ((float)lX) / 32768;
  •         Y = NPT * ((float)lY) / 32768;
  •         Mag = sqrt(X * X + Y * Y) / NPT;
  •         if(i == 0)
  •             lBufMagArray = (unsigned long)(Mag * 32768);
  •         else
  •             lBufMagArray = (unsigned long)(Mag * 65536);
  •     }
  • }



我要评论
1
3
广告
关闭 热点推荐上一条 /1 下一条