【算法】Cordic算法的原理及matlab/verilog应用

一、前言

单片机或者FPGA等计算能力弱的嵌入式设备进行加减运算还是容易实现,但是想要计算三角函数(sin、cos、tan),甚至双曲线、指数、对数这样复杂的函数,那就需要费些力了。通常这些函数的计算需要通者查找表或近似计算(如泰勒级数逼近)等技术来转换为硬件易于实现的方式。

CORDIC(Coordinate Rotation Digital Computer, 坐标旋转数字计算方法)算法就是一种化繁为简的算法,通过基本的加减和移位运算代替乘法运算,逐渐逼近目标值,得出函数的数值解。

二、Cordic算法理论推导

理论推导参考:CORDIC算法理论详解_cordic算法详解-CSDN博客,这篇博客的推导仔细而全面。

Cordic算法的基石在于一个规律:从tan45°开始,角度每减半,tan值也接近减半。这一规律直接将三角函数运算变成2的幂运算,而这在数字电路中可直接用移位运算来实现。

三、Cordic算法 matlab实现

3.1 已知相位(角度)求坐标(正弦余弦)

Matlab 复制代码
function [sin_theta,cos_theta] = cordic_sincos(theta,n)
% n:iterations
% theta: -180~180
tan_table = 2.^-(0 : n-1);
angle_rad_lut = atan(tan_table);
%angle_deg_lut = rad2deg( atan(tan_table) );
 
k = 1;
for i = 0 : n-1
    k = k*(1/sqrt(1 + 2^(-2*i)));
end
 

x = k;
y = 0;
theta_tar = theta*pi/180;  % to be rad
z=theta_tar;
 
% preprocess
if (theta_tar > pi/2)  
    theta_tar = theta_tar - pi/2;
elseif (theta_tar < -pi/2)
    theta_tar = theta_tar + pi/2;
end
     
 for i = 0 : n-1   
         if (z > 0)  
             d =1;
         else
             d=-1;
         end
        x_temp = x;
        y_temp =y;
        z_temp = z;
        x= x_temp - d*y_temp*2^(-i);
        y = y_temp + d*x_temp*2^(-i);
        z = z_temp - d*angle_rad_lut(i+1);
        
end
    
if (theta_tar > pi/2)  
    sin_theta = -x;
    cos_theta = y;
elseif (theta_tar < -pi/2)
    sin_theta = x;
    cos_theta = -y;
else
    sin_theta = y;
    cos_theta = x;
end
end

3.2 已知坐标求相位

待实现

四、cordic算法的verilog实现

待实现

相关推荐
微尘hjx1 小时前
【ByteTrack 04】多轨迹算法ByteTrack改进点
算法·yolo·目标检测·目标跟踪·bytetrack·ultralytics·车跟踪
星夜离尘562 小时前
MATLAB ADC 码流触顶诊断:命中数、缺口分段与削顶不可辨识性
开发语言·matlab
小蒋观天下5 小时前
雷击与浪涌防护:前端SPD选型、接地网误区,接地不当反而引入干扰
深度学习·算法·机器学习
WBluuue6 小时前
数据结构与算法:分块(一):块状数组、块状链表
数据结构·c++·算法·链表
澳鹏Appen7 小时前
澳鹏重磅发布ExamOCRBench:面向端到端试卷判分的多任务基准
算法·benchmark·基准评测
benjormin8 小时前
Java数据结构 二叉搜索树
数据结构·算法
Evand J8 小时前
【MATLAB例程】平面下,5基站对待定位点的定位。基于距离辅助下的AOA。完整代码下载链接
开发语言·matlab·平面·定位·导航·测距·aoa
人工智能培训8 小时前
知识图谱:结构化表达实体与关系的知识组织技术
大数据·人工智能·算法·重构·生活·知识图谱
地平线开发者8 小时前
QAT 实战:从 PyTorch 模型到 J6E 实板精度与延时验证
pytorch·算法·自动驾驶