一个浮点转定点DSP算法的问题! 怪!!!!

[复制链接]
 楼主| pdm97 发表于 2008-4-23 22:17 | 显示全部楼层 |阅读模式
浮点运算如下:<br />&nbsp;&nbsp;&nbsp;fw0=5625636.482914;<br />&nbsp;&nbsp;&nbsp;fw1=16796184.027028;<br />&nbsp;&nbsp;&nbsp;fw2=-16716106.802805;<br />&nbsp;&nbsp;&nbsp;fw3=5545557.1237500&nbsp;;<br />&nbsp;&nbsp;&nbsp;fw=1.0-((fw1+fw2+fw3)/fw0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;float&nbsp;w[0]=w[1]=w[2]=in_data[0];(in_data[]&nbsp;是unsigned&nbsp;char数据)<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;for(i=0;i&ltn;i++)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;x=in_data;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;sresult=(float)(fw*x&nbsp;+&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fw1*w[2]+fw1*w[1]+fw2*w[0])/fw0)&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w[0]=w[1];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w[1]=w[2];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w[2]=sresult;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;}<br /><br />浮点转定点运算:<br /><br />&nbsp;&nbsp;&nbsp;fw0=5625636.482914;<br />&nbsp;&nbsp;&nbsp;fw1=16796184.027028;<br />&nbsp;&nbsp;&nbsp;fw2=-16716106.802805;<br />&nbsp;&nbsp;&nbsp;fw3=5545557.1237500&nbsp;;<br />&nbsp;&nbsp;&nbsp;fw=1.0-((fw1+fw2+fw3)/fw0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;sw0&nbsp;=(short)&nbsp;(&nbsp;fw1/fw0&nbsp;*&nbsp;1024*1024&nbsp;&nbsp;);&nbsp;//11Q20<br />&nbsp;&nbsp;&nbsp;sw1&nbsp;=(short)&nbsp;(&nbsp;fw2/fw0&nbsp;*&nbsp;1024*1024);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;sw2&nbsp;=&nbsp;(short)(&nbsp;fw3/fw0&nbsp;*&nbsp;1024*1024);&nbsp;<br />&nbsp;&nbsp;&nbsp;sw&nbsp;=&nbsp;fw*&nbsp;1024*1024&nbsp;;&nbsp;<br />&nbsp;&nbsp;&nbsp;int&nbsp;w[0]=w[1]=w[2]=in_data[0];<br /><br />&nbsp;&nbsp;&nbsp;for(i=0;i&ltn;i++)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;x=in_data;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;////////////////////////////////////////////////////////<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;sresult=(int)((sw*x&nbsp;+&nbsp;sw0*w[2]+sw1*w[1]+sw2*w[0])/1048576)&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;////////////////////////////////////////////////////////<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w[0]=w[1];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w[1]=w[2];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w[2]=sresult;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;}<br /><br />经过我DEBUG发现,定点运算的数据精度有损失是合理的,但是滤波出来的数据规律有问题,比如输入数据是1,2,3,4,5..........254,255;浮点运算后的输出数据基本是平滑的,但是定点运算后发现输出数据有周期性变化&nbsp;如:1,2,3,4,5,6,8,9,10,&nbsp;7,9,9,10,&nbsp;15,16,17,18,19,20,&nbsp;14,15,16,&nbsp;24,25,26,27,........等等类似的情况,想不明白了!请高手指教,<br />这本质就是要实现一个滤波算法,但是要把浮点运算转化为定点运算,看了这方面的资料,根据这些资料改写了算法,但是就出现这样的结果,郁闷!!!!求救!!<br />
 楼主| pdm97 发表于 2008-4-29 19:51 | 显示全部楼层

一个浮点转定点DSP算法的问题

没有人遇到过吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

17

帖子

0

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