2024fft幅度

2024fft幅度STM32的FFT库,计算幅值与相角不对今天用STM32提供的FFT库2.0版,计算了一下,发现算出的相角、幅值均不对。测试方法是:使用Sin函数模拟产生出一个正玄波,用FFT计算这个正玄波的幅值与相角。为测试F

STM32的FFT库,计算幅值与相角不对   今天用STM32提供的FFT库2.0版,计算了一下,发现算出的相角、幅值均不对。   测试方法是:   使用Sin函数模拟产生出一个正玄波,用FFT计算这个正玄波的幅值与相角。   为测试FFT的准确性,产生的正玄波分别有相同的幅值和不同的初相,两个相邻的波形初相差为 2PI / 64 弧度。   测试后发现:   STM32计算出的幅值、相位均有极大的误差。   其中,幅值上的错误是:幅值数值上与理论值误差极大,而且随着初相的不同,竟然会随着变化。   相位上的错误是:计算出的相角与理论误差也极大,而且在除相差恒定的情况下,实际计算出的出相差是变化的。   是否有对STM32的FFT库更了解的高手,帮忙分析下造成以上错误的原因。   测试程序如下:   static void FFT(void)   {                   u8 arnSample[64];           u32        arnInBuf[64], arnOutBuf[64];           s16 nFftReal, nFFtImage;           // 分别用于存储64个初相时的实部、虚部、幅值、相角           float fReal[64], fImage[64], fValue[64], fAngle[64];           s32 nReal[64], nImage[64], nValue[64], nAngle[64];           u16        i = 0, nPhase;           for (nPhase = 0; nPhase < 64; nPhase++)           {                   for (i = 0; i < 64; i++)        // 产生各初相时的曲线                           arnSample = (s16)(1000 * sin(2 * 3. * (i + nPhase) / 64));                   for (i = 0; i < 64; i++)        // 准备FFT输入                           arnInBuf = (arnSample << 16);                   cr4_fft_64_stm32(arnOutBuf, arnInBuf, 64);          //FFT计算                   // 取基波的实部、虚部                   nFftReal= (s16)((arnOutBuf[1] << 16) >> 16);                          nFFtImage= (s16)(arnOutBuf[1] >> 16);                   // 用浮点数计算                   fReal[nPhase]=  64 * nFftReal / 32768.0f;                   fImage[nPhase] = 64 * nFFtImage / 32768.0f;                   fValue[nPhase] = sqrt(fReal[nPhase] * fReal[nPhase]+ fImage[nPhase] * fImage[nPhase]) / 64;                   fValue[nPhase] *= 65535;                   fAngle[nPhase] = atan2(fImage[nPhase], fReal[nPhase]);                   // 用整数计算(扩大1000倍)                   nReal[nPhase] =  64 * nFftReal * 1000  / 32768;                   nImage[nPhase] = 64 * nFFtImage * 1000 / 32768;                   nValue[nPhase] = 65535 * sqrt(nReal[nPhase] * nReal[nPhase] + nImage[nPhase] * nImage[nPhase]) / 64;                   nAngle[nPhase] = 1000 * atan2(nImage[nPhase], nReal[nPhase]);           }           while (1)                  {                   ;           }   }   测试图片如下:

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/84543.html

(0)
上一篇 2024年 7月 27日 下午5:20
下一篇 2024年 7月 27日 下午5:23

相关推荐

关注微信