16-QAM 基带传输系统全链路 MATLAB 仿真
项目介绍
本项目是一个基于 MATLAB 构建的 16-QAM(16阶正交幅度调制)数字通信系统基带仿真模型。该仿真涵盖了从信源生成、脉冲成型、信道传输(含多径衰落与高斯白噪声)、匹配滤波、LMS 信道均衡到最终解调判决的全过程。项目旨在验证 16-QAM 调制技术在非理想信道下的性能,并通过蒙特卡洛仿真绘制误码率(BER)曲线,对比理论值与仿真值,同时直观展示星座图、眼图及均衡器收敛过程。
功能特性
- 全链路基带仿真:实现了完整的发端、信道、收端处理流程。
- 高阶调制:采用 16-QAM 调制方式,每符号携带 4 比特信息,使用 Gray 码映射以降低误比特率。
- 脉冲成型与匹配滤波:使用根升余弦(RRC)滤波器限制带宽并最大化信噪比,支持自定义滚降系数。
- 复杂信道模拟:不仅包含加性高斯白噪声(AWGN),还模拟了多径衰落信道(ISI),用于验证接收端的抗干扰能力。
- 自适应均衡:集成了 LMS(最小均方)自适应均衡器,用于在接收端补偿多径效应引起的码间干扰。
- 全面的性能分析:自动计算不同 SNR 下的误码率,并生成包含 BER 曲线、星座图对比、LMS 误差收敛曲线及眼图的综合分析图表。
系统要求
- MATLAB R2016a 或更高版本。
- 推荐安装 Communication Toolbox(用于方便的进制转换函数
bi2de,若无该工具箱代码中也预留了手动转换逻辑)。
详细实现逻辑
本项目的主程序 main.m 严格按照模块化设计,主要包含以下处理步骤:
1. 参数初始化
设置系统关键参数,包括调制阶数(M=16)、仿真符号数(10000)、过采样率(sps=4)、RRC 滤波器滚降系数(0.25)以及信噪比范围(0-20dB)。特别定义了多径信道冲击响应
h_channel = [1, 0.2+0.1j, 0.05],用于测试均衡器性能。
2. 发射机设计
- 信源生成:利用
randi 生成均匀分布的随机二进制比特流。 - 16-QAM 调制:调用内部函数,将二进制数据映射为复数符号。实现逻辑基于 4-PAM 的 Gray 码映射原理,分别处理 I 路和 Q 路数据。
- 发射滤波:首先对符号进行上采样(插值),然后通过生成的根升余弦滤波器进行脉冲成型,以限制信号频带。
3. 信道模型
- 多径效应:将发射信号与预设的多径信道冲击响应进行卷积,引入码间干扰(ISI)。
- 噪声添加:根据设定的 Eb/N0 计算噪声功率。代码中严格考虑了过采样率(sps)对噪声带宽的影响,通过公式
noiseVar = sigPower / es_n0_lin * sps 准确计算噪声方差,并叠加复高斯白噪声。
4. 接收机处理
- 匹配滤波:接收端使用与发射端相同的根升余弦滤波器进行滤波,以最大化信噪比。
- 下采样(抽样):根据滤波器延迟和过采样率提取最佳采样点,恢复符号速率信号。
- LMS 信道均衡:调用
lms_equalizer_func 对下采样后的信号进行处理。利用训练序列训练均衡器抽头系数,消除多径信道带来的失真。 - 数据截取:去除训练序列及滤波器边缘效应带来的不稳定数据段,提取有效的评估数据。
- 解调与判决:将均衡后的复数符号逆映射回比特流,并统计误码数。
5. 性能评估与可视化
- 误码率计算:通过比对发送比特与接收判决比特计算仿真 BER,并利用标准公式计算 AWGN 信道下的理论 BER 作为参考基准。
- 可视化输出:仿真结束后生成含有 6 个子图的综合窗口:
1.
BER 曲线:理论值(红线)与仿真值(蓝线圈)对比。
2.
发射星座图:展示标准的 16-QAM 星座分布。
3.
均衡前接收星座图:因多径和噪声导致的星座点发散与旋转。
4.
均衡后信号星座图:展示经过 LMS 均衡后星座点的明显收敛。
5.
LMS 收敛曲线:展示误差随迭代次数下降的趋势(dB)。
6.
眼图:基于匹配滤波后的实部信号绘制,评估信号质量和 ISI 情况。
关键算法与函数说明
主流程函数
- main():程序的入口,控制整个蒙特卡洛仿真循环,管理 SNR 扫描、数据收集和最终绘图。
辅助子函数
- gen_rrc_filter(beta, sps, span):
* 手工实现了根升余弦滤波器的脉冲响应公式。
* 处理了
t=0 和
t = 1/(4*beta) 等特殊点的数值计算问题,防止分母为零。
* 包含能量归一化处理,确保滤波器增益为 1。
* 实现了自定义的映射逻辑。
* 将输入比特流重塑为 4 比特一组。
* 将高 2 位和低 2 位分别作为 I 路和 Q 路的控制位。
* 调用 PAM4 Gray 映射逻辑生成复数符号。
- lms_equalizer_func(外部调用):
* 虽然具体代码未在主文件中完全展开,但主流程显式调用了该函数进行基于 LMS 算法的自适应滤波。
* 主流程调用此函数将复数符号解调回二进制流。
使用方法
- 确保 MATLAB 工作路径中包含
main.m 及所有依赖函数(如 lms_equalizer_func 和 qam16_demod 的实现文件)。 - 直接运行
main 函数。 - 控制台将实时输出当前信噪比(SNR)下的仿真误码率与理论误码率对比。
- 运行结束后,系统将自动弹出可视化结果窗口。
注意事项
- 仿真中的信道包含多径干扰,因此低信噪比下的仿真误码率可能会高于仅考虑 AWGN 的理论值,这属于正常现象。
- LMS 均衡器的性能依赖于步长 (
lms_step_size) 和训练序列长度,代码中已预设为 0.005 和 2000,可根据需要调整。