[DSP编程]

AD采集进来的数据如何变换做FFT可以计算出准确幅值

[复制链接]
4181|2
手机看帖
扫描二维码
随时随地手机跟帖
zhangmangui| | 2014-5-4 23:29 | 显示全部楼层
你先看看Qx的处理原理吧  网上资料很多  

使用特权

评论回复
吃肉的考拉|  楼主 | 2014-5-5 12:12 | 显示全部楼层
本帖最后由 吃肉的考拉 于 2014-5-5 12:13 编辑
zhangmangui 发表于 2014-5-4 23:29
你先看看Qx的处理原理吧  网上资料很多


你是说使用QMath库么,我的理解就是防止数据溢出,各种数据格式之间转换,不知道理解的对不对,但是在FFT应用这里具体怎么实现,我按我的理解将AD结果寄存器里的数据换算成实际的0~3v,再乘以2的31次,
ADResult[k]=((AdcRegs.RESULT0>>4)*3)/4095.0+adclo;
ipcb2[k]=ADResult[k]*2147483648;
将计算出来的幅值结果,因为是Q30格式,再除以2的30次开根号,就是实际幅值了吧,但幅值依然不准确,甚至频率相对ipcb1[k]=((unsigned long)(AdcRegs.RESULT0>>4))<<19;这样进行的数据转换也出现了比较大的误差,
但是我不用外部信号源,用函数发生器这么做却好着
M1 = N*Fn1/Fs;//N为采集点数,Fn1是信号频率,Fs是采样频率
ipcb1=0.73*sin(PI*2*i/N*M1)*2147483648;
max_mag = 2*(float)sqrt(mag)/sqrt(1073741824);//幅值计算

是软件算法有问题还是使用外部信号源有可能不稳定造成的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

58

帖子

0

粉丝