DSP新手求教:harmonic(vocalized)与non(consonant)声音差异及Python STFT分析实现
语音谐波/非谐波识别与AR模型降噪作业落地指南
一、谐波(vocalized)与非谐波(consonant)语音的核心差异及典型示例
两类片段的核心区别完全来源于语音产生时的声源特性,具体差异如下:
- 时域特征:谐波段是周期/准周期信号,波形存在稳定重复的峰值间隔,对应声带规则振动产生的声源;非谐波段是非周期的随机信号,波形无固定重复规律,对应声带不振动时,气流经过声道狭窄位置产生的摩擦、爆破动作。
- 频域特征:谐波段做STFT变换后,能量集中在离散的、等于基频整数倍的谐波峰上,频谱呈现明显的梳状结构;非谐波段的频谱是连续宽带分布,无离散的谐波峰,仅存在被声道共振峰塑造的连续能量凸起,整体形态接近带通滤波后的噪声。
- 感知特征:谐波段是带明确音调的浊音,非谐波段是无固定音调的清音。
典型示例:
- 谐波段:普通话韵母(a/o/e/i/u/ü的发音段)、鼻音(m/n/ng)、边音(l)、带声带振动的浊辅音(如r)
- 非谐波段:清辅音的摩擦/爆破段(b/p/f/d/t/g/k/s/x/h)、语音中的呼吸声、爆破声片段
二、作业必备前置知识储备
不需要一开始就啃完所有信号处理教材,聚焦作业涉及的模块准备即可:
- 语音信号基础常识:掌握音频采样率、时域波形、频谱的基本对应关系,理解“声源-声道”的语音产生简化模型逻辑
- STFT核心原理:理清窗长选择的时域/频域分辨率 tradeoff(长窗频域分辨率高、时域分辨率差,短窗反之),明确STFT输出的时频矩阵的维度含义
- 两类信号的可分性特征:掌握能从STFT结果中区分谐波/非谐波的常用特征(如频谱平坦度、谐波能量占比、基频可检测性)
- AR模型基础:理解线性预测分析(LPC)的核心逻辑——AR模型本质是用过去若干采样值的线性组合预测当前采样值,明确模型参数估计的基本流程,以及AR模型对应声道频率响应的物理意义
- Python音频处理基础工具:能使用
librosa完成音频读写、STFT计算、特征提取,使用scipy.signal完成信号滤波,使用matplotlib绘制时域波形、语谱图做结果校验
三、作业全流程实现思路
按照从基础到进阶的步骤推进即可,每一步都可以做可视化校验,避免最后结果不符合预期:
1. 数据加载与基础预处理
- 选一段3-10秒的清晰单声道语音文件(推荐16kHz采样率,是语音分析的通用采样率),先做简单的端点检测,去掉开头、结尾的纯静音段
- 计算全段信号的STFT:采用语音分析的通用参数(25ms汉明窗,10ms帧移),输出时频矩阵、对应的时间轴、频率轴,绘制语谱图确认STFT计算无偏差
2. 谐波/非谐波片段的识别分割
- 逐帧计算两类判别特征:
- 频谱平坦度(SFM):单帧内频谱值的几何平均与算术平均的比值,值越接近1代表频谱越平坦、越接近噪声特性,值越接近0代表频谱存在集中的能量峰、谐波特征越强
- 谐波能量占比:逐帧在80-400Hz的常见人声基频范围内搜索,计算基频整数倍频率位置的能量占整帧总能量的比例,占比超过设定阈值的帧判定为谐波帧
- 对逐帧的判定结果做3-5帧长度的中值平滑,去掉孤立的误判帧,把连续的同类型帧拼接为完整的谐波、非谐波片段,标记两类片段的时间边界
- 可视化校验:把标记的时间边界叠加在语谱图上,对比实际听感确认边界位置和浊音/清音的实际位置匹配,调整判定阈值直到识别结果符合主观认知
3. 非谐波片段的AR模型降噪
- 对每一段识别出的非谐波片段,选择合适的AR模型阶数(16kHz采样率下一般取10-16阶即可匹配语音的声道特性)
- 用LPC方法逐段估计AR模型参数:把非谐波段信号建模为“声道线性系统的输出 + 叠加的随机噪声”,估计得到的AR模型传递函数对应这段辅音经过声道时的频率响应
- 基于估计的AR模型完成降噪:将非谐波信号做AR逆滤波,滤除和声道频率响应不匹配的随机噪声分量,再将滤波后的信号通过原AR模型的正向传递函数,还原辅音本身的共振峰轮廓
4. 结果整合与校验
- 把处理后的非谐波段、原始未改动的谐波段,按照原语音的时间顺序拼接为完整的处理后音频
- 主观听感校验:确认拼接后的语音没有明显的割裂感,原始语音的语义完全可识别
- 客观对比:观察处理前后非谐波段的语谱图,确认随机宽带噪声的能量被有效降低,同时辅音本身的发音特征没有被过度模糊
内容的提问来源于stack exchange,提问作者NoProg
相关产品推荐
相关产品推荐

