python计算短时自相关函数 音频信号_语音处理(python)
写在前面
本篇文章主要分以下三个部分讲述:
- wav语音的格式及其内容
- 语音的预处理
- 语音的特征及特征提取
语音的格式及其内容
首先了解以下wav文件的主要规范格式
注释
根据RIFF规范,对于一个wav格式的语音,一般含有以下的几个要素:

- 块标识符:块号
- 块大小:块大小参数
- 数据格式:格式设置
- 音频数据格式:音频格式类型
- 通道数量:通道数
- 采样频率:采样率值
- 字节传输速率:速率参数
Chunk是RIFF文件的基本单元,其基本结构如下:
struct
具体介绍可看:
RIFF和WAVE音频文件格式 - Brook_icv - 博客园www.cnblogs.com

你也可以使用C语音对wav音频进行简单的测试:
#include
语音的预处理
在深度学习中,语音的输入都是根据需要经过以下处理:
- 分帧和加窗
- 预加重
- 过零率
- 短时能量
以下采用问答的方式对上述几种语音处理方法进行概述,并介绍如何利用Python实现这些语音处理方法。
分帧&加窗(hamming窗)
Q:什么是分帧和加窗?
A:
分帧:CHUNK
时间窗口会对语音流进行分帧处理,并采用每15至45毫秒的时长区间(其中最常用的是25毫秒)作为基本单位;
相邻的两个窗格之间的位移量范围为每半到一整窗格长度之间,并且这一移动过程应保持平滑过渡。
加窗: 与一个窗函数相乘,以此进行傅立叶展开。
窗函数:一般具有低通特性,分成以下几种类型
- 矩形窗:该矩形窗具有主瓣宽度最小的特点,在旁瓣的高度上达到了最大值。
- 汉明窗:该汉明窗以其主瓣最宽而闻名,在旁瓣的高度上则达到了最小值。它不仅能够有效地抑制泄漏现象,并且在通带特性上表现得更为平滑。
Q:为什么要对语音进行分帧和加窗?
A:
- 分帧:
考虑到语音信号属于非平稳过程 传统用于平稳信号的处理技术不适合用于对其分析 但由于语音信号本身的特殊性 在10至30毫秒这一短暂的时间段内 其特性类似于准稳态状态 显现出短时特性
- 加窗:
对语音进行加窗主要有两个目的:
- 尽量减少突变点的数量,并非强制要求全局完全连续;
- 在加窗过程中,在没有明显周期性的原始语音信号(t)中提取出具有部分周期特性的信号特征。
吉布斯效应表现为对具有不连续点周期性函数(如矩形脉冲)进行傅里叶级数展开时所展现出的一种现象,在有限项次范围内叠加合成。随着选取项数量增加,在合成波形中出现的最大偏离程度逐渐趋近于原始信号不连续处;当所选取项数量极为庞大时,在叠加过程中产生的偏差会稳定在约总跳跃幅度9%的位置上。
Q:怎样进行分帧和加窗?
A:
# 分帧处理函数
预加重
Q:什么是预加重?
A:预加重即对语音的高频部分进行加重。
Q:为什么要对语音进行预加重处理?
A:为了去除口唇辐射的影响,增加语音的高频分辨率。
Q:怎样预加重?
A:一般采取一阶FIR高通数字滤波器来实现预加重,公式如下:
其中预加重系数a满足条件:0.9 < a < 1.0。设当前时刻的语音采样值为x(n),通过预加重处理得到的结果表达式为y(n)=x(n)-ax(n-1);其中取a=0.98
过零率
Q:什么是短时过零率?
A:短时过零率可以看作信号频率的简单度量
- 定义:在电路中实现稳定振荡的关键在于确保回环积分器能够持续输出正确的积分结果。
- 在数字电路设计中实现稳定的振荡器需要解决回环积分器中的不稳定问题。
Q:为什么要对过零短时语音进行处理?
A:受低频干扰较为明显的特性在于其短时过零率易受其影响,在计算过程中引入门限阈值以抑制低频噪声的影响。从理论上讲,在浊音状态下声能主要集中在较低频率区间内其短时过零率相对较低而在清音状态下声能则主要集中在较高频率区间内其短时过零率相对较高。
Q:如何计算过零率?
A:
# 计算每一帧的过零率
短时能量
Q:什么是短时能量?
A:语音的短时能量即每一帧语音包含的能量。
Q:为什么要计算短时能量?
采用短时能量分析方法能够有效去除高频环境噪声的影响。从它们的能量特征来看,在语音段与噪声段之间存在显著差异:在一般情况下,在同一时间段内声音信号对应的平均能量高于背景噪音对应的平均能量;当环境中的噪音以及系统的输入噪音相对较小的时候,则通过计算输入信号在不同时间窗口内的瞬时功率特性,则可以将这些时间窗口划分为属于语音的部分以及属于非语音的部分;此外,在实际应用中这类算法表现出良好的抗混响能力以及较好的去噪效果。
Q:如何计算短时能量?
A:
# 计算每一帧能量
总结:从计算角度分析,在相同采样窗口下, speech energy 和 zero crossing rate(ZCR)之间存在高度相关性。具体而言,在较高speech energy区域通常伴随较低的ZCR值,在较低speech energy区域则表现出较高的ZCR值。
语音的特征及其提取
- MFCC:Mel Frequency Cepstral Coefficents
Mel频谱分析遵循人类听觉感知实验的基础
- Fbank:FilterBank
人耳对声音频谱的反应是非线性的;Fbank作为一种前端处理算法,在模仿类似的人类听觉特性方面具有显著优势,并能在音频信号处理中实现较好的效果
- 语谱图:Spectrogram
语谱图中x轴代表时间,y轴代表频率,z轴代表幅度.为了直观显示,高幅度的部分通常使用明亮的色调如红色进行标注,而低幅度的部分则采用较暗的色调.通过语谱图可以观察特定频率区间内的能量分布情况.
MFCC和Fbank特征
from

MFCC

Fbank
结果:
MFCC:number of win= 291
MFCC:length of each feature= 13
Fbank:number of win= 291
Fbank:length of each feature= 26
语谱图
import

语谱图
比较几种特征
- MFCC特征提取是建立在F_{bank}基础之上的离散余弦变换过程。
- 从计算量的角度来看,M_{fcc}是建立在F_{bank}基础上的一种延伸。
- 特征区分度方面:F_{bank}特征间的关联程度较高,在此背景下M_{fcc}展现出更强的区分能力。这也是为何大多数语音识别论文倾向于选择M_{fcc}而非F_{bank}的原因。
Reference
[2016-04-21]speech-processing-for-machine-learning
[2019-01-05]python处理ASR(语音识别)
