PCM脉冲编码调制仿真系统
项目简介
本项目是一个基于MATLAB开发的脉冲编码调制(PCM)仿真平台。该系统旨在模拟和分析模拟信号数字化的全过程,重点对比了
均匀量化与
A率非均匀量化(ITU-T G.711标准)在不同信号强度下的性能表现。通过构建包含大振幅和小振幅的混合测试信号,本项目直观地展示了非均匀量化在提升小信号信噪比方面的优势。
主要功能特性
- 混合测试信号生成:自动生成包含标准全幅值(1V)和微弱幅值(0.05V)的正弦波混合信号,用于全方位测试量化系统的动态范围。
- 8位均匀量化:实现标准的线性量化算法,将模拟电压映射为256个离散电平。
- A率非均匀量化:依据ITU-T A-law公式(A=87.6)实现压缩与扩展算法,模拟电话语音编码标准。
- 二进制编码演示:将量化后的电平索引转换为8位二进制码流,直观展示编码结果。
- 多维性能评估:
* 计算量化误差(Error)和量化信噪比(SQNR)。
*
分段信噪比分析:自动检测并对比大信号段与小信号段的信噪比差异。
- 综合可视化界面:提供包含6个子图的综合分析窗口,涵盖波形对比、细节放大、误差分布、压缩曲线及信噪比统计。
系统要求
- MATLAB R2016a 及以上版本
- 无需额外工具箱(仅使用基础信号处理功能)
代码逻辑与功能详解
本项目的核心逻辑封装在 main.m 脚本中,主要执行流程如下:
1. 参数初始化与信号生成
系统首先定义了仿真参数,包括采样率(8000Hz)、量化位数(8位)、A率参数(87.6)等。
为了通过一次仿真同时观察编码方式对不同强度信号的影响,代码构建了一个
拼接信号:
- 前半段:幅值为1.0的标准正弦波(大信号)。
- 后半段:幅值为0.05的微弱正弦波(小信号,仅为满量程的5%)。
这使得后续的性能分析能够明确区分两种量化方式在不同信道条件下的表现。
2. 均匀量化实现机制
由函数
perform_uniform_quantization 实现。
- 映射逻辑:将[-1, 1]范围的信号通过归一化和平移操作,映射到 [0, 256] 的区间。
- 量化过程:使用
floor 向下取整获得量化索引(0-255),并进行边界钳位防止溢出。 - 信号重构:利用量化间隔的中点(Index + 0.5)进行电平恢复,计算出重构信号与原始信号的差值作为量化误差。
- 信噪比:基于全段信号功率与误差功率计算全局SQNR。
3. A率非均匀量化实现机制
由函数
perform_alaw_quantization 实现,模拟了包含“压缩-量化-扩展”的完整过程。
- 压缩(Compress):在模拟域对信号进行非线性变换。代码严格按照A率公式实现:
* 小信号区间(|x| < 1/A):采用线性放大,提升小信号幅度。
* 大信号区间(|x| ≥ 1/A):采用对数压缩,压制大信号幅度。
- 中间量化:对压缩后的信号(已归一化且幅度分布更均匀)进行标准的均匀量化。
- 扩展(Expand):解码端执行压缩的逆运算,恢复信号的原始动态范围。此步骤对应于常见的“13折线法”的数学解析式实现。
4. 性能评估与可视化
由函数
visualize_results 负责生成综合分析图表,具体包含:
- 波形对比:在同一坐标轴下绘制原始信号、均匀量化信号和A率量化信号,宏观展示拟合效果。
- 细节放大(微观分析):自动截取后半段(小信号区域)进行放大。此处能清晰看到均匀量化因步长过大导致的严重阶梯状失真,以及A率量化较好的波形还原度。
- 误差波形:展示量化误差随时间的变化,直观反映出均匀量化在大信号段表现尚可,但在小信号段误差相对占比极高。
- 压缩特性曲线:绘制输入幅值 vs 输出幅值的映射曲线,验证A率算法的正确性。
- 误差统计直方图:对比两种方法的误差分布集中度。
- 分段信噪比对比(关键特性):代码将结果数据切分为“大信号段”和“小信号段”,分别计算并绘制柱状图。能够直观地证明:虽然在大信号段两者差异不大,但在小信号段,A率量化的信噪比显著高于均匀量化。
使用方法
- 在MATLAB环境中打开包含
main.m 的文件夹。 - 直接运行
main 函数。 - 命令行窗口将输出:
* 系统初始化参数。
* 前5个采样点的归一化数值及对应的两种8位二进制编码。
* 全局信噪比数据。
- 系统将弹出一个图形窗口,展示上述的6项可视化分析结果。