基于MATLAB的语音信号线性预测编码(LPC)分析与合成系统
项目介绍
这是一个基于MATLAB开发的语音信号处理仿真项目,主要演示了线性预测编码(Linear Predictive Coding, LPC)这一经典语音压缩与合成算法的核心原理。该系统不单纯依赖现成的音频文件,而是内置了信号生成模块,能够模拟产生带有谐波结构的元音信号。
通过该项目,用户可以直观地观察到语音信号从产生、预处理、特征提取(LPC系数计算)、残差获取、再到合成重建的完整信号链路。代码采用模块化编写,并在最后提供了丰富的可视化图表,用于对比分析原始信号与合成信号的时域波形及频谱特性,非常适合用于语音信号处理的教学演示及算法研究。
主要功能特性
- 模拟信号生成:内置合成器,通过基频及其谐波叠加、包络调制和噪声注入,模拟生成类似元音/a/的语音信号,无需外部音频文件即可运行。
- 完整的LPC链路:涵盖了预加重、分帧加窗、自相关计算、Levinson-Durbin递归求解、残差计算、全极点滤波合成、去加重等标准流程。
- 自定义算法实现:核心的Levinson-Durbin算法为手动实现,未调用黑盒函数,便于学习递归求解LPC系数的数学细节。
- 重叠相加(OLA)重建:在合成阶段实现了加窗后的重叠相加及权重归一化处理,保证了帧间过渡的平滑性。
- 多维度可视化:提供时域波形对比、预测残差展示、频谱包络分析以及LPC系数随时间演变的系数图。
系统要求
- MATLAB R2016a 或更高版本
- 无需特殊工具箱(代码尽量使用了基础函数,但建议安装Signal Processing Toolbox以获得最佳兼容性)
使用方法
- 下载本项目代码。
- 在MATLAB中打开脚本所在的文件夹。
- 直接运行
main 函数。 - 程序运行结束后,将自动弹出包含四个子图的分析窗口,并在当前目录下生成
orig_signal.wav(原始模拟信号)和 synth_lpc.wav(LPC合成信号)。
功能详解与实现逻辑
本项目的主程序 main 严格按照语音处理的流水线进行设计,具体步骤如下:
1. 信号生成与模拟
程序首先设置采样率(8kHz)和时长参数,通过叠加20次谐波(基频120Hz)并添加幅度包络和微量白噪声,生成一个模拟人类发音的元音信号。这确保了包含清晰的共振峰结构,便于LPC算法捕捉。
2. 预处理 (Pre-processing)
为了补偿语音信号随频率增加而衰减的特性,系统利用一阶高通滤波器(系数为0.97)对原始信号进行预加重。此步骤有助于提升高频分辨率,使LPC分析更加准确。
3. 分帧与加窗 (Framing & Windowing)
为了满足语音信号“短时平稳”的假设,系统将连续信号切割为长度为30ms、帧移为15ms的短帧。每一帧均乘以汉明窗(Hamming Window),以减少由于帧边缘截断产生的频谱泄漏。
4. LPC分析与特征提取
这是系统的核心部分,对每一帧信号执行以下操作:
- 自相关计算:计算加窗信号的自相关函数。
- Levinson-Durbin算法:利用子函数
my_levinson_durbin,基于自相关数据递归求解10阶线性预测系数(LPC Coefficients)、反射系数以及预测误差功率。该算法高效地解出了Yule-Walker方程。 - 残差计算:使用计算出的LPC系数构建逆滤波器(全零点滤波器),对当前帧进行滤波,得到预测残差(Prediction Residual)。在本项目中,残差被保留用作“完美激励源”,以实现高质量的波形重建。
5. 语音合成 (Synthesis)
利用源-滤波器模型(Source-Filter Model)进行语音重建:
- 激励源:使用上一步计算得到的残差信号。
- 合成滤波:利用LPC系数构建全极点滤波器(IIR),模拟声道的共振特性。将激励源输入该滤波器,得到合成后的语音帧。
- 二次加窗:为了配合后续的重叠相加步骤,对合成帧再次施加汉明窗。
6. 重叠相加 (Overlap-Add)
系统初始化一个全零的重建信号数组和权重数组。将处理好的合成帧按照帧移位置累加到重建数组中,同时累加窗口权重。最后,将重建信号除以权重数组,消除因窗口重叠导致的幅度调制,恢复连续的语音波形。
7. 后处理 (Post-processing)
对重建后的信号进行去加重处理(预加重的逆过程),恢复语音信号原本的频谱倾斜度,并进行幅度归一化,最终输出合成音频。
8. 结果可视化
程序最后绘制一个综合图表,包含以下内容:
- 时域波形对比:展示原始信号与LPC合成信号的波形,验证重建的准确性。
- 预测残差信号:展示去除声道相关性后的激励信号,近似于白噪声或脉冲序列。
- 频谱包络分析:选取中间一帧,对比原始信号的FFT频谱与LPC全极点模型的频率响应,展示LPC如何拟合频谱包络。
- LPC系数演变图:以图像形式展示所有帧的LPC系数变化情况,反映声道形状随时间的演变(由于模拟的是稳态元音,系数变化较小)。