cordic的FPGA实现(二)向量模式与伪旋转处理
本节更新的Coordinate Rorate Digital Computer的向量模式介绍与伪旋转处理,结尾处会总结旋转模式与向量模式的区别,在接下来的系列中会更新乘法器、除法器、sin函数、cos函数的verilog实现与matlab实现原理,并分享verilog与matlab代码,欢迎大家关注!
一、向量模式(Vector Mode)
向量模式可以得到输入向量的幅度,当使用向量模式旋转后向量就与x轴对齐(重合),因此,向量的幅值将就是旋转向量的x值,幅度结果由Kn增益标定。
在向量模式下,COEDIC算法主要用于实现直角坐标系到极坐标系的转换。旋转模式下,每次迭代使得z趋向于0,与之相比,向量模式下,则是使y趋近于0,为了达到这一目的,每次迭代通过判断yi的符号确定旋转方向,最终使初始向量旋转至X轴的正半轴,这一过程也使得每次伪旋转的旋转角度类加载累加和存储在变量z中,矢量旋转图为:
迭代过程为:(mathtype公式插入不了,贴截图了)
对于d的正负的判断就是看y的值,在点位于x轴上方时,伪旋转点需要继续贴近x轴,所以横坐标要继续增加,y绝对值要继续减小。
从verilog角度来看,矢量模式下CORDIC的x、y输入分别对应x、y坐标,输出的x、z对应模长与正切角度。
初始化的的值为0,从而经过n次迭代之后可以获得向量的模长和相角,以(1,2)为例,旋转过程为:
旋转模式和向量模式的相同之处在于:两者都是伪旋转,旋转模式下是的初始向量必须落入第一或者第四象限,向量模式使得初始向量必须贴近X轴。
二、伪旋转的预处理机制
伪旋转限定初始向量必须位于第一或者第四象限,这就要求x0必须大于0,而对y0无限制,根据对称性,当初始向量位于第二象限时,将其搬移到第一象限;当初始向量位于第三象限时,将其搬至第四象限,然后再对搬移后的向量利用CORDIC算法进行处理,对于CORDIC处理的结果根据x0和y0的符号(判断初始向量所在象限)作相应的处理,从而获得初始向量的相角,处理流程为:
三、旋转模式与向量模式的区别
旋转模式的输入参数为起始点的坐标和要旋转的角度,旋转模式下需要提供旋转的角度且需要提供迭代次数。旋转模式的迭代结果是起始点旋转z0个角度后的终点坐标,最终zn趋近于0。
向量模式的输入参数为起始点的坐标,不需要提供旋转的角度,需要提供迭代次数。最终迭代结果中,x为输入起始点向量的长度,z为到达该位置的旋转角度。
在给定起始坐标点,求该点对应的角度时,使用向量模式,最终可以得到从该点到达x轴的角度(Zn)。
在给定起始坐标点和旋转的角度,在求解终点对应的坐标时,使用旋转模式。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人