基于FPGA的16QAM软解调+卷积编码Viterbi译码通信系统,包含帧同步,信道,误码统计,可设置SNR

目录

1.引言

2.算法仿真效果

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

3.1 16QAM调制软解调原理

3.2 帧同步

3.3 卷积编码,维特比译码

4.Verilog程序接口

5.参考文献

6.完整算法代码文件获得


1.引言

        基于FPGA的16QAM软解调+卷积编码Viterbi译码通信系统开发,包含帧同步,高斯信道,误码统计,可设置SNR。系统包括16QAM调制模块,16QAM软解调模块,217卷积编码模块,维特比译码模块,AWGN信道模块,误码统计模块,帧同步模块,数据源模块等。

2.算法仿真效果

本系统是在

基于FPGA的16QAM软解调+帧同步系统verilog开发,包含testbench,高斯信道,误码统计,可设置SNR_quartus 帧同步 仿真图-CSDN博客

基础上,增加了217卷积编码,维特比译码(不使用编译码IP核),从而提升系统性能。

vivado2022.2测试

设置SNR=15db

设置SNR=6db

设置SNR=3db

系统RTL结构图如下图所示:

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

整体系统结构如下所示(其中解调部分为软解调算法实现)

3.1 16QAM调制软解调原理

       16QAM是用两路独立的正交4ASK信号叠加而成,4ASK是用多电平信号去键控载波而得到的信号。它是2ASK调制的推广,和2ASK相比,这种调制的优点在于信息传输速率高。正交幅度调制是利用多进制振幅键控(MASK)和正交载波调制相结合产生的。16进制的正交振幅调制是一种振幅相位联合键控信号。16QAM的产生有2种方法:

(1)正交调幅法,它是有2路正交的四电平振幅键控信号叠加而成;

(2)复合相移法:它是用2路独立的四相位移相键控信号叠加而成。

这里采用正交调幅法。       

       数字信号是通过FPGA的输出端口生成的。在16QAM调制中,每个符号包含4个比特,因此需要一个4位二进制计数器来生成数字信号。计数器的输出被映射到星座图上的一个点,然后通过数字到模拟转换器(DAC)转换为模拟信号。串/并变换器将速率为Rb的二进制码元序列分为两路,速率为Rb/2.2-4电平变换为Rb/2的二进制码元序列变成速率为RS=Rb/log216的4个电平信号,4电平信号与正交载波相乘,完成正交调制,两路信号叠加后产生 16QAM信号.在两路速率为Rb/2 的二进制码元序列中,经 2-4电平变换器输出为4电平信号,即M=16.经4电平正交幅度调制和叠加后,输出16个信号状态,即16QAM.

      16QAM信号采取正交相干解调的方法解调,解调器首先对收到的16QAM 信号进行正交相干解调,一路与cosωct 相乘,一路与sinωct相乘。然后经过低通滤波器,低通滤波器LPF滤除乘法器产生的高频分量,获得有用信号,低通滤波器LPF输出经抽样判决可恢复出电平信号。

       16QAM软解调是一种常用的数字调制解调技术,用于将接收到的16QAM调制的信号转换为原始数据。该技术结合了16种相位和振幅的调制方式,通过软判决算法对接收信号进行解调,16QAM软解调的系统原理是将接收到的16QAM调制信号转换为软判决结果,从而恢复原始数据。软解调是一种非硬判决的解调方法,它利用接收信号的采样值和相位信息来判断信号所处的调制状态,并对其进行解调。在16QAM软解调中,接收信号经过采样后,通过比较采样值和16个调制点的距离,选择最近的调制点作为解调结果。

       16QAM调制将每四个比特映射到一个复数点上,共有16种相位和振幅的调制方式。每个复数点对应一个调制符号,通过软解调,我们可以确定接收到的信号所对应的调制符号,进而推导出原始数据。

3.2 帧同步

       在数字通信中,信息通常是以帧为单位进行组织和传输的。帧同步的目的是确定每一帧的起始位置,以便接收端能够正确地解调出每帧中的数据。

       设发送的帧结构为:帧同步码 + 信息码元序列 。帧同步码是具有特定规律的码序列,用于接收端识别帧的起始。

       帧同步的过程就是在接收序列中寻找与帧同步码匹配的位置,一旦找到匹配位置,就确定了帧的起始位置,后续的码元就可以按照帧结构进行正确的划分和处理。

