matlab迭代算法实例_CORDIC算法详解(二)CORDIC算法之圆周系统之向量模式

更新时间:2023-06-17 12:00:39 阅读: 评论:0

matlab迭代算法实例_CORDIC算法详解(⼆)CORDIC算法
之圆周系统之向量模式
CORDIC算法详解(⼆)- CORDIC 算法之圆周系统之向量模式(Vectoring Mode)
⽂章⽬录
CORDIC算法详解(⼆)- CORDIC 算法之圆周系统之向量模式(Vectoring Mode)
2 CORDIC 算法之圆周系统之向量模式(Vectoring Mode)
2.1 向量模式(Vectoring Mode)
2.2 思考
2.3 CORDIC 算法之圆周系统之向量模式应⽤
3 CORDIC 算法之圆周系统之向量模式及圆周模式应⽤
MATLAB代码3-3 function : cordic_cr
MATLAB代码3-4 function : cordic_cr_pre
MATLAB代码3-5 cordic_cr_post
验证
  ⽹上有很多类似的介绍,但是本⽂会结合实例进⾏介绍,尽量以最简单的语⾔进⾏解析。
  CORDIC ( Coordinate Rotation Digital Computer ) 是坐标旋转数字计算机算法的简称,
由 Vloder· 于 1959 年在设计美国航空导航控制系统的过程中⾸先提出[1], 主要⽤于解决导航系统中三⾓函数、 反三⾓函数和开⽅等运算的实时计算问题。 1971 年, Walther 将圆周系统、 线性系统和双曲系统统⼀到⼀个 CORDIC 迭代⽅程⾥ , 从⽽提出了⼀种统⼀的CORDIC 算法形式[2]。
  CORDIC 算法应⽤⼴泛, 如离散傅⾥叶变换 、 离散余弦变换、 离散 Hartley 变换、Chirp-Z 变换、 各种滤波以及矩阵的奇异值分解中都可应⽤ CORDIC 算法。 从⼴义上讲,CORDIC 算法提供了⼀种数学计算的逼近⽅法。 由于它最终可分解为⼀系列的加减和移位操作, 故⾮常适合硬件实现。 例如, 在⼯程领域可采⽤ CORDIC 算法实现直接数字频率合成器。 本节在阐述 CORDIC 算法三种旋转模式的基础上, 介绍了利⽤ CORDIC 算法计算三⾓函数、 反三⾓函数和复数求模等相关理论。 以此为依据, 阐述了基于 FPGA 的 CORDIC 算法的设计与实现及其⼯程应⽤。
整个系列分别从圆周系统、 线性系统和双曲系统及硬件实现进⾏分析,如下:
CORDIC算法详解(⼀)- CORDIC 算法之圆周系统之旋转模式( Rotation Mode )
CORDIC算法详解(⼆)- CORDIC 算法之圆周系统之向量模式(Vectoring Mode)
CORDIC算法详解(三)- CORDIC 算法之线性系统及其数学应⽤
CORDIC算法详解(四)- CORDIC 算法之双曲系统及其数学应⽤
CORDIC算法详解(五)- 统⼀的 CORDIC 算法形式
CORDIC算法详解(六)- CORDIC 算法的硬件实现
其中第五篇及第六篇后会放出相关参考资料及源码。
2 CORDIC 算法之圆周系统之向量模式(Vectoring Mode)
source
2.1 向量模式(Vectoring Mode)
  在向量模式下, CORDIC 算法主要⽤于实现直⾓坐标系到极坐标系的转换 旋转模式下, 每次迭代
使 z趋向于 0。与之相⽐, 向量模式下, 则是使y趋向于 0。 为了达到这⼀⽬标, 每次迭代通过判断 yi 的符号确定旋转⽅向, 最终使初始向量旋转⾄ X 轴的正半轴, 这⼀过程也使得每次微旋转的旋转⾓度累加和存储在变量 z 中。 ⽮量旋转图如图 3.76 所⽰, 相应的迭代过程如式(3.110) 所⽰:
成都作品集培训机构  经过n(n–>∞)次旋转,使图3.76中的P靠近x轴。因此,当迭代结束之后,P将近似接近x轴,此时P点纵坐标yn = 0,在这个过程中可知旋转了θ,即zn = z0 +θ = z0+arctan(y0/x0)(z0为初始化⾓度)。
  由上⼀篇⽂章可知,每次微旋转都导致向量模长发⽣了变化。以Ki表⽰第 i次微旋转模长补偿因⼦, 故第 i次微旋转真实旋转的结果应为:
  其中,由于在伪旋转中,去掉了cosθi,所以Ki=cosθi 由式 (3.99) 可知:
  当n趋于⽆穷⼤时,K 逼近 0.607252935。
  经过n(n–>∞)次旋转,可得:ggs
