【硬件测试】基于FPGA的2ASK调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR

news/2025/2/22 8:01:56/文章来源:https://www.cnblogs.com/51matlab/p/18725249

1.算法仿真效果

本文是之前写的文章

 

基于FPGA的2ASK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR

 

的硬件测试版本。

 

在系统在仿真版本基础上增加了ila在线数据采集模块,vio在线SNR设置模块,数据源模块。

 

硬件ila测试结果如下:(完整代码运行后无水印):

 

vio设置SNR=2db

 

 

 

vio设置SNR=5db

 

 

 

vio设置SNR=10db

 

 

 

硬件测试操作步骤可参考程序配套的操作视频。

 

2.算法涉及理论知识概要

      2ASK调制解调是一种数字调制解调技术,它是基于ASK调制的一种数字调制方式。ASK调制是一种模拟调制方式,它是通过改变载波的振幅来传输数字信号。而2ASK调制解调则是将数字信号转换为二进制码,再通过改变载波的振幅来传输数字信号。 2ASK调制的原理是将数字信号转换为二进制码,然后将二进制码与载波信号相乘,得到调制信号。在解调时,将接收到的信号与载波信号相乘,再通过低通滤波器滤波,得到原始的数字信号。       

 

      2ASK是一种数字调制方式,其中“2”代表二进制,即调制信号只有两个幅度水平。在2ASK调制中,数字基带信号控制载波的幅度。当发送二进制“1”时,发送全幅度载波;当发送二进制“0”时,不发送信号,即无载波输出。因此,2ASK信号可以看作是基带脉冲序列与一个全幅度正弦波的乘积。2ASK的调制解调系统结构如下图所示:

 

 

 

假设我们的输入二进制序列为an,那么2ASK的调制过程可以用以下数学公式表示:

 

        e2ASK(t) = Σan g(t - nTs) cos(ωct)

 

        其中,g(t)是基带脉冲形状,Ts是基带脉冲间隔,ωc是载波的角频率。解调过程则是对接收到的信号进行包络检波,恢复出原始的二进制序列。

 

FPGA上实现2ASK调制解调系统主要分为以下几个步骤:        系统设计:首先,我们需要根据2ASK调制解调的原理设计出系统的整体架构,包括调制器、信道模拟器和解调器等主要部分。

        Verilog编码:然后,我们使用Verilog硬件描述语言对系统各个部分进行编码。例如,我们可以创建一个调制器模块,它接收二进制输入,根据2ASK调制原理生成相应的调制信号。同样,我们也需要创建一个解调器模块,它接收调制信号,通过包络检波恢复出原始的二进制序列。

        仿真测试:编码完成后,我们需要通过仿真测试验证我们的设计是否正确。我们可以使用一些测试工具,如ModelSim,对我们的设计进行仿真。通过观察仿真结果,我们可以检查我们的设计是否满足预期。

       FPGA实现:最后,我们将通过仿真测试的设计下载到FPGA上进行实现。这通常需要使用特定的FPGA开发工具,如Xilinx Vivado。在这个步骤中,我们需要考虑FPGA的资源限制和性能优化等问题。

       FPGA实现过程中,需要注意的是,由于FPGA是硬件实现,所以设计需要考虑实时性和并行性。此外,对于调制和解调过程中的一些非线性操作,可能需要利用FPGA的查找表(LUT)等资源进行优化。

 

3.verilog核心程序

 

