[STM32F1] stm32f103 利用dsp库进行FFT运算如何验证结果正确呢?

[复制链接]
4806|5
 楼主| Zacking 发表于 2015-4-28 14:01 | 显示全部楼层 |阅读模式
参考网上的例子使用stm32f103的dsp库进行FFT运算:http://heroxx.blog.163.com/blog/static/5423580201071110383980/

模拟输入信号为:包含3种频率正弦波(50Hz,2500Hz,2550Hz),幅值为均为4000
                          fx = 4000 * sin(PI2*i*50.0/Fs) + 4000 * sin(PI2*i*2500.0/Fs)+ 4000*sin(PI2*i*2550.0/Fs);
                          lBUFIN = ((signed short)fx) << 16;

64点FFt,采样率3200Hz
幅值计算:  void GetPowerMag()
                {
                    signed short lX,lY;
                    float X,Y,Mag;
                    unsigned short i;
                    for(i=0; i<NPT/2; i++)
                   {
                       lX  = (lBUFOUT << 16) >> 16;
                       lY  = (lBUFOUT >> 16);
                       X = NPT * ((float)lX) / 32768;
                       Y = NPT * ((float)lY) / 32768;
                       Mag = sqrt(X * X + Y * Y) / NPT;
                       lBUFMAG = (u32)(Mag * 65536);
                   }
                }

计算幅值结果如作者图:
                                 

请问如何根据以上数据出现的峰值或其他方法验证它的正确性呢?  请大神指导指导,谢谢!!:)

 楼主| Zacking 发表于 2015-4-28 15:54 | 显示全部楼层
请问有没有了解这方面的大侠呢,指导一下!
mmuuss586 发表于 2015-4-28 19:10 | 显示全部楼层
看不到图;
 楼主| Zacking 发表于 2015-4-28 19:38 | 显示全部楼层

不会吧,现在呢? 3745306040112208540.bmp
 楼主| Zacking 发表于 2015-4-29 08:53 | 显示全部楼层

超级版主,现在怎样,可以帮我解答一下吗:lol
 楼主| Zacking 发表于 2015-4-29 11:16 | 显示全部楼层
刚刚又看了一下那个网址上的例字,发现以下说明:
上图中,数组下标X对应的谐波频率为:N×Fs/64=N×3200/64=N*50Hz.
lBUFMAG[1] 对应 50Hz谐波幅值
上图中由于FFT分辨率50HZ,最大只能识别1600Hz谐波,导致结果中出现错误的数据。

所以试用了256和1024个点的,结果同作者一样。
信号为1个50Hz、1个2500Hz、1个2550Hz的正弦波混合信号,幅值为均为4000。

为什么出现的幅值基本都是3990多呢,不是应该是4000吗,是不是存在误差呢?

您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

227

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部