3.3 卷积编码,维特比译码

        卷积编码是一种前向纠错编码方式,特别适用于无线通信和其他信道条件恶劣的应用场景。它主要通过卷积算子将信息序列映射成冗余度更高的码字序列。典型的卷积编码器由两个移位寄存器和一个加法器构成,遵循一定的生成多项式进行编码。

       设信息序列是 u(n),卷积编码器的两个生成多项式为 G1​(D) 和 G2​(D),则编码输出v(n) 可以表示为:

v(n)=u(n)G1​(D)+u(n−1)G2​(D)+…

此处D 是延迟算子,实际表达形式取决于具体选择的生成多项式阶数及系数。

       维特比译码是用于最大似然序列估计的一种动态规划算法,广泛应用于卷积编码以及其他序列编码的译码过程中。在卷积编码中,维特比译码器通过构造一棵称为“状态转移图”或“trellis”的树状结构来寻找最有可能的原始信息序列路径。

4.Verilog程序接口

 
module TOPS_16QAM(
input i_clk,
input i_clkdx,
input i_clkd2x,
input i_rst,
input signed[7:0]i_SNR,
input[1:0]i_en,
input i_dat,
//卷积编码
output [1:0]o_enc,
output      o_encs,output [3:0]o_ISET,
output  signed[15:0]o_I16QAM,
output  signed[15:0]o_Q16QAM,
output signed[15:0]o_I16QAMs,
output signed[15:0]o_Q16QAMs,
output signed[31:0]o_mod_T,
output signed[15:0]o_Nmod_T,output  signed[31:0]o_modc_R,
output  signed[31:0]o_mods_R,
output signed[31:0]o_Ifir_R,
output signed[31:0]o_Qfir_R,
output  [3:0]o_wbits,
output       o_bits,
output [1:0]o_bits_head,
output [7:0]o_peak,
output  o_en_data,
output  o_en_pn,
output  o_frame_start,
output o_dec_enable, 
output o_dec, 
output signed[31:0]o_error_num,
output signed[31:0]o_total_num  
);

5.参考文献

[1]向劲松,陈怀柔.QAM调制下基于卷积码与累加编码调制级联的纠错码性能研究[J].半导体光电, 2023(6):924-930.

6.完整算法代码文件获得

完整程序见博客首页左侧或者打开本文底部

V

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

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

相关文章

Python数据分析基础(二)

一、Numpy 常用函数分类概览函数类别常用函数基本数学函数np.sum(x)、np.sqrt(x)、np.exp(x)、np.log(x)、np.sin(x)、np.abs(x)、np.power(a, b)、np.round(x, n) 等统计函数np.mean(x)、np.median(x)、np.std(x)、np.var(x)、np.min(x)、np.max(x)、np.percentile(x, q) 等比…

Colab中如何临时使用udocker(以MinIO为例)

本文主要是想记录一下自己在Colab中用udocker启动一个MinIO的容器的过程。 1. 命令行配置环境 由于目前没有用到GPU,所以我选择的是CPU的环境。(内存12G)然后就可以在命令行里安装udocker了,并配置minio的环境 # 由于minio需要做两个端口映射&#xff0c…

rt-thread 5.2.1 基于at-start-f437开发过程记录

基于rt-thread 5.2.1 bsp/at/at32f437-start进行开发,记录详细过程,包括中间遇到的各种坑。 at32f437-start原理图 自己设计的电路板主要换了一块小封装的同系列芯片, 目标是移植opENer。 1. 开发环境 env长时间不用,有点忘了。这次新下载…

EMCCD相机与电可调变焦透镜的同步控制系统设计与实现

EMCCD相机与电可调变焦透镜的同步控制系统设计与实现 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家,觉得好请收藏。点击跳转到网站。 摘要 本文详细介绍了基于Python的EMCCD相机&#xff0…

前缀和-560.和为k的子数组-力扣(LeetCode)

一、题目解析1.子数组是数组中元素的连续非空序列2.nums[i]范围为[-1000,1000],存在负数3.由于2的题目条件,该题不能用双指针算法,不具备单调性 二、算法原理解法1:暴力解法->枚举 O(N^2)固定一个值,向后枚举数组和…

解决企业微信收集表没有图片、文件组件,不能收集图片的问题

问题: 企业微信里面的收集表功能,有一个图片收集的收集表,但是插入的组件没有收集图片的组件? 原因: 大概率是微盘未启用 解决方法: 1、登陆企业微信管理后台 企业微信 2、访问微盘页面,…

认识单片机

