基于MATLAB的Miller码基带传输仿真系统
项目介绍
本项目是一个基于MATLAB开发的数字通信仿真平台,专注于Miller码(也称为延迟调制码,Delay Modulation)的编译码机制及性能分析。系统构建了完整的数字基带传输链路,涵盖了从二进制信源生成、基带波形编码、加性高斯白噪声(AWGN)信道传输,到接收端解码与判决的全过程。该仿真系统不仅展示了Miller码的时域和频域特性,还通过蒙特卡洛仿真评估了其抗噪声性能。
功能特性
系统提供以下核心功能,所有设置均基于脚本中的参数配置:
- 通信链路仿真:实现了信源、编码器、AWGN信道和解码器的完整闭环。
- Miller编码实现:严格遵循Miller码编码规则,处理逻辑“1”、“0”及连续“0”的电平跳变。
- 时域波形可视化:能够直观展示原始比特流、编码后的基带信号以及经过噪声信道干扰后的接收波形。
- 频谱分析:采用Welch法估算并绘制Miller码的功率谱密度(PSD),展示其频谱特性。
- 眼图分析:绘制无噪和含噪环境下的眼图,帮助分析码间串扰和噪声对信号质量的影响,眼图周期设定为2个码元宽度。
- 误码率(BER)测试:在不同信噪比(SNR)条件下进行批量数据传输测试,计算并绘制误码率曲线。
系统要求
- MATLAB R2016a 或更高版本
- Signal Processing Toolbox(用于pwelch函数)
- Communications Toolbox(可选,用于辅助分析,核心功能已通过原生代码实现)
使用方法
直接运行主函数即可启动仿真。程序运行后将自动执行以下流程:
- 初始化系统参数(码元速率、采样率等)。
- 生成演示用的短序列及频谱分析用的长序列。
- 弹出一个综合图形窗口,显示时域波形对比、功率谱密度图和眼图。
- 在控制台输出误码率仿真的进度日志。
- 仿真结束后,弹出第二个图形窗口,显示误码率随信噪比变化的性能曲线。
核心算法与实现细节
本节详细说明代码中实际应用的逻辑和算法。
1. 参数配置
- 码元速率 (Rb): 2000 baud
- 采样频率 (Fs): 40000 Hz(过采样率为20)
- 信噪比范围: -6 dB 至 14 dB,步长为 2 dB
- 测试数据量: 演示波形使用20比特,BER测试使用20,000比特
2. Miller编码策略
编码器通过状态机逻辑实现,遵循以下规则将二进制流转换为双极性非归零波形:
- 逻辑 1:在码元持续时间的中间位置(即采样点的50%处)发生电平跳变(从正到负或从负到正)。
- 逻辑 0:码元中间不发生跳变。
- 连续逻辑 0:若当前比特为0且前一比特也为0,则在两个码元的交界处发生电平跳变。
- 状态保持:使用变量记录上一时刻的电平状态和前一个比特的值,确保波形的连续性。
3. 信道模型
采用加性高斯白噪声(AWGN)信道。
- 计算信号的平均功率。
- 根据设定的信噪比(SNR)值,反推所需的噪声功率。
- 利用标准正态分布随机数生成噪声叠加到原始信号上。注意,此处仿真简化处理,直接针对波形采样点添加噪声。
4. Miller解码判决
解码器采用基于半码元均值积的判决算法,原理如下:
- 将每个接收到的码元周期分为前半段和后半段。
- 分别计算前半段和后半段信号的平均值(以平滑噪声影响)。
- 计算这两段平均值的乘积作为判决度量(Metric)。
- 判决逻辑:
* 若乘积小于0(异号):说明码元中间发生了跳变,判决为逻辑
1。
* 若乘积大于等于0(同号):说明码元中间未发生跳变,判决为逻辑
0。
该方法利用了Miller码“1”必跳变、“0”中间不跳变的特性,相比单纯的过零检测具有更好的抗噪性。
5. 性能分析与可视化
- 功率谱密度 (PSD):使用
pwelch 函数对长序列Miller码进行谱估计,频率轴已归一化到码元速率,展示了其主要的能量集中在低频区域。 - 眼图:通过将长信号序列重塑(Reshape)为宽度为2倍码元周期的矩阵进行叠加绘制。演示了无噪(清晰)和20dB信噪比(模糊)两种情况下的眼图特征。
- 误码率 (BER):通过循环遍历预设的SNR范围,统计解码后的错误比特数。最终绘制半对数坐标系下的BER vs SNR曲线。
关键子函数说明
主流程
负责统筹参数定义、调用绘图模块、执行BER循环测试以及控制台日志输出。
miller_encode
输入二进制比特流、采样率和采样频率。内部通过循环遍历每个比特,根据Miller编码规则填充每一个码元周期内的采样点电平值,最终输出时间向量和幅度信号。
awgn_channel
输入纯净信号和信噪比。函数计算信号功率,根据公式生成对应强度的噪声向量,并将其叠加到输入信号上返回含噪信号。
miller_decode
输入接收到的基带信号和采样率。函数按码元周期步进,提取每个码内的采样点,分割为前后两半计算均值,利用乘积符号判断法恢复原始比特流。