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

news/2024/11/14 14:41:11/文章来源:https://www.cnblogs.com/51matlab/p/18538780

1.算法仿真效果

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

 

设置SNR=40db:

 

 

 

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

 

 

 

设置SNR=32db:

 

 

 

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

 

 

设置SNR=24db:

 

 

 

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

 

 

 

系统RTL结构如下:

 

 

 

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

 

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

       256QAM(Quadrature Amplitude Modulation,正交幅度调制)是一种高级调制方案,能够在给定带宽内传输更多的信息比特。256QAM意味着每个符号可以携带8个比特的信息,因为 log⁡2(256)=8log2​(256)=8。

 

       在调制过程中,输入比特流首先被映射到复数值星座图上的特定点。对于256QAM,每个符号代表8个比特信息。调制器根据输入比特选择对应的星座点,并将这些星座点转换成相应的复数形式。例如,在理想情况下,256QAM星座图包含256个不同的点。

 

      256QAM的星座图是一个二维平面内的点阵,每个点代表一个独特的调制状态。在理想情况下,星座图中的每个点都对应于一个特定的复数值,该值由相位和幅度共同决定。由于256QAM有256个可能的状态,因此其星座图包含256个点。

 

256QAM映射过程如下:

 

数据编码:首先,输入的一组8比特数据需要被编码成一个复数形式的符号。这意味着每个256QAM符号实际上是由8比特信息组成的。

 

星座图映射:接下来,这8比特被映射到星座图上的一个特定位置。通常,这些比特会按照一定的规则分配给星座图的不同维度。例如,前4比特可以确定星座图上的一维坐标(实部),而后4比特确定另一维坐标(虚部)。

 

星座点分配:具体来说,星座图上的每个点都有一个特定的坐标(I,Q),其中I 表示同相分量,Q 表示正交分量。在256QAM中,这些坐标可以从一系列预定义的值中选取。在标准化的256QAM星座图中,I 和 Q 的取值范围通常是−7,−5,−3,−1,1,3,5,7−7,−5,−3,−1,1,3,5,7 或者类似的比例因子乘以这些值。

 

星座图结构:256QAM星座图通常呈格状排列,每个点在I-Q 平面上的位置决定了其代表的比特组合。例如,如果使用灰度编码(Gray coding)来减少相邻星座点之间的比特翻转数,那么每个点周围的8个邻居将与其仅有一个比特的不同。

 

       在接收端,接收到的复数信号经过解调处理,将其映射回最接近的星座点,然后恢复出原始比特序列。这个过程可能会受到信道引入的噪声和失真的影响,导致错误的发生。

 

3.Verilog核心程序

	// DUT
tops_256QAM_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_256QAM_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
0sj_014m

  

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

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

相关文章

产业园区,被逼急了

这几年传统的地产开发业务遇到了各种各样的困境,许多房企转而开始积极布局多元化业务,业内的“去地产化”运动也愈演愈烈。 在这个时代背景下,产业园开发运营赛道迎来了一波热度爆发,吸引着众多房企和其他多元化主体的参与。那么,在日益升高的关注度与参与度之下,产业地产…

寂寂冬夜

引言 没错,本文的标题是嘉然学姐最喜欢的动漫《白色相簿2》中的插曲。 今天,chino 的 XCPC 最后一站——杭州站也结束了。(又浪费一年) 于是姑且乱写一番,也算是留下自己虚度光阴的罪证。 第一站 CCPC 哈尔滨 第一站是 CCPC 哈尔滨站,周六中午和 CD, BE, Sakura, Chen_jr 吃…

2024年11月10日重装系统后安装的软件

激活 Win11 双击开始激活:点击开始:激活完成:IDEA 2024 资源来自考拉软件:https://www.rjctx.com/41804.html

基于game-based算法的动态频谱访问matlab仿真

1.算法运行效果图预览 (完整程序运行后无水印)展示了负载因子P和次级传输功率不同的HPE。从图中可以看出,随着|hP E|扩大,用户P更好的为二级用户分配更多的频谱机会,以便刺激二级用户传输更多的干扰功率,因此,导致ρ的减少和Psu的增加。不同方案下不同用户P信噪比下的保密率。…

智慧医疗领域帮助中心的构建与优化

大家晚上好,这里是ai元启航,今天这篇分享的文章涉及内容是智慧医疗~ 智慧医疗的快速发展对内部支持体系提出了更高要求。一个高效、易用的帮助中心,不仅能够提升医护人员的工作效率,还能促进医疗服务的标准化和智能化。本文将分析智慧医疗行业如何构建和优化帮助中心,以提…

黑马PM- B端产品-报表设计

报表设计思路采购及销售报表财务报表

金融行业内部知识库的搭建与管理

大家好这篇分享的是有关金融行业 在金融行业,内部知识库的搭建与管理对于提升服务质量、确保合规性及促进团队协作至关重要。一个高效的知识库能够加速问题解决,减少重复劳动,提升整体运营效率。本文将探讨金融行业如何构建和优化内部知识库。 一、明确知识分类,建立结构框…

法律咨询知识中台的构建策略

一、引言 在数字化转型的推动下,法律咨询行业正面临着前所未有的机遇与挑战。为了更好地提升服务质量,加强知识管理,构建法律咨询知识中台已成为行业的必然选择。本文将探讨法律咨询知识中台的构建策略,旨在为法律服务机构提供有效的知识管理解决方案。 二、法律咨询知识中…

程序设计实验3

任务1 task1.cpp1 #include "window.hpp"2 #include <iostream>3 4 using std::cout;5 using std::cin;6 7 void test() {8 Window w1("new window");9 w1.add_button("maximize"); 10 w1.display(); 11 w1.close(); 12 }…

黑马PM- B端产品-财务模块设计

财务收付款业务及产品设计财务对账业务财务和核销