⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testcordic.html

📁 Cordic算法的Matlab实现
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<!DOCTYPE html  PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"><html xmlns:mwsh="http://www.mathworks.com/namespace/mcode/v1/syntaxhighlight.dtd">   <head>      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">         <!--This HTML is auto-generated from an M-file.To make changes, update the M-file and republish this document.      -->      <title>testCORDIC</title>      <meta name="generator" content="MATLAB 7.4">      <meta name="date" content="2009-02-23">      <meta name="m-file" content="testCORDIC"><style>body {  background-color: white;  margin:10px;}h1 {  color: #990000;   font-size: x-large;}h2 {  color: #990000;  font-size: medium;}/* Make the text shrink to fit narrow windows, but not stretch too far in wide windows. */ p,h1,h2,div.content div {  max-width: 600px;  /* Hack for IE6 */  width: auto !important; width: 600px;}pre.codeinput {  background: #EEEEEE;  padding: 10px;}@media print {  pre.codeinput {word-wrap:break-word; width:100%;}} span.keyword {color: #0000FF}span.comment {color: #228B22}span.string {color: #A020F0}span.untermstring {color: #B20000}span.syscmd {color: #B28C00}pre.codeoutput {  color: #666666;  padding: 10px;}pre.error {  color: red;}p.footer {  text-align: right;  font-size: xx-small;  font-weight: lighter;  font-style: italic;  color: gray;}  </style></head>   <body>      <div class="content">         <h2>Contents</h2>         <div>            <ul>               <li><a href="#1">Test</a></li>               <li><a href="#2">main function-Cordic</a></li>               <li><a href="#3">code</a></li>               <li><a href="#4">subfunction1-direction</a></li>               <li><a href="#5">code</a></li>               <li><a href="#6">subfunction2-Angle2rotate</a></li>               <li><a href="#7">code</a></li>               <li><a href="#8">subfunction3-terminator</a></li>               <li><a href="#9">code</a></li>               <li><a href="#10">subfunction4-gainAn</a></li>               <li><a href="#11">code</a></li>               <li><a href="#12">subfunction5-gainKi</a></li>               <li><a href="#13">code</a></li>            </ul>         </div>         <h2>Test<a name="1"></a></h2><pre> test cordic</pre><pre class="codeinput">clctheta=linspace(0,pi/2,100)';<span class="comment">% function [xn,gain,Fs,Ds,yn,zn]=cordic(x0,y0,z0,mode,...</span><span class="comment">%                                    dv_n,ROM,wordwidth)</span>wordwidth=64;Fs=zeros(wordwidth,length(theta));Ds=Fs;<span class="keyword">for</span> i=1:length(theta)    [xn(i),An(i),F,D,zn(i),yn(i)]<span class="keyword">...</span>   =cordic(1,0,theta(i),1,<span class="string">'z'</span>);    Fs(1:length(F),i)=F;    Ds(1:length(D),i)=D;    <span class="comment">%sprintf('theta=%f',theta(i))</span><span class="keyword">end</span>cosine=xn./An;sine=yn./An;true_cosine=cos(theta);<span class="comment">% true values</span>true_sine=sin(theta);<span class="comment">%theta=theta/pi*180;</span>hold <span class="string">on</span>plot(theta,cosine,<span class="string">'LineWidth'</span>,1.5)plot(theta,sine,<span class="string">'LineWidth'</span>,1.5)plot(theta,true_cosine,<span class="string">'g'</span>)plot(theta,true_sine,<span class="string">'g'</span>)plot(theta,true_cosine-cosine',<span class="string">'r'</span>)plot(theta,true_sine-sine',<span class="string">'m'</span>)legend(<span class="string">'Cordic cosine'</span>,<span class="string">'Cordic sine'</span>,<span class="keyword">...</span>       <span class="string">'true cosine'</span>,<span class="string">'true sine'</span>,<span class="keyword">...</span>       <span class="string">'error cosine'</span>,<span class="string">'error sine'</span>)xlabel(<span class="string">'\theta'</span>),ylabel(<span class="string">'value'</span>)hold <span class="string">off</span><span class="comment">% some statistics</span>save <span class="string">F.dat</span> <span class="string">Fs</span> <span class="string">-ascii</span>save <span class="string">D.dat</span> <span class="string">Ds</span> <span class="string">-ascii</span><span class="comment">%%==========================================================</span></pre><img vspace="5" hspace="5" src="testCORDIC_01.png"> <h2>main function-Cordic<a name="2"></a></h2><pre> this routine is employed to compute functions such as x0z0,y0/x0,sinz0,cosz0,atany0,sinhz0, coshz0, and atanhy0 and so on some other functions such as tanz0,tanhz0,expz0,lnw,w^.5 can also be derived from the above results</pre><h2>code<a name="3"></a></h2><pre class="codeinput"><span class="keyword">function</span> [xn,gain,Fs,Ds,zn,yn]=cordic(x0,y0,z0,mode,<span class="keyword">...</span>                                      dv_n,ROM,wordwidth,acc)<span class="comment">% initial state:        x0,y0,z0</span><span class="comment">%               initial state distincts various operatoins</span><span class="comment">%               and some of the initial values effects the</span><span class="comment">%               final results</span><span class="comment">% mode hints:           mode</span><span class="comment">%               there are three modes - circular,linear,</span><span class="comment">%               hyperbolic, generally, we use 1,0,-1 to</span><span class="comment">%               denotes them respectively and theoretically.</span><span class="comment">%               m chooses one of them</span><span class="comment">% decision variable name:    dv_n</span><span class="comment">%               decision variable decides which direction</span><span class="comment">%               to rotate,generally, dv is chosen between</span><span class="comment">%               'y' and 'z'</span><span class="comment">% datas stored:     ROM</span><span class="comment">% wordwidth of system: wordwidth</span><span class="comment">% accuracy requirement: 2^(-acc)</span><span class="comment">% check inputs===============================================</span><span class="keyword">if</span>(nargin&lt;3)    disp(<span class="string">'too few inputs\n'</span>)    z0=0;<span class="keyword">end</span><span class="keyword">if</span>(nargin&lt;4)    m=1;  <span class="comment">% circular mode</span><span class="keyword">end</span><span class="keyword">if</span>(nargin&lt;5)    dv_n=<span class="string">'z'</span>; <span class="comment">% z is chosen to be decision variable</span><span class="keyword">end</span><span class="keyword">if</span>(nargin&lt;6)    ROM=<span class="string">'d'</span>;<span class="comment">% default</span><span class="keyword">end</span><span class="keyword">if</span>(nargin&lt;7)<span class="comment">% DATAs are not provided</span>    wordwidth=64; <span class="comment">% default word width - 64bit</span><span class="keyword">end</span><span class="keyword">if</span>(nargin&lt;8)<span class="comment">% acc</span>    acc=wordwidth;<span class="comment">% about 10^(-6)</span><span class="keyword">end</span><span class="comment">% preprocess=================================================</span><span class="comment">% main section===============================================</span><span class="comment">% initial state----------------------------------------------</span>xi=x0;yi=y0;zi=z0;m=mode;F=zeros(1,1);D=zeros(1,1);An=1;<span class="keyword">for</span> iteration=0:wordwidth+1    <span class="comment">% parameter initialization-------------------------------</span>    <span class="keyword">if</span>(dv_n==<span class="string">'x'</span>)dv=xi;<span class="keyword">elseif</span>(dv_n==<span class="string">'y'</span>)dv=yi;    <span class="keyword">else</span> dv=zi;<span class="comment">% default decision variable</span>    <span class="keyword">end</span>    <span class="comment">% termination test---------------------------------------</span>    disable=terminator(dv,acc);    <span class="keyword">if</span>(disable)<span class="keyword">break</span>;    <span class="keyword">end</span><span class="comment">%if</span>    <span class="comment">% iteration begins---------------------------------------</span>    <span class="comment">% --------------------------di---------------------------</span>    di=direction(dv,dv_n);    D(iteration+1)=di;    <span class="comment">% -------------------------Fi/e--------------------------</span>    <span class="keyword">if</span>(ROM==<span class="string">'d'</span>)        NumOfData=wordwidth+1;        [Fi ei]=Angle2rotate(dv,m,di,NumOfData,wordwidth);    <span class="keyword">else</span>        [Fi ei]=Angle2rotate(dv,m,di,length(ROM),<span class="keyword">...</span>                             wordwidth,ROM);    <span class="keyword">end</span>    F(iteration+1)=Fi;<span class="comment">% record Fi</span>    <span class="comment">% --------------------------An---------------------------</span>    An=An*gainKi(Fi,m);<span class="comment">% calculate An</span>    <span class="comment">% ----------------------xi/yi/zi-------------------------</span>    xi=xi-m*yi*di*2^(-Fi);    yi=yi+xi*di*2^(-Fi);    zi=zi-di*ei;<span class="keyword">end</span><span class="comment">% iteration</span><span class="comment">% postprocess================================================</span><span class="comment">%check outputs===============================================</span><span class="keyword">if</span>(nargout&lt;0 || nargout&gt;6)    xn=0;yn=0;    disp(<span class="string">'too few or too many outputs.\n'</span>)<span class="keyword">end</span><span class="keyword">if</span>(nargout&gt;0)    xn=xi;<span class="keyword">end</span><span class="keyword">if</span>(nargout&gt;1)    gain=An;<span class="keyword">end</span><span class="keyword">if</span>(nargout&gt;2)    [row,column]=size(F);    <span class="keyword">if</span>(row&lt;column)Fs=reshape(F,column,row);    <span class="keyword">else</span> Fs=F;<span class="keyword">end</span><span class="keyword">end</span><span class="keyword">if</span>(nargout&gt;3)    Ds=D';<span class="keyword">end</span><span class="keyword">if</span>(nargout&gt;4)    zn=zi;<span class="keyword">end</span><span class="keyword">if</span>(nargout&gt;5)    yn=yi;<span class="keyword">end</span><span class="comment">%ends function</span><span class="keyword">end</span>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -