DSP浮点转定点运算问题

[复制链接]
 楼主| pdm97 发表于 2008-4-17 10:18 | 显示全部楼层 |阅读模式
//在DSP算法设计中常需要把浮点运算转化成定点运算,为什么在下面的代码中fresult和sresult的的运算结果不等<br />//请高手指教,谢谢!!!!!<br /><br />void&nbsp;fixPiontTest(short&nbsp;*in_data,int&nbsp;n&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;int&nbsp;i;<br />&nbsp;&nbsp;&nbsp;float&nbsp;fw1,fw2,fw3,fw0,fw;<br />&nbsp;&nbsp;&nbsp;short&nbsp;sw0,sw1,sw2;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;short&nbsp;fresult,sresult;<br />&nbsp;&nbsp;&nbsp;short&nbsp;w[4];<br />&nbsp;&nbsp;&nbsp;short&nbsp;fwf[4];&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;short&nbsp;x;<br /><br />&nbsp;&nbsp;&nbsp;<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;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;//&nbsp;&nbsp;fsw0=2.985650;<br />&nbsp;//&nbsp;&nbsp;fsw1=-2.971416;<br />&nbsp;//&nbsp;&nbsp;fsw2=0.985765;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;sw0&nbsp;=(short)&nbsp;(&nbsp;fw1/fw0&nbsp;*&nbsp;8192&nbsp;&nbsp;);&nbsp;//Q13<br />&nbsp;&nbsp;&nbsp;sw1&nbsp;=(short)&nbsp;(&nbsp;fw2/fw0&nbsp;*&nbsp;8192&nbsp;);&nbsp;&nbsp;//Q13<br />&nbsp;&nbsp;&nbsp;sw2&nbsp;=&nbsp;(short)(&nbsp;fw3/fw0&nbsp;*&nbsp;8192&nbsp;&nbsp;);&nbsp;//Q13<br />&nbsp;&nbsp;&nbsp;w[0]=w[1]=w[2]=in_data[0];<br />&nbsp;&nbsp;&nbsp;fwf[0]=fwf[1]=fwf[2]=in_data[0];<br />&nbsp;&nbsp;&nbsp;for(i=0;i&ltn;i++)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x=in_data;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fresult=(short)(x*fw+(fw1*fwf[2]+fw2*fwf[1]+fw3*fwf[0])/fw0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fwf[0]=fwf[1];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fwf[1]=fwf[2];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fwf[2]=fresult;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sresult=(short)(x&nbsp;+&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((sw0*(w[2]-x)+sw1*(w[1]-x)+sw2*(w[0]-x))&nbsp;&nbsp;&gt&gt13)&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;if(fresult!=sresult)&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;f&nbsp;%d,s&nbsp;%d
&quot;,fresult,sresult);<br />&nbsp;&nbsp;&nbsp;}<br />}
 楼主| pdm97 发表于 2008-4-21 21:34 | 显示全部楼层

一个极其怪的问题!

&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;8192&nbsp;&nbsp;);&nbsp;//Q13<br />&nbsp;&nbsp;&nbsp;sw1&nbsp;=(short)&nbsp;(&nbsp;fw2/fw0&nbsp;*&nbsp;8192&nbsp;);&nbsp;&nbsp;//Q13<br />&nbsp;&nbsp;&nbsp;sw2&nbsp;=&nbsp;(short)(&nbsp;fw3/fw0&nbsp;*&nbsp;8192&nbsp;&nbsp;);&nbsp;//Q13<br />&nbsp;&nbsp;&nbsp;w[0]=w[1]=w[2]=in_data[0];<br />&nbsp;&nbsp;&nbsp;fwf[0]=fwf[1]=fwf[2]=in_data[0];<br /><br />for(i=0;i&ltn;i++)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x=in_data;<br /><br />&nbsp;(1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sresult=(short)(x&nbsp;+&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((sw0*(w[2]-x)+sw1*(w[1]-x)+sw2*(w[0]-x))&nbsp;&nbsp;&gt&gt13)&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;////////////////////////////////////////////////////////<br />&nbsp;(2)&nbsp;&nbsp;&nbsp;&nbsp;sresult=(short)(x&nbsp;+&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((sw0*(w[2]-x)+sw1*(w[1]-x)+sw2*(w[0]-x))/8192)&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;if(fresult!=sresult)&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;f&nbsp;%d,s&nbsp;%d
&quot;,fresult,sresult);<br />&nbsp;&nbsp;&nbsp;}<br />为什么语句(1),(2)执行出来的结果不一样,请高手指点,问题在什么地方!
snakeemail 发表于 2008-4-22 08:40 | 显示全部楼层

这种问题自己查,一步一步debug就行了

  
 楼主| pdm97 发表于 2008-4-23 10:46 | 显示全部楼层

一个极其怪的问题!

我已经DEBUG了,<br />出现的问题就是在那两个不同的语句中,但是这两条语句的功能完全相同,仅仅一个是DSP浮点运算,另外一个是转为定点运算!但是定点运算出来的结果不对,是我浮点转定点运算的定Q值定标没有对吗?请高手指教!一个项目上遇到的问题!急
 楼主| pdm97 发表于 2008-4-27 10:19 | 显示全部楼层

一个极其怪的问题!

怎么没有人帮忙看看呢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

17

帖子

0

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