求助:请帮我看看程序
<P>functions=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>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<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>
回复:(qiqihainan)求助:请帮我看看程序
elseif y==t<BR><BR>这种表达式判断显然是非常不合适的<BR>由于误差的存在,虽然你现在看到的显示是一样的,但实际上t后边有一个很小的量,这个是由于阶段误差造成的。<BR><BR>改成<BR><BR>functions=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>t+1e-6<BR> s=s+(10^(8-i))*1<BR> t=t+0.022*t1<BR> elseif abs(y-t)<=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谢谢happy
<P>我想问一下matlab程序都不能使用y==t这种判断条件吗</P>如何显示数字前面的0
我做的是八位ad转换,比如说转换的结果是00111101 ,但计算机只显示111101<BR>还如何让前面的0也显示出来
页:
[1]