星座图重排 HARQ 与 Chase 合并性能对比仿真系统
项目介绍
本项目构建了一个完整的无线通信链路仿真平台,专注于研究和对比在高阶调制(16QAM)环境下,两种混合自动重传请求(HARQ)机制的性能差异:
- 星座图重排 (Constellation Rearrangement, CoRe)
- Chase 合并 (Chase Combining, CC)
在 16QAM 等高阶调制中,由于星座点的几何分布特性,不同的比特位具有不同的错误保护能力(高可靠性与低可靠性位置)。本项目利用 MATLAB 对链路进行蒙特卡洛仿真,验证了 CoRe 策略通过在重传时改变比特到星座点的映射规则,平均化比特错误概率,从而相比传统的 Chase 合并技术获得显著的性能增益。
功能特性
- 完整的通信链路仿真:涵盖随机信号生成、CRC校验、信道编码、调制、AWGN信道、软解调、HARQ合并、信道译码及误码统计。
- 高阶调制支持:系统基于 16QAM 调制方案,模拟了非均匀星座点保护特性的环境。
- 双 HARQ 策略对比:
*
Chase Combining (CC):重传完全相同的符号,接收端进行最大比合并(LLR 累加)。
*
CoRe HARQ:重传时轮询使用预定义的 4 种不同星座映射表,优化 LLR 可靠性。
- 信道编码:采用码率为 1/2 的卷积编码(K=7),配合 Viterbi 译码器。
- 多维性能评估:通过统计误比特率 (BER)、误块率 (BLER) 和系统有效吞吐量 (Throughput) 来全方位评估系统性能。
- 可视化展示:自动生成 BER、BLER 和吞吐量随 SNR 变化的对比曲线图。
系统要求
- MATLAB R2016b 或更高版本
- Communications Toolbox(通信工具箱)- 用于 CRC 生成、卷积编解码及 trellis 结构定义。
使用方法
- 启动 MATLAB 并将工作目录切换到项目文件夹。
- 在命令行窗口输入
main 或点击运行按钮执行主函数。 - 程序将依次仿真预设的 SNR 点(0dB 至 16dB),并在控制台实时输出每个信噪比下的 CC 和 CoRe 的统计结果。
- 仿真结束后,系统将弹出一个绘图窗口,分别展示 BER、BLER 和吞吐量的对比曲线。
代码分析与实现细节
本项目的核心逻辑封装在 main.m 文件中,以下是基于实际代码内容的详细分析:
1. 系统参数配置
系统首先初始化关键参数:
- 调制方式:16QAM (M=16),每符号携带 4 比特。
- 信道编码:使用
poly2trellis(7, [171 133]) 定义的卷积码,回溯长度设为 35。 - 数据结构:每帧数据包包含 500 个信息比特,使用 LTE CRC24A 多项式进行校验。
- 仿真规模:每个 SNR 点仿真 1000 帧,最大 HARQ 传输次数设为 4 次。
2. 星座映射生成 (generate_core_mappings)
该功能模块负责预生成 4 种互补的星座映射表。
- 首先构建基准的 Gray 码星座图,确保不同比特位的平均功率归一化。
- 为 Chase 合并生成固定的映射表(策略 1)。
- 为 CoRe 生成变化的映射表,通过循环移位或逻辑变换改变比特在星座点中的映射位置,使得在多次传输中,原始数据比特能轮流映射到高保护位和低保护位。
3. 主仿真循环
代码采用双层循环结构:外层遍历 SNR 范围,内层进行 1000 次蒙特卡洛帧迭代。
#### 发射机公共链路
- 信源:生成随机二进制序列。
- CRC 附加:通过
comm.CRCGenerator 添加 24 位校验码。 - 编码:使用
convenc 进行卷积编码。 - 补零:为了匹配 16QAM 的符号边界(4比特/符号),对编码后的比特流进行必要的补零操作。
#### 分支一:Chase Combining (CC) 流程
- 在最大传输次数内循环。
- 映射:始终使用第一张映射表。
- 信道:添加高斯白噪声(根据 SNR 计算 sigma)。
- 合并:接收端计算当前帧的 LLR,并直接累加到
llr_buffer_cc 缓冲区中。 - 译码与校验:对累加后的 LLR 进行 Viterbi 译码 (
vitdec),并进行 CRC 校验。如果校验通过则提前终止重传(ACK),否则继续重传直到达到最大次数。
#### 分支二:Constellation Rearrangement (CoRe) 流程
- 在最大传输次数内循环。
- 映射:根据传输次数
tx_cnt 动态选择映射表(索引为 mod(tx_cnt - 1, 4) + 1),实现星座图重排。 - 信道:添加独立的高斯白噪声。
- 软解调:根据当前传输使用的特定映射表计算 LLR。这是 CoRe 的核心,解调器必须知道当前次传输使用的是哪种重排规则。
- 合并:将新计算的 LLR 累加到
llr_buffer_core。由于映射规则的互补性,累加后的 LLR 质量优于单纯的能量累加。 - 译码与校验:同 CC 流程,使用 Viterbi 译码和 CRC 校验判断是否成功。
4. 性能指标计算
- 误比特率 (BER):统计解码后的信息位与原始发送位的差异,除以总传输信息位。当数据包最终校验失败时,代码逻辑仍会计算该错误包的误比特数。
- 误块率 (BLER):统计最终校验失败的数据包数量除以总仿真包数。
- 吞吐量 (Throughput):计算公式为
Packet_Length / Average_Transmissions。代码通过统计总的传输次数(含重传)来计算平均每包所需的传输次数,从而得出归一化的吞吐量指标。
5. 结果可视化
利用
subplot 生成三个子图:
- BER 对比:展示 CoRe 相比 CC 在误码率上的下降趋势。
- BLER 对比:展示 CoRe 在减少丢包率方面的优势。
- 吞吐量对比:直观反映在不同 SNR 下,CoRe 如何通过减少重传次数来提高系统有效速率。