基于FPGA的1024QAM基带通信系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR

news/2024/11/13 21:59:00/文章来源:https://www.cnblogs.com/51matlab/p/18544908

1.算法仿真效果

vivado2019.2仿真结果如下(完整代码运行后无水印):

 

设置SNR=40db

 

 

 

将数据导入matlab显示星座图:

 

 

 

设置SNR=35db

 

 

 

将数据导入matlab显示星座图:

 

 

 

仿真操作步骤可参考程序配套的操作视频。

 

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

       1024QAM是一种高级调制方式,可以携带更多的信息位(10比特/符号),从而实现更高的数据传输速率。然而,这也带来了更高的误码率(BER)要求和更复杂的信号处理需求。FPGA由于其可编程性和高性能,成为实现这种复杂调制的理想平台。1024QAM调制将输入的10比特映射到一个复数平面上的1024个不同的星座点之一。每个星座点的位置由输入比特决定,且分布在二维平面上。

 

 

 

基于FPGA的1024QAM基带通信系统通常包含以下几个模块:

 

数据接口:负责数据的输入输出。

串并转换:将串行数据转换为并行数据。

星座映射:将输入数据映射到星座点。

调制器:生成IQ信号。

解调器:从接收到的信号中恢复IQ信号。

星座检测:检测最接近的星座点。

并串转换:将并行数据转换为串行数据。

3.verilog核心程序

	// DUT
