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

news/2024/12/19 21:04:16/文章来源:https://www.cnblogs.com/51matlab/p/18617935

1.算法仿真效果

本文是之前写的文章

 

基于FPGA的2FSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR_fpga 2fsk-CSDN博客

 

的硬件测试版本。

 

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

 

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

 

vio设置SNR=30db

 

 

 

vio设置SNR=20db

 

 

 

vio设置SNR=10db

 

 

 

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

 

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

       频移键控是利用载波的频率变化来传递数字信息。数字频率调制是数据通信中使用较 早的一种通信方式,由于这种调制解调方式容易实现,抗噪声和抗衰减性能较强,因此在 中低速数字通信系统中得到了较为广泛的应用。

 

        在二进制频移键控中,幅度恒定不变的载波信号的频率随着输入码流的变化而切换(称为高音和低音,代表二进制的1 和0)。产生FSK 信号最简单的方法是根据输入的数据比特是0还是1,在两个独立的振荡器中切换。采用这种方法产生的波形在切换的时刻相位是不连续的,因此这种FSK 信号称为不连续FSK 信号。由于相位的不连续会造频谱扩展,这种FSK 的调制方式在传统的通信设备中采用较多。随着数字处理技术的不断发展,越来越多地采用连继相位FSK调制技术。目前较常用产生FSK 信号的方法是,首先产生FSK 基带信号,利用基带信号对单一载波振荡器进行频率调制。相位连续的FSK信号的功率谱密度函数最终按照频率偏移的负四次幂衰落。如果相位不连续,功率谱密度函数按照频率偏移的负二次幂衰落。

 

2-FSK功率谱密度的特点如下:

 

(1) 2FSK信号的功率谱由连续谱和离散谱两部分构成,离散谱出现在f1和f2位置;

 

(2) 功率谱密度中的连续谱部分一般出现双峰。若两个载频之差|f1 -f2|≤fs,则出现单峰。

 

PSK:在相移键控中,载波相位受数字基带信号的控制,如在二进制基带信号中为0时,载波相位为0或π,为1时载波相位为π或0。载波相位和基带信号有一一对应的关系,从而达到调制的目的。

 

      在二进制频移键控(2FSK)中,当传送“1”码时对应于载波频率,传送“0”码时对应于载波频率。 2FSK信号波形可看作两个2ASK信号波形的合成,下图是相位连续的2FSK信号波形。

 

 

 

      FSK信号的解调也有非相干和相干两种,FSK信号可以看作是用两个频率源交替传输得到的,所以FSK的接收机由两个并联的ASK接收机组成。

 

       FSK:频移键控是利用两个不同频率f1和f2的振荡源来代表信号1和0,用数字信号的1和0去控制两个独立的振荡源交替输出。对二进制的频移键控调制方式,其有效带宽为B=2xF+2Fb,xF是二进制基带信号的带宽也是FSK信号的最大频偏,由于数字信号的带宽即Fb值大,所以二进制频移键控的信号带宽B较大,频带利用率小。

 

       FSK功率谱密度的特点如下:

 

(1) 2FSK信号的功率谱由连续谱和离散谱两部分构成,离散谱出现在f1和f2位置;

 

(2) 功率谱密度中的连续谱部分一般出现双峰。若两个载频之差|f1 -f2|≤fs,则出现单峰。

 

