语音信号汉明窗加窗与短时傅里叶变换分析系统
项目简介
本项目是一个基于 MATLAB 开发的专业语音信号处理系统,专注于通过短时傅里叶变换(STFT)和汉明窗技术对非平稳语音信号进行精确的时频域分析。系统集成了信号模拟生成、自动化预处理、动态分帧加窗、频谱变换以及多维度数据可视化功能。通过对时域信号进行分段处理并引入低旁瓣特性的汉明窗,本系统能够有效克服频谱泄露问题,从而在时频平面上清晰地刻画出语音信号的频率随时间演变的动态特性。
功能特性
- 信号模拟与自生成:系统内置复合语音模拟信号发生器,可生成包含频率调制(Chirp)成分、多频叠加成分及随机背景噪声的复杂非平稳信号,并自动导出为标准音频文件。
- 自动化预处理:支持音频文件的物理读取,具备单声道强制转换及最大赋值归一化功能,确保算法处理的幅值一致性。
- 动态分帧加窗:采用滑动窗口技术,可根据采样率动态计算窗长与重叠比例,并精准应用汉明窗以优化频谱分辨率。
- 全面频谱分析:不仅能够提取反映能量分布的幅值谱,还能完整保留反映时间同步特性的相位谱。
- 多维度高精可视化:系统生成包含时域波形图、三维彩色语谱图(dB 刻度)、单帧幅值响应曲线及单帧相位分布图。
- 处理状态实时汇报:通过控制台输出精确的采样频率、窗长、帧数及文件存取绝对路径等元数据。
使用方法
- 环境准备:确保已安装 MATLAB 运行环境。
- 运行分析:在 MATLAB 编辑器或命令行中直接运行主程序脚本。
- 参数反馈:程序运行后将自动在工作目录下生成模拟语音文件。
- 结果查看:脚本运行完毕后会弹出一项包含四个子图的可视化窗口,用户可通过控制台查看对应的处理参数报告。
- 结果分析:
- 左上图:观察信号随时间变化的振幅波动。
- 右上图:通过伪彩色云图识别共振峰及其随时间的频率偏移。
- 左下图:针对信号中段的特定帧进行精细的能量值(dB)分析。
- 右下图:分析特定时刻所有频率分量的相位分布。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 硬件要求:标准音频输出支持(用于验证文件读取)。
- 必要工具箱:MATLAB 基础数学工具箱(用于 FFT、绘图等)。
核心实现逻辑与算法分析
1. 信号生成与文件处理逻辑
系统利用时间向量生成一个时变信号,其数学模型结合了指数衰减项和线性调频项,模拟了真实语音发音时的能量变化与音调波动。程序通过获取当前工作目录的绝对路径来确保生成的音频文件存取安全可靠,避免了相对路径导致的读写失败。
2. 预处理与分帧策略
在读取信号后,系统执行归一化操作,将幅值映射至 [-1, 1] 区间。程序预设了 40ms 的分析窗长,这一长度能平衡语音信号的时域平衡性与频域精细度。采用 50% 的重叠率(Overlap)是为了确保在加窗后帧边缘的信息不会丢失,从而保持时间轴上的连续性。
3. 汉明窗(Hamming Window)算法实现
系统按照数学公式 $W(n) = 0.54 - 0.46 cdot cosleft(frac{2pi n}{M-1}right)$ 手动构建窗函数向量。相比于矩形窗,该算法通过余弦补偿有效压低了频域的主瓣宽度和旁瓣增益,显著减少了分帧造成的频谱泄露现象,使得语谱图中的共振峰更加集中。
4. 短时傅里叶变换(STFT)流程
程序通过循环遍历整个信号向量,对每一帧执行以下操作:
- 按步长选取信号片段。
- 执行逐元素向量乘法应用汉明窗。
- 调用快速傅里叶变换(FFT)算法计算 1024 点频谱。
- 提取单边谱(即 0 到 $Fs/2$ 频率部分),将复数结果存储于时频矩阵中。
5. 幅值与相位分离算法
系统对 STFT 产生的复数矩阵进行模运算获取幅值谱,并针对幅值进行 20*log10 对数转换以增强低能量区间的可见度。同时,利用相位角运算提取每一帧的相位信息,为研究信号的时间同步响应提供依据。
6. 数据可视化映射
利用三维网格绘图技术,将时间轴、频率轴与幅度能量(dB)进行映射。通过设置视图角度为垂直俯视,将三维表面投影为标准的彩色语谱图,使用不同的色调表示能量强弱,使语音的特征提取过程变得直观且科学。