tops_1024QAM_mod  top(.clk(clk),.rst(rst),.start(start),.parallel_data(parallel_data),.sin(sin),.cos(cos),.I_com(),.Q_com(),.I_comcos(I_com),//基带方式输出,即实际通信中的复数模式.Q_comsin(Q_com));//加入信道
//实部
awgns awgns_u1(.i_clk(clk), .i_rst(~rst), .i_SNR(i_SNR), //这个地方可以设置信噪比,数值大小从-10~50,.i_din(I_com), .o_noise(),.o_dout(I_Ncom));  
//虚部    
awgns awgns_u2(.i_clk(clk), .i_rst(~rst), .i_SNR(i_SNR), //这个地方可以设置信噪比,数值大小从-10~50,.i_din(Q_com), .o_noise(),.o_dout(Q_Ncom)); tops_1024QAM_demod  top2(.clk(clk),.rst(rst),.start(start),.I_Ncom(I_Ncom),.Q_Ncom(Q_Ncom),.I_comcos2(I_comcos2),.Q_comsin2(Q_comsin2),.o_Ifir(o_Ifir),.o_Qfir(o_Qfir),.o_sdout(o_sdout),.flag_reg(flag_reg));  //6个bit同时统计误码率	   
wire signed[31:0]o_error_num1;
wire signed[31:0]o_total_num1;
Error_Chech Error_Chech_u1(.i_clk(clk), .i_rst(~rst), .i_trans(parallel_data), .i_rec(o_sdout), .o_error_num(o_error_num1), .o_total_num(o_total_num1));  assign o_total_num = o_total_num1;
assign o_error_num = o_error_num1;  endmodule

  

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

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

相关文章

Hive的分区和排序

一、Hive的分区(十分重要) 1、分区是什么 答:我们可以把一个大的文件分隔成一个个小的文件,这样每次操作一个小文件就很方便了 2、为什么要进行分区 答:通过分区,当我们查询的时候,可以只扫描与条件相关的分区,这样做,避免了全局扫描,加快查询速度 1、静态分区(SP) 静…

项目冲刺4-3

仓库地址:https://github.com/bitpurleclude/GDUT-Goofish.git这个作业属于哪个课程 (https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/join?id=CfDJ8AOXHS93SCdEnLt5HW8VuxT_rAhbZKO3TfjMmbv1B0Re5Fp2d0_QACha2ZoYZ4fxF-ZKCCAhfJl7B8mvCfesLYE02X8T6kx_2R8w0SR-ykrgDVRKW…

【Linux】git note -v command not found

安装note.js Node.Js中文网 『Win+E』『此电脑』右键点击『属性』『高级系统设置』-『环境变量』『系统变量』-『NOTE_PATH』“C:\Program Files\nodejs”『用户变量』-『Path』“C:\Program Files\nodejs”『Win+R』重新启动控制台『cmd』-“$NOTE -v” 双击重新启动『Git Ba…

2024.11.13 DP题单

录制唱片 你刚刚继承了流行的 “破锣摇滚” 乐队录制的尚未发表的 \(N\)(\(1\leq N\leq 20\))首歌的版权。你打算从中精选一些歌曲,发行 \(M\)(\(1\leq M\leq 20\))张 CD。每一张 CD 最多可以容纳 \(T\)(\(1\leq T\leq 20\))分钟的音乐,一首歌不能分装在两张 CD 中。CD…

基于HASM模型的高精度建模matlab仿真

1.程序功能描述 本课题主要使用HASM进行高精度建模,主要对HASM模型进行介绍以及在实际中如何进行简化实现的。HASM原始的模型如下所示: 2.测试软件版本以及运行结果展示MATLAB2022A版本运行 3.核心程序%第一类基本变量E(i,j) = 1 + (( f(i,j+1,n) - f(i,j-1,n) )/( …

CICD04 Jenkins容器化CICD实现及分布式构建, 流水线Pipeline ubuntu使用

2.14.3 案例: 基于 Docker 插件实现自由风格任务实现 Docker 镜像 制作 不如前面的直接脚本编写灵活 2.14.3.2 安装插件 docker-build-step jenkins上安装 docker-build-step 插件#选择jenkins使用的docker服务 #左侧系统管理,右侧系统配置,Docker Builder下Docker URL输入 u…

数据类型和运算符

数据类型 动态类型编程语言运行时判断静态类型的编程语言 : Go 、C 、在开发的时候,就需要给一些定义的变量赋值空间大小。C 需要自己去开辟这个空间数据类型 : 每种在Go语言中出现的基本数据类型,会有一个默认的空间大小。 1、布尔类型数据 布尔型的值只可以是常量 true 或…

XXL JOB DockerCompose部署

官网给的方式是 Docker 命令启动,但是用起来太麻烦了,所以用DockerCompose 简化部署 创建数据库,导入 SQL SQL 脚本位置为/xxl-job/doc/db/tables_xxl_job.sql https://raw.githubusercontent.com/xuxueli/xxl-job/refs/heads/master/doc/db/tables_xxl_job.sql 编写 Docker…

CICD02 Jenkins安装,备份还原, 实现CICD核心功能 ubuntu使用

DevOps 之 CICD 服务器 Jenkins 1 Jenkins 部署与基本配置 1.2 Jenkins 安装和启动 1.2.1 Jenkins 的安装 Jenkins支持多种安装方法 1.包安装 2.JAVA的WAR文件 #要手动配置,不太方便 3.容器运行#系统要求 最低推荐配置:1.256MB可用内存2.1GB可用磁盘空间(作为一个Docker容…

CICD01 Git, GitLab, 部署方式 ubuntu使用

版本管理系统 Git 和 GitLab 1 DevOps 简介 1.3 持续集成、持续交付和持续部署 CICD CICD: 持续集成, 持续交付, 持续部署 1.6 常见的软件部署模式 生产中 蓝绿部署 和 金丝雀用的比较多 1.6.1 蓝绿部署 Blue-green Deployments 一个和生产环境一样的预发布环境, 和生产环…

jvm 垃圾回收算法的评价标准

如何实现回收的(核心思想): 1. 找到内存中存活的对象(与GC Root相关联) 2. 释放不再存活对象的内存,使得程序能再次利用这部分空间 --------------------------------------------------------------------------------- 垃圾回收算法的分类: -------- ----------------…

GO面试-切片

一、结构介绍 切片(Slice)在 Go 语言中,有一个很常用的数据结构,切片是一个拥有相同类型元素的可变长度的序列,它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。并发不安全。 切片是一种引用类型,它有三个属性:指针,长度和容量。 底层源码定义: type slice …