《认识单片机》课程内容 一、课程导入 在我们的日常生活中,有很多看似普通却充满智慧的小物件。比如家里的智能电饭煲,它能精准地控制煮饭的时间和温度,让米饭煮得香喷喷的;还有楼道里的声控灯,当有人走过发出声音时&a…

数据结构(2)顺序表算法题

一、移除元素1、题目描述2、算法分析 思路1:查找val值对应的下标pos,执行删除pos位置数据的操作。该方法时间复杂度为O(n^2),因此不建议使用。思路2:创建新数组(空间大小与原数组一致&#xff0…

汽车电子架构

本文试图从Analog Devices官网中的汽车解决方案视角带读者构建起汽车电子的总体架构图,为国内热爱和从事汽车电子行业的伙伴们贡献一份力量。 一 、汽车电子架构总览 整个汽车电子包括四个部分:车身电子(Body Electronics)、座舱与…

pycharm 2025 专业版下载安装教程【附安装包】

安装之前,请确保已经关闭所有安全软件(如杀毒软件、防火墙等)安装包 👇链接:https://pan.xunlei.com/s/VOU-5_L1KOH5j3zDaaCh-Z28A1# 提取码:6bjy下载 PyCharm2025专业版 安装包 并 进行解压运行 pycharm-2…

在 Java 世界里让对象“旅行”:序列化与反序列化

Java 生态里关于 JSON 的序列化与反序列化(以下简称“序列化”)是一个久经考验的话题,却常因框架繁多、配置琐碎而让初学者望而却步。本文将围绕一段极简的 JsonUtils 工具类展开,以 FastJSON 与 Jackson 两大主流实现为例&#x…

High Speed SelectIO Wizard ip使用记录

本次实验的目的是通过VU9P开发板的6个TG接口,采用固定连接的方式,即X和X-维度互联,其框图如下所示:IP参数配置通过调用High Speed SelectIO Wizard来实现数据通路,High Speed SelectIO Wizard ip有24对数据通道&#x…

Execel文档批量替换标签实现方案

问题背景需求:俺现网班级作为维度,批量导出每个班级学员的数据,excel的个数在1k左右,每一张表的人数在90左右。导出总耗时在10小时左右。代码编写完成并导出现网数据后,发现导出的标题错了。解决方案1.通过修改代码&am…

SpringBoot配置多数据源多数据库

Springboot支持配置多数据源。默认情况,在yml文件中只会配置一个数据库。如果涉及到操作多个数据库的情况,在同实例中(即同一个ip地址下的不同数据库),可以采用数据库名点数据库表的方式,实现跨库表的操作。…

Rocky9.4部署Zabbix7

一、配置安装源 rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-7.0-5.el9.noarch.rpm ​ yum clean all 二、安装Zabbix server,Web前端,agent yum install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf z…

【Java】对象类型转换(ClassCastException)异常:从底层原理到架构级防御,老司机的实战经验

在开发中,ClassCastException(类转换异常)就像一颗隐藏的定时炸弹,常常在代码运行到类型转换逻辑时突然爆发。线上排查问题时,这类异常往往因为类型关系复杂而难以定位。多数开发者习惯于在转换前加个instanceof判断就…

探路者:用 AI 面试加速人才集结,为户外爱好者带来更专业的服务

作为深耕户外用品领域的知名品牌,探路者已构建起覆盖全国的销售服务网络,上千品种的产品矩阵更是为品牌在市场中站稳脚跟提供了有力支撑。对探路者来说,要持续为户外爱好者带来专业且贴心的体验,专业人才是核心支撑。然而&#xf…

LeetCode——面试题 05.01 插入

通过万岁!!! 题目:一共会给四个数,分别是N、M、i、j,然后希望我们把N和M抓怒换为2进制以后,将M的二进制放在i到j之间的区域,如果M的二进制长度小于i-j1,则前面补0即可。最…

前端设计中如何在鼠标悬浮时同步修改块内样式

虽然只是一个小问题,但这个解决问题的过程也深化了自己对盒子模型的理解问题缘起正在写一个登录注册的小窗口,想要在鼠标悬浮阶段让按钮和文字都变色,但是发现实操的时候按钮和文字没办法同时变色鼠标悬停前鼠标悬停后问题分析仔细分析了下该…

航空发动机高速旋转件的非接触式信号传输系统

航空发动机是飞机动力系统的核心,各种关键部件如涡轮、压气机等,经常处于极端高温、高速旋转的工作环境中。航空发动机内的传感器数据,如何能够稳定可靠的通过无线的方式传输到检测太,一直是业内的一个难点和痛点。在这个领域&…