如皋建设医院网站,怎么做局域网网站,好网站建设公司有多少,网络服务示范区创建情况参考#xff1a;b站教学视频FPGA#xff1a;Cordic算法介绍与实现_哔哩哔哩_bilibili FPGA硬件实现加减法、移位等操作比较简单#xff0c;但是实现乘除以及函数计算复杂度高且占用资源多#xff0c;常见的计算三角函数/平方根的求解方式有①查找表#xff1a;先把函数对应…参考b站教学视频FPGACordic算法介绍与实现_哔哩哔哩_bilibili FPGA硬件实现加减法、移位等操作比较简单但是实现乘除以及函数计算复杂度高且占用资源多常见的计算三角函数/平方根的求解方式有①查找表先把函数对应结果存在存储器中根据输入地址确定计算结果②泰勒展开把三角函数等函数求解展开成乘、除、加法进行求解。这两种方法耗费ram/乘法器的资源巨大为了仅用简单的移位/加减法运算求解出复杂三角函数提出了cordic算法。 cordic算法coordinate rootation digital computer 坐标旋转数字计算方法(硬件加速算法)。
类似于二分法反复迭代逐次逼近最终值计算结果达到一定精度即可终止。与二分法不同的是这里不是每次都改变二分之一的角度而是改变二分之一的tan值计算出对应角度从而把复杂运算转换为简单的移位运算。 问题已知某点坐标①求旋转到X轴需要的角度向量模式②求旋转某角度后的坐标旋转模式 对于旋转模式
模块输入为坐标xy要旋转的角度z。输出为新的坐标(x1y1)
根据新坐标的表达式当输入x1/ky0时输出新的坐标为coszsinz即求出了cosz和sinz的值。
对于向量模式
模块输入为坐标xy要旋转的角度z。输出为新点的模长和角度。
根据输出的表达式当输入为x1z0时输出为(x,y)的角度arctan(y/x)。
除此圆周旋转系统之外还有线性旋转、双曲旋转两种系统迭代方程不同根据需要查看文献了解。
cordic算法用途之一求相位角
算法原理
已知点x1y1求旋转角度z后的坐标x2y2 让point1以θ1、θ2...... θn逐次逼近point2此过程需调节正负号直到误差在可接受的范围内 为了确保数值准确即不取约等于我们从函数值入手只确保tan θn 1/2n-2 不去管θn的具体值即存在 求得如下角度 后续的旋转角度均按这个表格来旋转 即把求解tanx函数转化成了移位运算 求解坐标就转化成了加减运算和移位运算 对于系数cos当角度趋近于0时cos值趋近于1可以知道当迭代次数足够高时伸缩因子基本是一个常数。按照上面角度的表格通过计算可知当迭代次数大于16次时伸缩因子固定为0.6073所以我们可以设置迭代次数高于16把伸缩因子固定为0.673在所有运算结束后再乘上去。
相位误差取决了迭代的次数用上述表格当迭代次数确定为16次时求解的相位误差小于等于18°。
假定每次坐标旋转θ且tanθn1/2n-2 则可以得出单次迭代的坐标公式没考虑伸缩因子 其中di是旋转方向的判定因子正负。对于di的值引入角度累加器来判定当累加的角度大于原始角度时di为负小于则di为正
cordic算法即迭代算法如以上迭代公式通过多次迭代降低误差逼近目标值。
迭代有两种模式
①串行模块控制复杂资源较少速度较慢
②并行模块资源较多速度较快吞吐量大 atan函数返回-pi/2pi/2范围的相位角
atan2函数返回-pipi范围的相位角
项目中用的是atan2函数。
quartus cordic ip核
包含
①sin cos
②atan2 返回-pipi范围的相位角
③vector translate function向量模式
④vector rotate function旋转模式
quartus 的cordic IP核用modelsim-se进行仿真时需要添加altera库暂时没有进行仿真。貌似如果用altera-modelsim就不需要再手动添加 cordic算法的fpga实现 求相位角对于串行的方法来说只需要根据迭代的表达式通过状态机即可实现线性序列机也可以就是比较啰嗦对于有相同迭代表达式的算法来说状态机方便。