【仿真测试】基于FPGA的完整DQPSK通信链路实现,含频偏锁定,帧同步,定时点,Viterbi译码,信道,误码统计

目录

1.引言

2.算法仿真效果

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

[3.1 217卷积编码/维特比译码](#3.1 217卷积编码/维特比译码)

[3.2 差分QPSK映射/逆映射](#3.2 差分QPSK映射/逆映射)

[3.3 上变频/下变频](#3.3 上变频/下变频)

[3.4 基于PN导频和cordic的频偏锁定](#3.4 基于PN导频和cordic的频偏锁定)

[3.5 基于相关峰的定时点提取](#3.5 基于相关峰的定时点提取)

[3.6 帧同步](#3.6 帧同步)

[3.7 采样判决](#3.7 采样判决)

4.Verilog核心接口

5.参考文献

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


1.引言

基于FPGA的完整DQPSK通信链路实现,含频偏锁定,帧同步,定时点,Viterbi译码,信道,误码统计。系统包括DQPSK调制模块,DQPSK解调模块,217卷积编码模块,维特比译码模块,AWGN信道模块,误码统计模块,数据源模块,基于PN序列和cordic算法的频偏估计和补偿模块,基于PN相关峰提取的帧同步和定时点提取模块等。

2.算法仿真效果

本系统是在

《【仿真测试】基于FPGA的完整QPSK通信链路实现,含频偏锁定,帧同步,定时点,Viterbi译码,信道,误码统计》

基础上,增加了差分编码和差分译码,使得QPSK变为DQPSK。

vivado2022.2测试

设置SNR=15db

设置SNR=8db

设置SNR=2db

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

整体系统结构如下所示:

3.1 217卷积编码/维特比译码

217卷积码由生成多项式定义,常见的生成多项式为G1 = 111,G2 = 101,这里的数字表示二进制形式的多项式系数。

卷积编码器:编码过程通过卷积编码器完成,它包含多个滞后寄存器和可编程加法器。输入数据依次通过滞后寄存器,然后按照生成多项式的规则,与滞后数据进行模 2 加法运算,从而生成编码输出。

编码率:217卷积码通常以"2/7"编码率工作,即每2个输入比特会产生7个编码比特,增加了数据的冗余度,使接收端能够检测和纠正传输过程中出现的错误。

维特比译码是一种针对卷积码的最大似然译码算法。它根据接收信号和已知的卷积码生成多项式,在所有可能的发送序列中,通过计算路径度量(如汉明距离等),选择一条最有可能的发送序列作为译码结果,从而纠正传输过程中由于噪声等因素引起的错误,恢复出原始的输入数据。

3.2 差分QPSK映射/逆映射

QPSK(正交相移键控)是一种数字通信调制技术,通过改变载波信号的相位来传输信息。它将输入的二进制比特流每两个比特分为一组,共有4种组合:00、01、11、10。这4种组合分别对应载波的4个相位状态,通常为0°、90°、180°、270°。在复平面上,可以用复数来表示这些相位状态,如00映射为exp (1i * 0)=1,01映射为exp(1i * π/2)=j,11映射为exp (1i * π)=-1,10映射为exp(1i * 3π/2)=-j,从而实现每符号传输 2 比特信息的高效传输。

DQPSK是QPSK(四相相移键控)的变体,它通过差分编码处理信号,利用相邻码元之间的相对相位变化来表示二进制数据流,而不是依赖于绝对相位值,这样可以有效对抗相位失真的影响。在DQPSK中,每个符号代表两个比特,有四种可能的相位变化,通常为 0、π/2、π、3π/2 或 ±π/4、±3π/4。

差分编码的步骤:对两路并行比特流进行差分编码,将绝对码转换为相对码。设差分编码后的两路信号为cn ​和dn ​ ,它们与前一时刻的cn−1和dn−1 ​ 以及当前的an和bn 有关。

差分解码的步骤:对相干解调得到的同相和正交两路信号进行差分解码,恢复出原始的相对码。通过比较当前码元与前一码元的相位差,根据相位差的取值范围确定原始的比特信息。

3.3 上变频/下变频

将基带信号的频谱频移到所需要的较高载波频率上的过程。原理是把要变频的信号和一个固定频率的本振信号送入一个非线性器件(混频器),得到两个频率相加和相减的频率,然后通过滤波器取出上边带信号,完成上变频,实现将基带信号调制到高频载波上进行传输。

下变频是上变频的逆过程,即将接收到的高频信号的频谱下移到较低的频率上,通常是中频或基带频率。同样通过与本地振荡器产生的正弦信号进行混频,然后取混频之后的下边带信号(或经过进一步处理得到基带信号),以便后续进行信号的解调等处理。

3.4 基于PN导频和cordic的频偏锁定

发送端在发送数据帧时附加已知的伪随机(PN)导频序列,接收端利用PN导频序列来估计信号的频偏。接收端将接收到的导频数据做延迟和共轭相乘,然后根据其实部和虚部使用CORDIC 算法进行迭代旋转操作,从而估计出信号的相位偏移,进而得到频偏值。最后通过将接收信号与一个相反的复数指数函数相乘,实现对接收信号的频偏补偿,将频偏锁定到零。

3.5 基于相关峰的定时点提取

在接收信号中,通过寻找与本地已知序列(如训练序列或导频序列)的相关峰来确定定时点。具体来说,将接收信号与本地序列进行相关运算,当两者的相位和时间对齐时,相关值会出现峰值,这个峰值点对应的位置就是最佳的定时点,用于确定信号的采样时刻,以保证后续信号处理的准确性。

3.6 帧同步

在数字通信中,信息通常是以帧为单位进行组织和传输的。帧同步的目的是确定每一帧的起始位置,以便接收端能够正确地解调出每帧中的数据。设发送的帧结构为:帧同步码 + 信息码元序列 。帧同步码是具有特定规律的码序列,用于接收端识别帧的起始。帧同步的过程就是在接收序列中寻找与帧同步码匹配的位置,一旦找到匹配位置,就确定了帧的起始位置,后续的码元就可以按照帧结构进行正确的划分和处理。

3.7 采样判决

在确定了定时点后,对接收信号进行采样,将采样值与预设的判决门限进行比较,根据比较结果确定接收信号的电平值,从而恢复出原始的二进制比特流。例如,在QPSK信号中,根据采样点在复平面上的位置与各个相位状态的对应关系,判决出发送的是哪两个比特。

4.Verilog核心接口

整个程序构架如下:

复制代码
// 模块定义:QPSK调制解调顶层模块,整合编码、调制、信道、解调、译码及误码率计算功能
// Module Definition: QPSK Modulation-Demodulation Top Module, integrating encoding, modulation, channel, demodulation, decoding and BER calculation
 
module QPSK_tops(
input i_clk,// 主时钟信号(Main clock signal)
input i_clkdx,
input i_clkd2x,
input i_rst, // 复位信号(高有效)(Reset signal, active high)
input signed[1:0]i_en,// 使能信号(2位,控制各模块工作使能)(Enable signal, 2-bit to control module operation)
input            i_bits,// 输入原始二进制数据(Input original binary data)
input signed[7:0]i_SNR,// 信噪比控制信号(7位有符号数,范围0~30)(SNR control signal, 7-bit signed, range 0~30)
// 卷积编码输出(2位并行输出)(Convolutional encoding output, 2-bit parallel)
output [1:0]o_enc,
// QPSK调制后I路FIR滤波输出(15位有符号)(QPSK modulated I-channel FIR filter output, 15-bit signed)
output signed[15:0]o_Ifir,
// QPSK调制后Q路FIR滤波输出(15位有符号)(QPSK modulated Q-channel FIR filter output, 15-bit signed)
output signed[15:0]o_Qfir,
 // 加入噪声后的调制信号(15位有符号)(Modulated signal with added noise, 15-bit signed)
output signed[15:0]o_Nmod_T,
// 解调后I路FIR滤波输出(31位有符号)(Demodulated I-channel FIR filter output, 31-bit signed)
output signed[31:0]o_rIfir,
// 解调后Q路FIR滤波输出(31位有符号)(Demodulated Q-channel FIR filter output, 31-bit signed)
output signed[31:0]o_rQfir,
 // 解调相位信息(31位有符号)(Demodulated phase information, 31-bit signed)
output signed[31:0]o_phase,
// 解调后I路基带信号(11位有符号)(Demodulated I-channel baseband signal, 11-bit signed)
output signed[11:0]o_Ibase,
// 解调后Q路基带信号(11位有符号)(Demodulated Q-channel baseband signal, 11-bit signed)
output signed[11:0]o_Qbase,
// 信号峰值检测结果(31位有符号)(Signal peak detection result, 31-bit signed)
output signed[31:0]o_all_peak,
// 帧起始标志(高有效)(Frame start flag, active high)
output           o_frame_start,
 // 解调后I路数据比特(Demodulated I-channel data bit)
output  o_Ibits_data,
// 解调后Q路数据比特(Demodulated Q-channel data bit)
output  o_Qbits_data,
// 解调数据使能信号(Demodulated data enable signal)
output  o_en_data,
 // 维特比译码输出(Viterbi decoding output)
output  o_dec,
// 译码使能信号(Decoding enable signal)
output  o_dec_enable,
output signed[31:0]o_error_num,// 误码计数(31位有符号)(Error bit count, 31-bit signed)
output signed[31:0]o_total_num  // 总数据比特计数(31位有符号)(Total data bit count, 31-bit signed)  
);
0sj3_005m

5.参考文献

1罗常青,安建平,沈业兵.采用(2,1,7)卷积码+QPSK的中频调制解调系统的FPGA实现J.电子技术应用, 2005, 31(10):3.DOI:10.3969/j.issn.0258-7998.2005.10.027.

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

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

V

(V关注后回复码:X94)

相关推荐
仲南音16 小时前
Xilinx FPGA——时钟IP核MMCM、PLL
fpga开发
I'm a winner1 天前
基于Xilinx FPGA的LVDS高速串行通信系统(三)--数据训练及握手机制【文末源码】
fpga开发
upper20201 天前
coremark移植坑之-nostartfiles -nostdlib参数
学习·fpga开发·coremark移植·riscv设计
Eloudy2 天前
Vivado 纯命令行构建 FPGA 项目教程
fpga开发
Rambo.xia2 天前
AXI跨时钟域与数据一致性——CDC FIFO深度不够、写后读冒险、多Master仲裁、乱序返回,出了Bug根本查不出来
fpga开发·bug
upper20202 天前
FPGA部署卷积神经网络识别MINST图片
fpga开发·卷积神经网络·minst·minst识别·部署神经网络·神经网络识别图片
你是我的解忧王子2 天前
嵌入式 ADC采样 原始数据分析上层(平均值 波动率 正态分布 线性补偿 系统误差)
fpga开发·数据挖掘·数据分析
9527华安3 天前
FPGA纯verilog代码ISP图像处理培训教程,基于IMX214,提供工程源码+视频教程+FPGA开发板
图像处理·fpga开发·isp·imx214·mipi
千寻xun3 天前
二、实战篇-NVME SSD控制之ZYNQ实现(六)-读写NVME SSD硬盘数据
fpga开发·nvme·nvme ssd
千寻xun3 天前
二、实战篇-NVME SSD控制之ZYNQ实现(三)
fpga开发·nvme ssd·nvme协议