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

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

时间:2024-11-13 21:45:28浏览次数:1  
标签:误码率 FPGA clk SNR Ncom 模块 rst 1024QAM com

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

  

标签:误码率,FPGA,clk,SNR,Ncom,模块,rst,1024QAM,com
From: https://www.cnblogs.com/51matlab/p/18544908

相关文章

  • 网页版五子棋——对战模块(客户端开发)
    前一篇文章:网页版五子棋——匹配模块(服务器端开发)-CSDN博客项目源代码:Java:利用Java解题与实现部分功能及小项目的代码集合-Gitee.com目录·前言一、前后端交互接口设计二、游戏房间页面基本结构1.游戏房间页面布局2.游戏房间页面样式设计三、实现棋盘信息绘制四......
  • App中第三方登录和分享模块的实现
    @目录1流程2设计与实现3优化本文目的:“实现一套易于使用、维护的第三方登录和分享模块”我们开发App有时为了吸引用户,会引入三方的授权登录降低用户的注册和登录操作,同时会根据业务需求引入三方的分享服务。目前可用的第三方授权登录和分享有很多,国内比较常用的有微信、QQ、......
  • rust学习八、包和模块
    总体上,也没有什么特别的地方,和其它语言比较起来。我们可以看懂熟悉的字眼:包括、模块、use、公共等等如果是英文,则需要知道crate、pub。本章节对应相关书籍的第七章节.一、一个rust可执行程序的大体结构就本章节而言,尚未接触到一个非常复杂的工程结构,据说有什么工作空间。不......
  • 用函数实现模块化程序设计四
    数组作为函数参数调用有参函数时,需要提供实参,实参可以是常量、变量或表达式数组元素的作用与变量相当,一般来说,凡是变量可以出现的地方,都可以用数组元素代替,因此,数组元素也可以用作函数实参,其用法与变量相同,向形参船体数组元素的值。此外,数组名也可以作实参和形参,传递的是数组第......
  • altera FPGA arria 10如何将10g base-r进入用户模式进行校准
    在AlteraFPGA,特别是Arria10FPGA中,将10GBASE-R接口进入用户模式进行校准(通常是指收发器的PLL和相关电路的校准),可以通过以下步骤实现。这些步骤涉及到配置用户模式校准(UserModeCalibration)和动态重配置(DynamicReconfiguration)控制。1.确保收发器时钟信号的稳定......
  • vite 虚拟模块初识
    介绍:Vite中的虚拟模块Vite是一个现代化的构建工具,旨在通过利用浏览器原生ES模块的可用性以及使用编译为原生语言编写的JavaScript工具来解决一些问题。用途:1.自动生成路由配置:在一些前端框架(如Vue和React)中,虚拟模块可以用来动态生成路由配置。通常,我们需要手动维护路......
  • 如何制作代购系统的用户管理模块
    在代购系统中,用户管理模块是核心功能之一,它负责处理用户的注册、登录、信息管理等关键操作。一个高效且安全的用户管理模块能够提升用户体验,保障用户数据的安全。本文将详细介绍如何制作一个代购系统的用户管理模块,包括前端界面设计、后端逻辑处理以及数据存储。系统设计用......
  • 【轻量化】YOLOv8 更换骨干网络之 MobileNetv4 | 模块化加法!非 timm 包!
    之前咱们在这个文章中讲了timm包的加法,不少同学反馈要模块化的加法,那么这篇就讲解下模块化的加法,值得注意的是,这样改加载不了mobilebnetv4官方开源的权重了~论文地址:https://arxiv.org/pdf/2404.10518代码地址:https://github.com/tensorflow/models/blob/master/offic......
  • Python模块之manim (动画模块)
    模块作用简介:Python模块之manim(动画模块)官方英文帮助:https://docs.python.org/3/library/官方简体中文帮助:https://docs.python.org/zh-cn/3/library/manim官方:https://docs.manim.community/en/stable/installation.html必要操作:>>>frommanimimport*......
  • 【小程序】封装网络请求request模块
    一、封装request请求因为我把所有项目中的接口也封装到了一个文件中,所以我建了一个services的文件夹,在下面建了一个request.js在这个里面做了请求拦截器和响应拦截器,constapiConfig=require('../config/baseUrl.js');classhttpClient{prefixUrl='';const......