at什么意思
北京中级经济师考试xn = 1/∏cosθi(x0cosθ – y0sinθ)(其中i从0⾄n-1)nonn
yn = 1/∏cosθi(y0cosθ + x0sinθ)(其中i从0⾄n-1)
  因此,可得y0cosθ + x0sinθ = 0,
xn = 1/∏cosθi(x0cosθ – y0sinθ) = 1/∏cosθi{ [ (x0cosθ – y0sinθ)2](1/2)}(平⽅再开⽅)
= 1/∏cosθi{ [ x02cos2θ + y02sin2θ – 2x0y0sinθcosθ](1/2)}
= 1/∏cosθi{ [ x02cos2θ + y02sin2θ + y02cos2θ + x02sin2θ ](1/2)}
= 1/∏cosθi{ [ x02 + y02](1/2)}
  得到的最终结果为
  式( 3.111 ) 中, 要求初始化⾓度 z0 = 0 , 从⽽可获得向量的模长和相⾓。 以向量(1,2)为例,其旋转过程如表 3.20 所⽰, 前 3次微旋转⽮量图如图 3.77 所⽰。
  旋转模式和向量模式的相同之处在于: 两者都是微旋转, 也都是伪旋转。 前者使得向量模式下的初始向量必须落⼊第⼀或第四象限;后者使得向量模长发⽣变化需要补偿。
2.2 思考
  若初始向量落⼊第⼆或第三象限该如何处理?
  由于微旋转限定了初始向量必须在第⼀或第四象限 ,这就要求 x0 > 0 ,⽽对 y0没有要求。根据对称性,当初始向量位于第⼆象限时,将其搬移⾄第⼀象限;当初始向量位于第三象限时,将其搬移⾄第四象限,如图3.78所⽰,然后在对搬移后的向量利⽤CORDIC算法进⾏处理。对CORDIC处理的结果,根据 x0 和 y0的符号(判断初始向量所在的象限)做对应的处理,从⽽获得初始向量的相⾓,处理流程如图如图 3.79 所⽰。
2.3 CORDIC 算法之圆周系统之向量模式应⽤
  根据式 (3.111 ), 取x0 为复数的实部, y0为复数的虚部, 利⽤ CORDIC 算法可以进⾏复数求模运算, 显然, 也可求出该复数的相位, 如图 3.80 所⽰。 这⾥并不要求(x0 , y0 )在单位圆上。
  同样地, 根据式( 3.111 ), 令x0 = 1 , 可获取反正切函数值, 如图 3.81 所⽰。 据此, 在   MATLAB 下求解反正切函数值如图3.82 所⽰。
拥挤英语  关于CORDIC算法计算反三⾓函数arctanθ的MATLAB代码如下所⽰:
clo all;
clear;
clc;
% 初始化
die = 16;%迭代次数
sos的意思
x = zeros(die+1,1);
y = zeros(die+1,1);
z = zeros(die+1,1);
x(1) = 100;%初始设置
y(1) = 200;%初始设置
k = 0.607253;%初始设置
%迭代操作
cf英文for i = 1:die
if y(i) >= 0
d = -1;
el
d = 1;
end
x(i+1) = x(i) - d*y(i)*(2^(-(i-1)));
y(i+1) = y(i) + d*x(i)*(2^(-(i-1)));
z(i+1) = z(i) - d*atan(2^(-(i-1)));
end
moment什么意思d = vpa(x(17)*k,10)
a = vpa(y(17),10)
c = vpa(rad2deg(z(17)),10)
  此外,根据式(3.111),还可以实现直⾓坐标系到极坐标的转换。最终xn输出为极径,但扩⼤为初始向量模长的An,对zn进⾏⼀定的处理后即为极⾓。
3 CORDIC 算法之圆周系统之向量模式及圆周模式应⽤
  CORDIC圆⾓系统算法模型如MATLAB代码如下。其中,cordic_cr调⽤了两个函数cordic_cr_pre和cordic_cr_post,分别如MATLAB代码3-4和MATLAB代码3-5所⽰。
MATLAB代码3-3 function : cordic_cr

本文发布于:2023-06-17 12:00:39,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/975356.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:算法   向量   旋转   模式   系统   初始   复数   实现
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图