打印
[STM32F1]

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

[复制链接]
4477|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 | 只看该作者

不会吧,现在呢?

使用特权

评论回复
5
Zacking|  楼主 | 2015-4-29 08:53 | 只看该作者

超级版主,现在怎样,可以帮我解答一下吗:lol

使用特权

评论回复
6
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

粉丝