MatlabCode

本站所有资源均为高质量资源,各种姿势下载。

您现在的位置是:MatlabCode > 资源下载 > 一般算法 > 3GPP标准咬尾卷积码编解码与性能仿真系统

3GPP标准咬尾卷积码编解码与性能仿真系统

资 源 简 介

本项目完整实现了3GPP LTE及5G标准控制信道中定义的咬尾卷积码(Tail-biting Convolutional Codes, TBCC)的编解码功能链。程序首先包含符合3GPP协议规范(如TS 36.212)的编码器,采用约束长度为7、码率为1/3的生成多项式(八进制133, 171, 165),通过预先计算初始状态实现编码器的“咬尾”特性,即保证编码结束时的寄存器状态与初始状态一致,从而消除传统卷积码需要的归零尾比特,提高编码效率。解码部分实现了针对循环网格图的高级维特比译码算法,具体包括循环维特比算法(CVA)或回溯维特比算法(WAVA)。解码器能够处理循环格型结构,通过多次迭代或扩展网格来恢复最可能的路径,支持软判决输入以提升译码性能。此外,项目构建了完整的通信链路仿真环境,包含BPSK/QPSK调制、加性高斯白噪声(AWGN)信道模型以及瑞利衰落信道模型。系统最终输出误比特率(BER)和误帧率(FER)随信噪比(SNR)变化的性能曲线,用于评估算法在不同信道条件下的可靠性,验证其是否满足3GPP标准的性能指标要求。

详 情 说 明

3GPP标准咬尾卷积码 (TBCC) 编解码与性能仿真系统

项目介绍

本项目是一个基于MATLAB的通信链路仿真系统,专注于实现3GPP LTE及5G标准控制信道中定义的咬尾卷积码(Tail-biting Convolutional Codes, TBCC)。系统完整构建了从信源生成、信道编码、调制、通过AWGN信道到软判决译码及误码统计的通信全过程。

核心亮点在于实现了一种符合3GPP TS 36.212规范的编码器,以及基于循环维特比算法(WAVA, Wrap-Around Viterbi Algorithm)的高性能解码器。该系统旨在评估在低信噪比环境下,TBCC算法的误比特率(BER)和误帧率(FER)性能。

功能特性

  • 3GPP标准遵从:严格按照TS 36.212协议定义,使用约束长度K=7,码率R=1/3的生成多项式(八进制133, 171, 165)。
  • 咬尾编码机制:实现了由数据末尾状态初始化寄存器的“咬尾”特性,确保编码起始状态与结束状态一致,消除了传统卷积码的零尾比特开销。
  • WAVA循环译码:采用回溯维特比算法(WAVA),支持对循环网格图进行多次迭代(默认3次),显著提升短帧传输的译码可靠性。
  • 软判决处理:解码器直接处理来自信道的浮点软信息,而非硬判决比特,最大限度利用信道信息。
  • 性能可视化:自动生成Eb/N0 vs BER/FER的半对数性能曲线图,直观展示系统在不同信噪比下的表现。

系统要求

  • MATLAB R2016a 或更高版本
  • 不需要额外的工具箱(代码通过基础数学运算实现,未依赖Communications Toolbox的高级封装函数,便于算法原理研究)。

使用方法

直接运行主脚本 main 即可启动仿真。程序将依次执行以下步骤:

  1. 初始化系统参数和网格图结构。
  2. 在设定的信噪比范围(0-7 dB)内进行循环仿真。
  3. 实时打印每个信噪比点下的BER、FER及已仿真帧数。
  4. 仿真结束后,弹出图形窗口显示性能曲线。

main.m 实现逻辑详解

主程序实现了完整的蒙特卡洛仿真流程,具体逻辑如下:

1. 参数配置与初始化

  • 信道编码参数:设定每帧信息比特为100位,约束长度为7(记忆深度6),码率为1/3。
  • 生成多项式:定义了八进制多项式 [133, 171, 165],并通过 init_trellis 函数将其转换为二进制系数,构建用于查表的网格图结构(即状态转移表和输出表)。
  • 仿真控制:设定信噪比范围为0至7dB,为了保证统计结果的置信度,设置了“最小错误帧数(50帧)”和“最大仿真帧数(100,000帧)”的双重循环终止条件。

2. 仿真主循环

程序对每一个Eb/N0点进行独立仿真,核心步骤包括:
  • 噪声功率计算:根据公式 $sigma = sqrt{1 / (2 cdot R cdot 10^{SNR_{dB}/10})}$ 计算BPSK调制下实数信道的噪声标准差。
  • 信源生成:利用 randi 产生均匀分布的二进制随机序列。
  • 信道编码:调用咬尾编码函数,利用网格结构将信息比特映射为编码比特。
  • 调制:执行BPSK调制,将二进制0映射为+1,1映射为-1。
  • AWGN信道:向发送信号叠加均值为0、方差为 $sigma^2$ 的高斯白噪声。
  • 信道译码:调用WAVA解码算法,输入含噪接收信号和网格结构,经过主要设定的3次迭代后输出判决比特。
  • 误码统计:对比原始比特与译码比特,累计误比特数和误帧数。

3. 下一代状态与输出计算逻辑

在初始化网格图时:
  • 程序将八进制多项式转换为二进制数组,精确对应移位寄存器的抽头系数。
  • 通过遍历所有可能的寄存器状态($2^6=64$种)和输入(0或1),预先计算出所有可能的“下一状态”和“编码输出”。
  • 严格遵循3GPP定义的移位寄存器操作:输入位进入最低位(LSB),原状态左移(或根据具体实现定义的右移逻辑,代码中通过位运算实现状态迁移)。

4. 结果输出与绘图

  • 控制台实时输出表格化的仿真进度数据。
  • 使用 semilogy 绘制误比特率(BER)和误帧率(FER)随信噪比变化的对数曲线,包含网格线和图例,便于学术分析。

关键算法与函数说明

init_trellis (网格初始化)

此函数负责构建卷积码的网格图(Trellis)。它将八进制的生成多项式解析为二进制系数,并遍历所有$2^m$个状态。对于每一个状态和每一个可能的输入比特,计算出寄存器通过模2运算后的输出比特,以及寄存器移位后的下一个状态。这些预计算的查找表被用于后续的高速编码和译码。

tbcc_encode (咬尾编码)

*注意:代码片段显示了该函数的调用。* 该函数实现了咬尾机制的核心逻辑:不仅是进行卷积运算,更重要的是在编码开始前,根据数据末尾的$m$个比特来初始化移位寄存器的状态。这保证了编码器在处理完所有数据后,最终回到与起始相同的状态,形成了逻辑上的“环”。

wava_decode (WAVA译码)

*注意:代码片段显示了该函数的调用。* 这是系统的核心解码引擎。它并未采用标准的Viterbi算法(VA),而是采用了Wrap-Around Viterbi Algorithm。由于TBCC的起始状态和结束状态是未知的(但相等的),标准VA无法直接确定幸存路径的起点。WAVA通过将接收到的观察序列在逻辑上首尾相接,在网格图上进行多次循环迭代(本系统设置为3次)。随着迭代次数增加,各状态的路径度量值逐渐收敛,从而以极高的概率找到全局最优路径。它利用软输入(Soft Input)直接计算分支度量(Branch Metrics),相比硬判决译码有约2dB的性能增益。