基于MATLAB的语音信号预加重与去加重处理系统
项目简介
本项目构建了一个专业的语音信号处理仿真平台,专注于语音信号处理流程中关键的预加重(Pre-emphasis)与去加重(De-emphasis)环节。系统旨在解决语音信号在发声过程中因声门气流脉冲导致的高频衰减问题。通过预加重提升高频分量,改善信噪比;通过去加重恢复原始信号特性。本项目完全基于MATLAB编写,集成了从信号模拟生成、滤波处理到全方位可视化分析的完整流水线。
功能特性
本项目代码实现了以下核心功能:
- 模拟语音信号生成:不依赖外部录音,通过算法自动合成具有真实语音频谱特征(基频及其谐波、高频衰减特性)的模拟信号,并叠加环境底噪。
- 一阶FIR预加重处理:采用一阶有限脉冲响应高通滤波器,有效提升信号高频部分,补偿频谱倾斜。
- IIR去加重还原:采用无限脉冲响应低通滤波器作为预加重的逆过程,将经过传输或处理后的信号还原为自然听感。
- 多维度可视化分析:在一个集成窗口中展示3x3的分析矩阵,涵盖时域波形、频域幅度谱(dB)以及时频语谱图(Spectrogram)。
- 量化评估:自动计算高频增益提升量以及信号还原后的均方误差(MSE),验证系统性能。
- 音频文件输出:自动将处理后的预加重语音和去加重语音保存为标准WAV音频文件。
系统要求
- MATLAB R2016a 或更高版本
- Signal Processing Toolbox(信号处理工具箱,用于spectrogram、filter等函数)
技术原理与代码实现细节
本项目核心脚本 main.m 的实现逻辑如下:
1. 系统参数配置与信号源构建
代码首先定义了核心处理参数,预加重系数 $mu$ 设定为
0.97,采样率设定为 16kHz。
为了模拟真实的语音输入,系统并没有直接读取外部文件,而是通过算法生成模拟信号:
- 基频设定:设定基频 $F_0$ 为 150Hz。
- 谐波合成:根据采样率计算谐波数量,利用正弦波叠加生成类声门波。
- 高频衰减模拟:模拟真实人声每倍频程-6dB的衰减特性,幅度按照 $1/k^{1.2}$ 的规律随频率增加而降低。
- 噪声添加:叠加微量高斯白噪声模拟环境底噪。
- I/O模拟:为了符合文件输入接口的要求,代码将合成信号写入临时WAV文件并重新读取。
2. 预加重处理 (Pre-emphasis)
系统使用一阶FIR高通滤波器对输入信号进行处理。
- 传递函数:$H(z) = 1 - mu z^{-1}$
- 实现方式:利用MATLAB的
filter 函数,分子系数 $b = [1, -mu]$,分母系数 $a = 1$。 - 效果:增强高频部分的幅度,使信号频谱变得更加平坦,便于后续处理。
3. 去加重处理 (De-emphasis)
系统使用IIR低通滤波器对预加重后的信号进行复原。
- 传递函数:$H(z) = 1 / (1 - mu z^{-1})$
- 实现方式:利用MATLAB的
filter 函数,分子系数 $b = 1$,分母系数 $a = [1, -mu]$。 - 效果:恢复信号原本的频谱包络,确保输出语音听感自然。
4. 信号分析算法
代码内部实现了FFT频谱分析流程:
- 计算N点FFT(取2的次幂),将双边谱转换为单边谱。
- 对幅度谱进行对数变换,转换为dB单位,并添加微小量
eps 防止对数计算错误。 - 利用
spectrogram 函数,使用汉宁窗(Hann window)生成时频图。
可视化与结果分析
程序运行结束后会生成一个包含9个子图的全屏分析窗口,布局逻辑如下:
第一行:原始语音信号
- 时域:展示前1000个采样点的波形。
- 频域:展示原始信号的幅度谱,并自动标注频谱峰值。
- 语谱图:展示原始信号随时间变化的频率成分分布。
第二行:预加重语音信号
- 时域:展示高频增强后的波形变化。
- 频域:展示预加重后的幅度谱。代码自动计算并标注了3kHz以上高频频段的平均增益提升量(dB),量化展示预加重效果。
- 语谱图:颜色分布直观反映出高频能量的显著增强。
第三行:去加重(复原)语音信号
- 时域:展示复原后的波形。
- 频域:同时绘制去加重信号频谱(实线)与原始信号频谱(虚线),便于直观对比还原程度。图中会显示计算出的重建均方误差 (MSE),数值越小代表还原度越高。
- 语谱图:展示恢复后的时频特征。
输出文件说明
程序运行完成后,将在当前目录下生成以下文件:
- speech_pre_emphasized.wav:经过预加重处理的音频文件。
- speech_de_emphasized.wav:经过去加重还原的音频文件。
- *(注:程序运行过程中生成的临时输入文件会在结束后自动清理删除)*
使用方法
- 将项目代码保存为
main.m。 - 在MATLAB命令行窗口中输入
main 并回车,或直接点击运行按钮。 - 程序将自动执行信号生成与处理全流程,弹出可视化窗口,并在控制台打印预加重系数和MSE误差值。