大家在高中大学应该学过以下角度转换公式(两公式形式不同本质相同),vivado中有现成的角度转换ip核cordic供使用,本文参考官方手册数据进行一次转角实验

在vivado pg105-cordic手册中为

以下设置codic ip核

以下代码

`timescale 1ns / 1ns

module exx_tst();
reg clk;
reg [15 : 0] angle;           // phase为转角
reg [31 : 0] x0y0;   //旧xy值,y在前16位,在后16位
wire x1y1_valid;           // 输出新值有效信号
wire [31 : 0] x1y1;            // 新xy值,y在前16位,在后16位
//reg s_axis_phase_tvalid;     //转角有效信号用于控制,可以直接设为1
//reg s_axis_cartesian_tvalid; //旧xy有效信号用于控制,可以直接设为1
wire [15:0] x0= x0y0[15:0]; //引出旧x值
wire [15:0] y0= x0y0[31:16];//引出旧y值
wire [15:0] x1 = x1y1[15:0];    //引出新x值
wire [15:0] y1 = x1y1[31:16];   //引出新y值

always #5 clk=~clk;

initial begin
#0 clk=0;
#100 
angle = 16'b1100_1101_1100_0000; //-pi/2=-1.57 fix16_13定点数
x0y0  = 32'b0001_0000_0000_0000_0010_1101_0100_0000;//y0=0.25,x0=0.707 fix16_14定点数
end

cordic_1 mycordic (
  .aclk(clk),                                        // input wire aclk
  .s_axis_phase_tvalid( 1 ),          // input wire s_axis_phase_tvalid
  .s_axis_phase_tdata( angle ),            // input wire [15 : 0] s_axis_phase_tdata
  .s_axis_cartesian_tvalid( 1 ),  // input wire s_axis_cartesian_tvalid
  .s_axis_cartesian_tdata( x0y0 ),    // input wire [31 : 0] s_axis_cartesian_tdata
  .m_axis_dout_tvalid( x1y1_valid),            // output wire m_axis_dout_tvalid
  .m_axis_dout_tdata( x1y1 )              // output wire [31 : 0] m_axis_dout_tdata
);

endmodule

大家在设置 x0 y0 x1 y1时要设为以下(phase设为13)16_14定点数,

做实验时如果没有matlab支持,是很难从带小数点实数转二进制的(16_14定点格式),如果有matlab的话,我自己采用以下算法命令快速换算成二进制值

dec2bin(0.707*256)  %*256是为了把小数点消掉

ans =

10110100   %因为乘了256所以要向回退8位变为00.10110100,小数点前符号位+个位,

dec2bin(0.25*256)

ans =

1000000  %要向回退8位变为00.010000000

dec2bin(pi/2*256)

ans =

110010010 %要向回退8位变为001.10010010(小数点前符号位+十位+个位,因为最大值可能为3所以加了十位),最后换为补码110.01101110(因为是-pi/2)

//算出的-0.707可以用00.10110100(0.707)换为补码11.01001011(略有误差)

//如果大家嫌换补码烦可以考虑matlab dec2bin(bitxor(255,n)+1)联合运算的指令

以下直接用matlab命令进行一次同样的计算

%cos(-pi/2)=0  sin(-pi/2)=-1
 x1=0.707*cos(-pi/2) - 0.25*sin(-pi/2) =0.25
 y1=0.25*cos(-pi/2) + 0.707*sin(-pi/2)  =-0.707

当然,如果你是位数学高手的话,会一眼看出并直奔最快的算法如下:

>> (0.707+0.25i)*-i   %-i 代表旋转-90度

ans =

0.2500 - 0.7070i    %x轴变为0.25 y轴变为-0.707

由此看来,FPGA是有点“笨”哈,谁让它只认得0-1两个数,不像我们人类还认得2-9+i,但FPGA(存储量大+运算速度快)能7*24小时不停工作,而我们人类工作8小时就累趴下了

大家是不是觉得很好玩呢

向量旋转(或矢量旋转或坐标轴旋转)后xy坐标重定位(vivado+cordic ip核+matlab) - 适用于数学爱好者相关推荐

  1. 【自动驾驶】29.坐标变换与坐标轴旋转

    从一个坐标系的点变换到另一个坐标系的点,旋转矩阵的角度我们不能直接知道,但是可以通过两个坐标系之间的旋转来间接得到. 如: 世界坐标系有一个点P,我们要描述它,就得给他一个坐标系原点,如果他放在车身坐 ...

  2. 绕固定坐标轴旋转与绕自身坐标轴旋转一致性证明

      最近在看人头姿态和视线方向检测的东西,需要考虑坐标系与坐标系之间的旋转.用欧拉角表示坐标系的旋转时存在两种旋转方法,另外旋转的顺序也会对旋转结果有影响,查了一些资料总结一下结果.   描述坐标系B ...

  3. OpenGL(十二)——Qt OpenGL绕着坐标轴旋转多边形

    OpenGL(十二)--Qt OpenGL绕着坐标轴旋转多边形 一.旋转多边形 前两篇介绍了如何绘制多边形,并且给多边形进行上色.本篇介绍如何旋转多边形. 多边形的旋转,在类中增加两个变量来控制这两个 ...

  4. 【Unity步步升】各类旋转逻辑的区别,如欧拉旋转、插值旋转、矢量朝向等...及游戏视角案例

    在 Unity 中为物体旋转提供了各种 API ,例如 Rotate.RotateAround.LookAt 等方法.但为了避免万向节死锁的问题,一般使用四元数来表示物体的旋转. 而接下来的旋转方法我 ...

  5. 刚体在三维空间的旋转(关于旋转矩阵、DCM、旋转向量、四元数、欧拉角)

    最近学习了一些关于三维空间旋转相关的知识,借此梳理一下备忘. 三维空间的旋转(3D Rotation)是一个很神奇的东东:如果对某个刚体在三维空间进行任意次的旋转,只要旋转中心保持不变,无论多少次的旋 ...

  6. 帅某---考研---空间直线绕坐标轴旋转、二次曲面方程

    一.空间直线绕坐标轴旋转 注:1.本说明以Z轴为例子,其他轴类同: 2.直线绕直线旋转对应的为二次曲面方程,属于超纲内容.考察内容为:给定二次曲面方程,只需要知道其曲面类型. 二.二次曲面方程 1.介 ...

  7. matlab的空间坐标轴,空间三维坐标轴旋转

    根据在网上找的公式编的程序,不知道对不对 %设在OXY坐标系中,原点不动,坐标轴旋转而得到一新坐标系OX'Y'Z': %OX'轴与OX,OY,OZ轴的正向夹角分别成:α1,  β1,  γ1角: %O ...

  8. java 某点 旋转_java-如何围绕某个点旋转顶点?

    java-如何围绕某个点旋转顶点? 想象一下,您在2d空间中有两个点,您需要将其中一个点旋转X度,另一个点作为中心. float distX = Math.abs( centerX -point2X ...

  9. php 图片压缩旋转,移动端图片上传旋转、压缩问题的解决方案

    本篇文章就给大家带来移动端图片上传旋转.压缩问题的解决方案.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 前言 在手机上通过网页 input 标签拍照上传图片,有一些手机会出现图片 ...

最新文章

  1. java is not a enclosing class_Java Class getEnclosingClass()用法及代码示例
  2. eclipse使用教程_使用此首选项可加快Eclipse m2e配置
  3. linux内存分析命令,Linux進程內存分析pmap命令
  4. Spring-Boot——Cache
  5. innodb存储引擎 - 锁
  6. 【Python成长之路】Python爬虫 --requests库爬取网站乱码(\xe4\xb8\xb0\xe5\xa)的解决方法【华为云分享】
  7. C# 高效字符串连接 StringBuilder介绍
  8. 【OpenCV学习笔记】【编程实例】二(图像的旋转和翻转)
  9. vfp生成菜单时文件不存在_手把手教你搞定权限管理,结合Vue实现菜单的动态权限控制!...
  10. python做词典_python实现电子词典
  11. Android自定义WebView实现Youtube网络视频播放控件
  12. @Prometheus监控数据库(MySQL)
  13. python4delphi和tesserocr库安装配置
  14. 计算机病毒计算机软件系统故障,简要区分计算机病毒与软硬件故障问题
  15. 机器学习:simple linear iterative clustering (SLIC) 算法
  16. hdu 1849 Rabbit and Grass Nim博弈
  17. Help 药盒_疯狂的设计
  18. iOS 一步一步带你实现引导页
  19. mysql的mgr是什么意思_MySQL之MGR简介
  20. webpackvue-cli快速构建

热门文章

  1. matlab里excel汉字怎么显示,[求助]matlab如何导入excel中的汉字,求助~~~
  2. android开发中对图片的处理方式汇总
  3. 热门商业模式解剖:哪个适合中国
  4. Spring Boot系列六 Spring boot集成mybatis、分页插件pagehelper
  5. 最佳阵容 | Flutter Firebase 插件更新
  6. 关于单点登录的一点想法
  7. 【编程语言】品诺试题
  8. vue.runtime.esm.js?2b0e:619 [Vue warn]: Error in v-on handler (Promise/async): “Error: 失败“found in
  9. 红色印章制作过程记录
  10. 使用VMware安装CentOS