声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 836|回复: 3

求助:请帮我看看程序

[复制链接]
发表于 2006-5-12 17:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
<P>function  s=ad(y,vcc)<BR>%   逐次逼近型ad转换器<BR>%   输入一个模拟电平可输出相应的数字表示<BR>  s=0;<BR>t=vcc/2;<BR>t1=128;<BR>for i=1:8<BR>    t1=t1/2<BR>    z=y-t<BR>    if y&gt;t<BR>        s=s+(10^(8-i))*1<BR>        t=t+0.022*t1<BR>    elseif   y==t<BR>          s=s+(10^(8-i))*1<BR>          break<BR>   else<BR>          s=s+(10^(8-i))*0<BR>          t=t-0.022*t1<BR>      end<BR>  end<BR>我在命令窗口输入ad(3.520.5.632)<BR>结果应为10100000 但出来的结果是100111111<BR>具体的调试结果显示<BR>t1 =</P>
<P>    64</P>
<P><BR>z =</P>
<P>    0.7040</P>
<P><BR>s =</P>
<P>    10000000</P>
<P><BR>t =</P>
<P>    4.2240</P>
<P><BR>t1 =</P>
<P>    32</P>
<P><BR>z =</P>
<P>   -0.7040</P>
<P><BR>s =</P>
<P>    10000000</P>
<P><BR><FONT color=#f70938>t =</FONT></P>
<P><FONT color=#f70938>    3.5200</FONT></P>
<P><BR><FONT color=#e61a42>t1 =</FONT></P>
<P><FONT color=#e61a42>    16</FONT></P>
<P><BR><FONT color=#e61a42>z =</FONT></P>
<P><FONT color=#e61a42> -4.4409e-016</FONT></P>
<P><BR><FONT color=#e61a42>s =</FONT></P>
<P><FONT color=#e61a42>    10000000</FONT></P>
<P><BR>t =</P>
<P>    3.1680</P>
<P><BR>t1 =</P>
<P>     8</P>
<P><BR>z =</P>
<P>    0.3520</P>
<P><BR>s =</P>
<P>    10010000</P>
<P><BR>t =</P>
<P>    3.3440</P>
<P><BR>t1 =</P>
<P>     4</P>
<P><BR>z =</P>
<P>    0.1760</P>
<P><BR>s =</P>
<P>    10011000</P>
<P><BR>t =</P>
<P>    3.4320</P>
<P><BR>t1 =</P>
<P>     2</P>
<P><BR>z =</P>
<P>    0.0880</P>
<P><BR>s =</P>
<P>    10011100</P>
<P><BR>t =</P>
<P>    3.4760</P>
<P><BR>t1 =</P>
<P>     1</P>
<P><BR>z =</P>
<P>    0.0440</P>
<P><BR>s =</P>
<P>    10011110</P>
<P><BR>t =</P>
<P>    3.4980</P>
<P><BR>t1 =</P>
<P>    0.5000</P>
<P><BR>z =</P>
<P>    0.0220</P>
<P><BR>s =</P>
<P>    10011111</P>
<P><BR>t =</P>
<P>    3.5090</P>
<P><BR>ans =</P>
<P>    10011111<BR>红字所标示的地方正是问题所在,此时y=3.520,t=3.520,即y=t但程序判断为y&lt;t.我设了个z变量z=y-t,发现此时的<FONT color=#e61a42>z =</FONT></P>
<P><FONT color=#e61a42> -4.4409e-016<BR>也就是t并不等于3.520而比这略大,按照我的算法初值t=5.632/2,t=t+0.022*t1循环到那一步时t=4.224-0.022*32=3.520应该刚好等于3.520,为什么计算机算出来比3.520大4.4409e-016。想不明白???<BR>正因为这小差别,我的结果就完全不同了<BR></FONT></P>
回复
分享到:

使用道具 举报

发表于 2006-5-13 17:40 | 显示全部楼层

回复:(qiqihainan)求助:请帮我看看程序

  elseif   y==t<BR><BR>这种表达式判断显然是非常不合适的<BR>由于误差的存在,虽然你现在看到的显示是一样的,但实际上t后边有一个很小的量,这个是由于阶段误差造成的。<BR><BR>改成<BR><BR>function  s=ad(y,vcc)<BR>%   逐次逼近型ad转换器<BR>%   输入一个模拟电平可输出相应的数字表示<BR>  s=0;<BR>t=vcc/2;<BR>t1=128;<BR>for i=1:8<BR>    t1=t1/2<BR>    z=y-t<BR>    if y&gt;t+1e-6<BR>        s=s+(10^(8-i))*1<BR>        t=t+0.022*t1<BR>    elseif   abs(y-t)&lt;=1e-6<BR>          s=s+(10^(8-i))*1<BR>          break<BR>   else<BR>          s=s+(10^(8-i))*0<BR>          t=t-0.022*t1<BR>      end<BR>  end
 楼主| 发表于 2006-5-15 09:55 | 显示全部楼层

谢谢happy

<P>我想问一下matlab程序都不能使用y==t这种判断条件吗</P>
 楼主| 发表于 2006-5-15 10:20 | 显示全部楼层

如何显示数字前面的0

我做的是八位ad转换,比如说转换的结果是00111101 ,但计算机只显示111101<BR>还如何让前面的0也显示出来
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-25 17:14 , Processed in 0.056233 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表