module tops_hdw(
input i_clk,
input i_rst,
output reg [3:0] led
);wire o_msg;//产生模拟测试数据
signal signal_u(
.i_clk (i_clk),
.i_rst (~i_rst),
.o_bits(o_msg)
);//设置SNR
wire signed[7:0]o_SNR;
vio_0 your_instance_name (.clk(i_clk),                // input wire clk.probe_out0(o_SNR)  // output wire [7 : 0] probe_out0
);wire signed[15:0]o_2ask;
wire signed[15:0]o_2ask_Rn;
wire signed[31:0]o_de_2ask;
wire signed[31:0]o_de_2askf;
wire signed[1:0]o_bits;
wire signed[31:0]o_error_num;
wire signed[31:0]o_total_num; 
wire signed[1:0]o_rec2;//ASK调制解调系统    
ASK2 uut(
.i_clk(i_clk),
.i_rst(~i_rst),
.i_bits({~o_msg,1'b1}),
.i_SNR(o_SNR),
.o_2ask(o_2ask),
.o_2ask_Rn(o_2ask_Rn),
.o_de_2ask(),
.o_de_2askf(o_de_2askf),
.o_bits(o_bits),
.o_error_num(o_error_num),
.o_total_num(o_total_num),
.o_rec2(o_rec2)
);
wire signed[15:0]w_de_2askf=o_de_2askf[25:10];
wire errflag = o_bits[1]^o_rec2[1];
//ila篇内测试分析模块
ila_0 ila_u (.clk(i_clk), // input wire clk.probe0({ o_msg,o_SNR,//9o_2ask, o_2ask_Rn,w_de_2askf,o_bits,//50o_error_num,o_total_num,errflag,//64o_rec2}));	 endmodule

  

 

4.开发板使用说明和如何移植不同的开发板

注意:硬件片内测试是指发射接收均在一个板子内完成,因此不需要定时同步模块。

 

在本课题中,使用的开发板是:

 

 

 

如果你的开发板和我的不一样,可以参考代码包中的程序移植方法进行移植:

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

即将迎来全民编程时代

最近,我的这种情绪现在越来越强烈了。 还记得我刚开始使用AI辅助编程的时候,写出来的代码能运行就不错了,还别想着要他理解需求和修改bug了。直到2024年年底到2025年年初这短短两个多月的时间,我对它的想法变成了,它是我们的编程搭子,甚至可以说是免费劳动力了。 再试编程…

.net8:拦截器Interceptors

在C#12中,引入了拦截器,但一直是试验性的功能,所以自己初步看了一下,没有写文章,最近在看AOT时,发现Dapper.AOT已经用上了这个功能,觉得还是整理一下,分享出来吧,如果以后这个功能改变了,或移除了,请无视这篇文章。下面是微软官方文档的提示:拦截器是一项试验性功能…

基于电压矢量变换的锁相环simulink建模与仿真

1.课题概述 基于电压矢量变换的锁相环simulink建模与仿真,这个模型的基本构架如下所示:2.系统仿真结果由图中锁相结果可以看出,利用新型锁相环技术在电网电压平衡条件和不平衡条件下均可对基波正序电压分量实现快速准确的锁相输出。这将在后面研究系统 电压不平衡环境下负序…

Spatial Data Analysis简易教程

1. 因子的多重共线性 (1)Perason相关系数(不推荐) SPSS-分析-》相关-》双变量-》确定,选择相关系数较小的因子:但是在分析-》回归-》线性中共线性诊断中,仍有3个变量的VIF>10,因此,该方法不可取。(2)共线性诊断 分析-》回归-》线性,在选项中勾选共线性诊断,方法…

基于线性核函数的SVM数据分类算法matlab仿真

1.程序功能描述 基于线性核函数的SVM数据分类算法matlab仿真,通过程序产生随机的二维数据,然后通过SVM对数据进行分类,SVM通过编程实现,不使用MATLAB自带的工具箱函数。 2.测试软件版本以及运行结果展示MATLAB2022A版本运行 (完整程序运行后无水印) 3.核心程序 % …

服务器 压测cpu

一. 使用的工具 1. taskset简单理解为: -c 找 cpu核心 -p 找 已存在进程2. stress 二 . 查看cpu核心个数 ,命令 lscpu 三. 使用taskset 与 yes 命令简单测试,htop查看cpu使用率 1. 测试第一个cpu核心 taskset -c 0 yes >> 1.txt 2. 测试第二个cpu核心taskset -c 1 y…

宽字节注入 sqli-lab lesson 32

1.判断注入 1.输入 1,addslashes函数将 进行转义变为 \ ,此时的单引号仅作为普通的字符2.输入1%df,addslashes 函数将 进行转义变为 \ ,此时 %df%5c会进行结合变成了一个汉字 運,因此SQL查询语句成功被改变了从而引起了报错 1%df =>1%df%5c3.将多余的进行注释然后按照…

Hume AI 即将推出新 AI 语音产品;声网上线对话式 AI 引擎,15 分钟让 DeepSeek 开口说话丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 技术 」、「有亮点的 产品 」、「有思考的 文章 」、「有态度的 观点 」、「有看点的 活动 」,但内容仅代表编辑…

DDPM

前向过程 扩散模型的前向过程指的是向原始数据中逐渐添加高斯噪声直到数据完全变成噪声的过程。假设\(q(x_0)\)是真实图像的分布,通过从训练集的真实图像中随机采样一张图像,表示\(x \sim q(x_0)\)。那么前向过程\(q(x_t | x_{t-1})\)指的是在前向的每一步中通过对图像\(x_{t…

同事PPT又拿奖了?偷偷用这AI工具,3步做出老板狂赞的年度报告

大家好,我是六哥,今天为大家分享一款PPT辅助神器,年底汇报必备神器!就是Napkin AI ! 这是一款超级酷的工具,它能把你写的文字一秒钟转化为各种炫酷的视觉效果,比如图表、流程图、信息图啥的。如果你想做一个引人注目的演示,或者想让你的博客文章更有吸引力,Napkin简直…

1.Java入门

本章目标简介 计算机基础 计算机语言发展史 java语言 JDK安装 第一个HelloWorld 集成开发环境本章内容 一、简介 1、企业用人的标准 我们在说人的能力的时候通常是有这三种说法:人的专业知识能力 人的执行能力 人学习的能力。在这三种能力当中,其实最重要的反而学习能力。你可…

洛谷P1990 覆盖墙壁 题解

洛谷P1990 覆盖墙壁 题解 题目传送门。 本题是一道非常好的递推题,请认真阅读,争取不看代码自己写出答案。 思路 我们可以设 \(f_i\) 为覆盖 \(2\times i\) 的所有覆盖方案。显然,边界条件 \(f_0\)(即没有列了,不用覆盖)和 \(f_1\)(只有 1 列,即一个 \(\text I\) 型砖块…