语音信号处理与分析系统
项目介绍
本项目是一个基于 MATLAB 开发环境构建的集成化语音信号可视化处理平台。系统通过编写 M 文件(非 App Designer)构建图形用户界面(GUI),提供了一个直观的操作环境,用于完成语音信号的采集、频域分析、数字滤波处理以及结果验证。
该系统核心旨在简化数字信号处理流程,允许用户通过简单的参数配置,直观地观察滤波器对语音信号时域波形和频域频谱的影响,非常适合用于理解数字滤波器设计(FIR/IIR)及语音去噪等应用场景。
功能特性
- 全交互式 GUI 界面:采用单一窗口设计,左侧为参数控制面板,右侧为四象限绘图区域,操作逻辑清晰。
- 多源信号获取:
* 支持加载本地 WAV 格式音频文件,自动将立体声转换为单声道处理。
* 内置录音功能,支持通过计算机麦克风进行实时语音采集(默认采样率 8000Hz)。
* 实时绘制信号的时域波形图。
* 通过快速傅里叶变换(FFT)计算并绘制信号的频域幅度谱。
*
滤波器类型:支持 FIR 滤波器(基于窗函数法)和 IIR 滤波器(Butterworth 类型)。
*
滤波模式:提供低通(Lowpass)、高通(Highpass)、带通(Bandpass)和带阻(Bandstop)四种模式。
*
参数自定义:支持用户自定义截止频率(F1, F2)和滤波器阶数(N)。
* 同屏显示滤波前后的时域和频域对比图。
* 提供音频播放功能,可分别试听原始语音和处理后的语音。
* 独立的语谱图(Spectrogram)分析窗口,用于观察信号频率随时间的变化。
系统要求
- MATLAB R2016a 或更高版本(建议)。
- Signal Processing Toolbox(必须,用于
butter, fir1, filtfilt 等函数)。 - 计算机需配备声卡及麦克风(若需使用录音功能)。
代码实现与逻辑分析
本项目的核心逻辑集中在 main.m 文件中,采用了编程式 GUI 开发方式。以下是代码的具体实现细节分析:
1. 全局数据管理
系统使用全局变量
global audio_data 来在不同的回调函数之间共享数据。该结构体存储了:
- 原始音频数据及其采样率。
- 滤波处理后的音频数据。
- 录音对象(audiorecorder)和播放对象。
2. 界面构建与布局
主函数通过
figure 和
uicontrol 函数构建界面:
- 布局管理:界面被严格划分为控制区和绘图区。
- 控件交互:使用了
popupmenu(下拉菜单)选择滤波器类型,并且实现了动态交互逻辑——当选择带通或带阻模式时,通过 cb_update_ui_state 回调函数自动启用第二个截止频率(F2)的输入框,否则将其禁用。
3. 信号获取逻辑
- 文件加载:使用
uigetfile 获取文件路径,利用 audioread 读取数据。代码中包含容错处理,若输入为多声道信号,会自动计算均值转换为单声道信号。 - 录音功能:利用
audiorecorder 对象实现。点击按钮开始录音时创建对象并调用 record;再次点击停止时调用 stop 和 getaudiodata 提取数据。录音默认配置为 8000Hz 采样率、16位深度、单声道。
4. 滤波器核心算法
这是系统的核心部分,位于
cb_apply_filter 函数中:
- 参数校验:在执行前,代码会检查是否已加载数据,并验证输入的频率是否符合奈奎斯特采样定理(即截止频率必须小于采样率的一半)。
- 归一化频率:将用户输入的赫兹(Hz)频率转换为 MATLAB 滤波器函数所需的归一化频率(0 ~ 1.0)。
- FIR 滤波器实现:
* 使用
fir1 函数设计滤波器系数
b。
* 使用
filter 函数对信号进行线性滤波。
* 使用
butter 函数设计巴特沃斯滤波器系数
b 和
a。
*
关键处理:代码使用了
filtfilt 函数而不是普通的
filter。
filtfilt 执行零相位数字滤波(即正向滤波后再反向滤波),这在信号处理分析中至关重要,因为它能避免滤波器带来的相位延迟和波形失真。
5. 结果可视化与输出
- 绘图:系统预留了四个坐标轴句柄,分别用于通过自定义的绘图辅助函数显示原始信号和滤波后信号的时域/频域特性。
- 音频输出:使用 MATLAB 内置的
sound 函数实现音频回放。 - 语谱图:通过
spectrogram 函数(在辅助窗口逻辑中)计算并绘制时频图,帮助用户从时频联合域的角度观察滤波效果。
使用方法
- 启动程序:在 MATLAB 命令行中运行
main 即可启动 GUI 界面。 - 加载信号:
* 点击“加载WAV文件”选择本地音频。
* 或者点击“开始录音”,对麦克风说话,再次点击按钮完成录音。
- 设置滤波器参数:
* 在面板区域 2 选择滤波器类型(FIR 或 IIR)。
* 选择滤波模式(如“低通”)。
* 输入截止频率(F1)和阶数(N)。如果是带通/带阻,还需输入 F2。
- 执行处理:点击“执行滤波处理”按钮。观察右侧绘图区的波形和频谱变化。
- 验证结果:
* 点击“播放原始语音”和“播放滤波语音”对比听感。
* 点击“显示语谱图对比”查看详细的时频分析结果。