3.Verilog核心程序

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_carrier1;
wire signed[15:0]o_carrier2;
wire signed[15:0]o_fsk;
wire signed[15:0]o_fskn;
wire signed[31:0]o_de_ffsk1;
wire signed o_bits;
wire signed[31:0]o_error_num;
wire signed[31:0]o_total_num; 
wire  [1:0]o_rec2; //FSK调制解调系统    
FSK uut(
.i_clk(i_clk),
.i_rst(~i_rst),
.i_bits(o_msg),
.i_SNR(o_SNR),
.o_carrier1(o_carrier1),
.o_carrier2(o_carrier2),
.o_fsk(o_fsk),
.o_fskn(o_fskn),
.o_de_ffsk1(o_de_ffsk1),
.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_ffsk1=o_de_ffsk1[25:10];
wire errflag = o_bits^{~o_rec2[1]};//ila篇内测试分析模块
ila_0 ila_u (.clk(i_clk), // input wire clk.probe0({ o_msg,o_SNR,//9o_fsk, o_fskn,w_de_ffsk1,o_bits,//50o_error_num,o_total_num,errflag,//64o_rec2}));	 
endmodule
0sj_025m

  

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

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

 

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

 

 

 

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

 

 

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

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

相关文章

征程 6 云端 Ota 升级方案设计与实现

01 引言 在开发、调测过程中,经常通过 Ota 技术升级应用软件、底软。目前,项目上已将 Matrix6 的 Demo 部署在实车上,每次软件、底软需要版本更替或版本升级时,都需要研发测试同学上到车上使用工控机进行手动升级。 这流程存在耗费人力多,花费时间长,流程易出错的问题,并…

vxe-table 树表格新增数据,插入指定节点位置操作

vxe-table 新增数据,插入指定节点位置操作 官网:https://vxetable.cn npm install vxe-pc-ui@4.3.37 vxe-table@4.9.31// ... import VxeUI from vxe-pc-ui import vxe-pc-ui/lib/style.css import VxeUITable from vxe-table import vxe-table/lib/style.css // ...createAp…

less5

1.在URL处输入 ?id=1 ?id=1 ?id=1" ?id=1/1发现回显只有you are in......和报错 报错:判断回显是布尔类型 使用order by发现回显有三栏 ?id=1 order by 4%23 ?id=1 order by 1%23 ?id=1 order by 3%23判断数据库长度:8位 ?id=1 and length((select database()))&g…

Java-递归查询部门下所有子部门(包括本部门)

Java-递归查询部门下所有子部门(包括本部门),会得到一个部门id的集合:List deptIds具体代码如下: //递归1public List<Long> queryAllSubInstitutionIds(Long institutionId) {List<Long> subInstitutionIds = new ArrayList<>();querySubInstitutionIds…

生物医学信息

生物信息学基础 生物医学信息学的概念的掌握生物信息学很大一部分工作体现在生物数据的收集、存储、管理与提供 利用多组学数据(基因组,转录组,表观遗传组、蛋白组等)和机器学习、数据挖掘的方法 ,挖掘潜在的生物学、医学的知识和模式,用于解决诊断和治疗。中心法则是什么…

5、导出表

5、导出表 typedef struct _IMAGE_EXPORT_DIRECTORY {DWORD Characteristics;DWORD TimeDateStamp;WORD MajorVersion;WORD MinorVersion;DWORD Name; // 指向 导出表的文件名DWORD Base; // 导出函数的起始序号DWORD NumberOfFunctions; // 所有导…

4、文件与内存转换相关

4、文件与内存转换相关 FileBufferToImageBuffer 也是一样的长话短说。这里涉及了一点,就是内存对齐 PE头与节区之间 节区与节区时间会发生内存对齐。在文件中有一个文件对齐 ​​ 在可选PE头中有这两个进行标识,之前也写过这个内存对齐的博客,这里就不多说了 下面贴几个代…

1、PE 初识

1、PE 初识 概论 首先 PE头部分主要是学习PE结构的前半部分,每一个是做什么的,以及重点是什么,每一个是做什么用的。并使用Cpp代码来解析该PE头 注意这里用了一个Windows.h的头文件,后面再说。 PE是Windows系统 PE结构(Portable Executable),即可移植可执行文件格式,是…

交换空间swap

交换空间: 交换空间是硬盘上的一部分,被用作虚拟内存,当系统的物理内存(RAM)不足时,系统会使用交换空间来存储暂时不用的数据。1.关闭交换空间 1)关闭所有交换空间 swapoff -a2)关闭特定的交换空间 swapoff /dev/sdb12.开启交换空间 1)开启所有交换空间 swapon -a2…

2024 IDEA 2024.3 安装使用教程(附激活至2099年,以及常见问题处理)

IntelliJ IDEA简介 IntelliJ IDEA是一款非常强大的Java集成开发环境(IDE),由JetBrains公司开发。它提供了丰富的功能和工具,帮助开发者更高效地编写、调试和部署代码。 下面这种方式仅供交流学习,如果有能力还请支持正版 下载安装 下载 IDEA 2024.3 版本的安装包 为了方便,也…

第十六次作业

1、通过华为云沃土云创计划免费薅云服务器 打开链接:https://developer.huaweicloud.com/programs/dev-program.html 使能⽅向选择个⼈在这个 计划权益中申请优惠券免费购买成功2、复现windows、linux权限维持技巧 windows权限维持: 隐藏⽂件:利⽤⽂件属性 ⽂件右键属性,勾…

OpenCL 编程步骤 2. 获取设备

clGetDeviceIDs 查询支持OpenCL设备列表: cl_int clGetDeviceIDs(cl_platform_id platform ,cl_device_type device_type ,cl_uint num_entries ,cl_device_id *devices ,cl_uint *num_devices )与clGetPlatformIDs函数类似,第一次调用时,devic…