Clark Transform的FPGA代码实现讲解

news2024/11/16 20:30:52

        Clark 变换是坐标转换,将输入的三相电流转换到两相直角坐标下电流,如下图为坐标表示方法。

根据坐标的投影我们可以得到

从而可以推知:

上述公式为最终代码中实现的计算公式。

        在FPGA中实现时,由于FPGA中不擅长浮点数计算,因此代码中涉及的数据量全部用Q格式来表示。Q格式表示为:Qm.n,表示数据用m比特表示整数部分,n比特表示小数部分,共需要 m+n+1位来表示这个数据,多余的一位用作符合位。假设小数点在 n位的左边(从右向左数),从而确定小数的精度。例如Q15表示小数部分有15位,一个short 型数据,占2个字节,最高位是符号位,后面 15位是小数位,就假设小数点在第 15位左边,表示的范围是: -1<X<0.9999695  。浮点数据转化为 Q15,将数据乘以2^15Q15数据转化为浮点数据,将数据除以 2^15

        应用Q15格式,使用Verilog代码编写的clark变换算法如下所示:

module clark_transform
#(parameter WIDTH = 16)
(
input  clk,
input  rst,
input  start,
output out_valid,

input  [WIDTH-1:0] i_w,
input  [WIDTH-1:0] i_u,

output reg [WIDTH-1:0] i_alpha,
output reg [WIDTH-1:0] i_beta 
);

localparam    DELAY = 4;
reg           start_delay = 0;
wire          start_edge = !start_delay & start;
reg [DELAY:1] delay_cnt = 0;

always @(posedge clk or posedge rst)begin
    if(rst) begin 
              start_delay   <= 0;
              delay_cnt <= 0;
    end                         
    else    begin
              start_delay   <= start;
              delay_cnt <= {delay_cnt[DELAY-1:1],start_edge};
    end               
end

reg  signed [WIDTH-1:0] mult_din0;
wire signed [WIDTH-1:0] mult_din1 = -16'd18919;
wire signed [2*WIDTH-1:0] mult_dout;

multiplier  mult (.clk(clk), .dataa(mult_din0), .datab(mult_din1), .dataout(mult_dout));
defparam inst_mult.WIDTH = WIDTH;

