基于MATLAB的CVSD语音编解码仿真系统
项目简介
本项目是一个基于MATLAB环境开发的数字通信仿真系统,专注于实现连续可变斜率增量调制(CVSD, Continuously Variable Slope Delta Modulation)算法。项目完整构建了从信号生成、过采样预处理、CVSD编码、比特流传输模拟、CVSD解码到最终信号重建与评估的全链路仿真。
该系统通过模拟模拟信号的数字化过程,展示了CVSD算法如何利用自适应量化步长来解决传统增量调制中的斜率过载(Slope Overload)和颗粒噪声(Granular Noise)问题,适用于语音编码教学、算法研究及通信系统原理验证。
功能特性
- 多源信号支持:系统能够自动检测并加载外部WAV格式语音文件,若文件不存在,则自动生成由基波和谐波组成的标准正弦测试信号。
- 过采样处理:实现了信号的插值与过采样(默认为8倍过采样),将原始音频频率(如8kHz)提升至CVSD编码工作频率(如64kHz)。
- 自适应步长控制:基于“三连码”检测逻辑(连1或连0),动态调整量化步长,模拟音节滤波器的充放电过程。
- 有损积分器模型:在编解码回路中引入了泄漏系数,模拟实际硬件电路中有损积分器的特性,增强了系统的鲁棒性。
- 无相位延迟滤波:解码端采用零相位数字低通滤波器进行波形平滑,消除量化噪声并保证输入输出波形的时间对齐。
- 多维度性能评估:自动计算量化信噪比(SNR),并提供时域波形、频率谱线及步长变化曲线的可视化分析。
系统要求
- MATLAB R2016b 或更高版本
- Signal Processing Toolbox(信号处理工具箱):用于
resample(重采样)、butter(滤波器设计)、filtfilt(零相位滤波)及 periodogram(功率谱密度计算)等函数。
使用方法
- 确保MATLAB当前工作路径包含主脚本文件。
- (可选)将待测试的单声道WAV语音文件命名为
speech.wav 放置在同一目录下。 - 直接运行主函数。
- 脚本运行结束后,命令行窗口将输出原始采样率、编码速率及信噪比(SNR),并弹出图形窗口展示仿真结果。
算法实现与核心逻辑
本项目在一个独立的
main 函数中实现了完整的处理流程,代码逻辑严格遵循CVSD原理,具体实现细节如下:
1. 信号源生成与预处理
- 加载与合成:程序优先尝试读取
speech.wav,读取后会强制转换为单声道并使用 resample 函数重采样至设定的基准采样率(如8000Hz)。若无文件,则合成包含基频(500Hz)和二次谐波的正弦波信号。 - 归一化:为了统一量化标准,输入信号会被归一化到参考电压(V_ref)范围内。
- 插值过采样:利用低通插值滤波器将信号采样率提升L倍(代码中L=8),生成高采样率信号
x_up,以满足增量调制对高采样率的要求。
2. CVSD 编码器实现
编码器部分通过循环逐样本处理高采样率信号,其内部核心包含以下模块:
- 比较器:比较当前输入样本与本地预测值(积分器输出)。若输入大于预测值,输出逻辑“1”;否则输出逻辑“0”(计算中使用-1)。
- 三连码检测(Coincidence Detection):系统通过检测当前输出比特与前两个历史比特是否完全相同(即连续3个1或连续3个0)来判断信号斜率状态。
- 自适应步长控制:
* 若检测到三连码(表示发生斜率过载),当前量化步长会在旧步长基础上乘以衰减系数
beta 并加上增益
gain,实现步长的快速增加。
* 若未检测到三连码(表示处于平稳区),步长仅乘以衰减系数
beta,实现指数衰减。
* 步长值被严格限制在设定的最小步长
delta_min 和最大步长
delta_max 之间。
- 本地解码(反馈回路):使用有损积分器更新预测值。新的预测值等于旧预测值乘以泄漏系数
alpha 加上当前比特符号与步长的乘积。该结构模拟了RC积分电路的充放电特性。
3. CVSD 解码器实现
解码器完全独立于编码器,仅接收编码生成的比特流
encoded_bits。其内部逻辑与编码器的反馈回路完全一致:
- 同步步长调整:利用接收到的比特流进行相同的三连码检测逻辑,并使用完全相同的参数(
beta, gain, 极值限制)重建量化步长序列。 - 信号重建:利用重建的步长和比特符号,通过同样的有损积分算法(含泄漏系数
alpha)恢复出阶梯波形 decoded_raw。
4. 后处理与恢复
- 低通滤波:设计了一个6阶巴特沃斯(Butterworth)低通滤波器。为了消除滤波带来的相位延迟,代码使用了
filtfilt 函数进行零相位滤波,这使得解码信号能与原始信号在时域上完美对齐。 - 降采样:将滤波后的信号通过
downsample 函数抽取回原始的基准采样率(8000Hz),得到最终的重建信号 x_rec。
5. 性能评估与可视化
- 信噪比计算:通过计算原始信号与重建信号差值的能量比,得出以dB为单位的量化信噪比(SNR)。
- 图形展示:
*
时域对比:在同一坐标系下绘制原始模拟输入、解码前的阶梯波以及最终滤波后的重建信号,并截取局部时间段(10ms-30ms)以便观察细节。
*
步长变化:绘制随时间变化的自适应量化步长曲线,直观展示算法如何响应信号斜率的剧烈变化。
*
频域对比:利用周期图法(Periodogram)计算并对比原始信号和重建信号的功率谱密度(PSD),验证频域的一致性。