always @(posedge clk or posedge rst)
    if(rst) begin 
             mult_din0 <= 0;
             i_alpha   <= 0;
             i_beta    <= 0;
    end      
    else begin
           
           if(start_edge)begin
               i_alpha   <= i_u;
               mult_din0 <= i_u + {i_w[WIDTH-2:0],1'b0};    
           end
           
           if(delay_cnt[3])
             i_beta   <= mult_dout[WIDTH-1+10:10];               
    end

assign out_valid = delay_cnt[DELAY];
    
endmodule

 

        在代码中应用了Q15格式,存在常数1/sqrt(3)=0.57735026918962576450914878050196,

转化为Q格式的数据为0.57735026918962576450914878050196*2^15=18918。

在start信号的上升沿触发后,需要4个时钟周期才计算出正确的结果,因此在out_valid上升沿时,输出正确的Clark Transform结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1611146.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【管理】杨三角模型

企业成功 成功 战略 X 组织能力 1&#xff09;组织能力对于企业的重要性是和战略一样的&#xff1b; 2&#xff09;组织能力必须与战略适配&#xff0c;才能共同造就企业的成功。 员工思维&#xff1a;员工愿不愿意参与战略落地的实践&#xff1f;员工每天所关心、追求和重视的…

细说postgresql之pg_rman备份恢复 —— 筑梦之路

pg_rman是一款开源的备份恢复软件&#xff0c;支持在线和基于PITR的备份恢复方式。 pg_rman类似于oracle的rman&#xff0c;可以进行全量、增量、归档日志的备份。 运行模式&#xff1a; 安装部署 Releases ossc-db/pg_rman GitHub 1、需要根据PG Server的版本&#xff0c;下…

【爬虫实战】2024微博·任意博主已发布的微博、自动翻页、多线程

大家好&#xff0c;应同学们私信要求&#xff0c;出一篇关于微博博主已发布的内容脚本可视化的案例&#xff0c;于是整理了一下&#xff0c;仅供学习参考。 项目功能简介&#xff1a; 1.可视化式配置&#xff1b; 2.任意博主&#xff1b; 3.自动翻页&#xff1b; 4.支持指…

Vue入门篇:概念,快速入门,插值表达式,核心特性,基本Vue指令

目录 1.Vue是什么2.快速入门3.插值表达式{{}}1.作用:2.语法:3.插值表达式的注意点: 4.Vue响应式核心特性5.Vue指令 1.Vue是什么 Vue是一个流行的JavaScript框架&#xff0c;用于构建用户界面。它是一种用于构建单页面应用程序&#xff08;SPA&#xff09;的渐进式框架&#xff…

Tcl学习笔记(三)——列表、数组、字典

目录 1.列表 创建、获取列表 添加、删除、替换列表元素 搜索列表元素、对列表元素排序 字符串和列表之间的转换 2.数组 创建数组 获取数组中的元素 删除数组中的元素 数组与列表之间的转换 3.字典 1.列表 列表是Tcl中一种数据结构&#xff0c;是元素的有序集合&…

[Qt网络编程]之获取基本网络信息

目录 前言 获取主机IP地址 获取主机 IP 地址和子网掩码 获取主机 MAC 地址 前言 获取主机的网络地址和接口信息是进行网络编程的第一步&#xff0c;也是网络编程的基础。Qt提供了网络接口类 QNetworkInterface、网络地址人口类 QNetworkAddressEntry 和主机地址类 QHostAd…

Windows 下最好用的流程图软件Visio

keywords: Visio 小问题记录 连接线箭头 如果在 Visio 2013/2016 里画流程图&#xff0c;发现连接线没有箭头&#xff0c;检查一下「设计」菜单里是否将主题设置成了「无主题」&#xff0c;如果是&#xff0c;取消掉就好了。 鼠标悬停提示 把鼠标悬停在图形上四周应该有几…

“手撕“三大特性之一的<继承>(上)

目录 一、为什么需要继承 二、什么是继承 三、继承怎么写 四、成员的访问 1.父类与子类的成员变量不同名 2.父类与子类的成员变量同名 3.父类与子类的成员方法不同名 4.父类与子类的成员方法同名 五、super关键字 一、为什么需要继承 先让我们看一段Java代码&#…

【大模型应用极简开发入门(1)】LLM概述:LLM在AI中所处位置、NLP技术的演变、Transformer与GPT、以及GPT模型文本生成逻辑

文章目录 一. AI中大语言模型的位置与技术发展1. 从AI到Transformer2. NLP&#xff1a;自然语言处理3. LLM大型语言模型&#xff1a;NLP的一种特定技术3.1. LLM定义3.2. LLM的技术发展3.2.1. n-gram模型3.2.2. RNN与LSTM 二. Transformer在LLM中脱颖而出1. Transformer架构能力…

不敢说懂你 - Glide硬核源码剖析

问题 Glide加载流程? Glide整体架构? Glide数据加载的来源? Glide缓存加载的流程? Glide线程切换原理? Glide如何感知Activity? Glide哪种情况会返回应用级的RequestManager? … 带着一些问题去阅读… 使用示例 本篇主要基于glide:4.12.0进行分析。下面是Gli…

[论文阅读链接]

CVPR2023&#xff1a;Learning Human-to-Robot Handovers from Point Clouds http://t.csdnimg.cn/OfSnShttp://t.csdnimg.cn/OfSnS仿真工具&#xff1a;dm_control: Software and Tasks for Continuous Control dm_control 翻译: Software and Tasks for Continuous Control…

python免费调用阿里云通义千问(q-wen-max)大模型API

文章目录 通义千问开通免费API Keypython调用阿里云通义千问API 通义千问 通义千问&#xff0c;是基于阿里巴巴达摩院在自然语言处理领域的研究和积累。采用更先进的算法和更优化的模型结构&#xff0c;能够更准确地理解和生成自然语言、代码、表格等文本。 支持更多定制化需…

js 特定索引下拆分字符串并组建成新的字符串数据

要在特定索引处拆分字符串&#xff0c;请使用 slice 方法获取字符串的两个部分&#xff0c;例如 str.slice(0, index) 返回字符串的一部分&#xff0c;但不包括提供的索引&#xff0c;而 str.slice(index) 返回字符串的其余部分。 过程&#xff1a;我们创建一个可重用的变量&a…

Linux-用户管理类命令实训

查看根目录下有哪些内容 进入/tmp目录&#xff0c;以自己的学号建一个目录&#xff0c;并进入该目录 像是目前所在的目录 在当前目录下&#xff0c;建立权限为741的目录test1 在目录test1下建立目录test2/test3/test4 进入test2&#xff0c;删除目录test3/test4 &#xff08;7&…

paddle.net怎么付款?paddle.net怎么订阅?

有需要的小伙伴可以使用Fomepay的卡进行订阅支付&#xff0c;我这里使用的是491090卡段&#xff0c;开卡步骤很简单&#xff0c;点击获取卡片 1、注册 2、填写姓名使用拼音或者英文名都可以 3、支付宝或者微信支付

JavaWeb-登录校验

会话技术 浏览器使用的是http协议&#xff0c;多次请求间数据是不能共享的&#xff0c;例如我们要去访问用户数据的接口&#xff0c;但这时候用户是否已经登入了呢&#xff1f;是不知道的&#xff0c;为了解决这个问题&#xff0c;于是引入了会话跟踪技术。 会话&#xff1a;…

一次Ambari安装记录

引言 Ambari是一个开源的Apache项目,它提供了一个直观易用的Web界面,用于管理、监控和配置Apache Hadoop集群。它是一个集群管理工具,可以帮助管理员轻松地部署、管理和监控Hadoop集群的各种组件,如HDFS、YARN、MapReduce、Hive、HBase等。通过Ambari,用户可以在集群中添…

【GPTs分享】GPTs分享之Image Recreate | img2img​

简介 该GPT是一个专门用于图像编辑、重建和合并的工具。它通过详细的自动图像描述和生成&#xff0c;帮助用户从源图像中重现或修改图像。此工具设计用于为视障用户提供图像内容的详细描述&#xff0c;并生成全新的图像&#xff0c;以满足特定的视觉需求。 主要功能 \1. 图像…

存储人视角:人工智能AI + 大模型

原文来自于知乎存储专栏&#xff1a; 存储人视角&#xff1a;人工智能AI 大模型 前沿 我的角色 背景 AI 出场 效果 一个宠娃狂魔 娃喜爱并有奥特曼玩具 她的奥特曼玩具会跳舞了 娃对我的崇拜和爱又多了一分......amazing 杭州网商路艾弗森 球队需要制作LOGO 形象生动…

【学习】对于加密接口、签名接口如何进行性能测试

随着科技的飞速发展&#xff0c;加密接口和签名接口在我们的日常生活中扮演着越来越重要的角色。从在线支付到信息安全&#xff0c;它们始终默默地守护着我们的数字世界。然而&#xff0c;随着应用场景的不断扩展&#xff0c;性能测试变得尤为重要。今天&#xff0c;让我们一起…