分帧,加窗和DFT

我们知道语音信号特性是随时间变化的,是一个非平稳随机过程。但是,从另一方面来看,语音虽然具有时变的性质,在短时间内其特性可以视为是稳定的。这是因为,人的发声器官的肌肉惯性,从一个状态瞬间转换到另一个状态是不可能的。在一个短时间内语音特性保持不变称为语音的短时平稳特性,贯穿于语音信号全过程的是短时分析技术。短时方法是用平稳信号的处理方法分析非平稳信号的关键,而进行短时分析的过程一般包括分帧、加窗和DFT。

Step1. 分帧

语音信号分帧的目的是把若干个语音采样点分为一帧,在这一帧内,语音信号的特性可是视为是稳定的。那么一帧应该取多长呢?首先它必须足够短来保证帧内信号是平稳的,因此一帧的长度应该小于一个音素的长度,正常语速下一个音素持续时间大约为50ms。此外,要进行傅里叶分析这一帧必须包含足够多的振动周期,男声在 100 赫兹左右,女声在 200 赫兹左右,换算成周期就是 10 ms和 5 ms。 因此,一般语音分帧的长度取10~40ms左右。不同的语音帧长度对于同一个任务是有一定的影响的,下图是ASR正确率随着语音帧长度的变化趋势。可以看到随着语音帧长度增加,ASR的正确率先在增加后减少,因此对于特定的任务,选择合适的语音帧长度也很有必要。

分帧,加窗和DFT

语音分帧并不是确定帧长就结束了,为了使得语音帧之间有一个平滑的过度,一般帧与帧之间有一定的重叠,相邻两帧的起始位置的时间差叫做 帧移。 帧长为N帧移为m的语音分帧过程如下图所示。帧移一般为帧长的1/2,3/4;在ASR中帧长大多为25ms,帧移为10ms。

分帧,加窗和DFT

同帧长一样,帧移的选择也是一门学问。 选择较短的帧移可以跟踪语音信号的连续性,并且不会遗漏帧边缘处的突然变化,即有助于处理语速较快的情况;较长的帧移意味着较少的语音帧数目,这减少了后续相关处理(如解码)的计算量。下图是一个音素标注的任务,分别由人类和分别使用5ms帧移10ms帧移自动标注的结果。看到在ministre这个单词后人类结果没有/t/这个音素,而自动标注都捕获了这个音素,但是10ms帧移情况下/t/这个音素标注区域其中有一部分应该是/s/。

分帧,加窗和DFT

Step2. 加窗

我们并不会直接使用语音分帧后的结果进行DFT,这会造成频谱泄露,那么什么是频谱泄露呢?广义上来说, 任何其他类型的操作产生了新的频率成分,就称其为频谱泄漏。频谱泄漏使信号真实频率进行DFT操作之后,在多个频率之间扩展,这使得很难从频谱找到信号的实际频率。

分帧,加窗和DFT

分帧,加窗和DFT

在上图中,正弦波信号分别四舍五入了几个周期和非整数周期。我们发现,当正弦波在矩形窗口中有整数个周期时,频谱泄漏不会发生,但当矩形窗口中有非整数个周期时,会有更多其他频率的分量。因此,可以推断频谱泄漏一般是由信号的非周期截断引起的。为了避免这种情况,我们引入了一个窗口函数,如下图所示。

[En]

In the above figure, the sine wave signal is rounded by several periods and non-integer periods respectively. We find that the frequency spectrum leakage will not occur when the sine wave has integer periods in the rectangular window, but there will be more components of other frequencies when there are non-integer periods in the rectangular window. therefore, it can be inferred that the frequency spectrum leakage is generally caused by the aperiodic truncation of the signal. To avoid this, we introduce a window function, as shown in the following figure.

分帧,加窗和DFT

不同的窗函数对频谱泄露的缓解程度不同,其总泄漏是通过等效噪声带宽(equivalent noise bandwidth,ENBW)来衡量的。好的窗函数设计应该满足频谱的能量主要集中在主瓣,尽量使旁瓣的能量低,使得窗口内的信号近似具有周期性。但是加窗使得每一帧两端的信号变弱,为了缓解这个问题,帧与帧之间或有重叠部分,这就是上一节涉及到的帧移。

Step3. DFT

关于傅里叶变换的内容,我在这篇文章中已经讲了一些基础的内容,这里进行一些补充。我们做完DFT后。信号的频谱被限制在基频整数倍处,只能在相应离散点处看到输出,这种情况被称为 栅栏效应。如下图所示,我们只能通过栅栏之间的缝隙来观察频谱,而频谱真正的峰值可能被栅栏挡住。

分帧,加窗和DFT

为了缓解栅栏效应最直接的方法就是增加处理DFT信号的长度。如果不修改时域信号,那么在信号后面padding 0,增加频域抽样点数,使得谱线更密,这样也可以观察到原来看不到的频谱分量。值得注意的是,对信号进行零填充不会显示有关频谱的更多信息,而只会在不应用零填充时会发生的频率段之间进行内插,即padding 0不会增加频谱分辨率。

分帧,加窗和DFT

最后,如果要从DFT处理后的结果恢复信号,在IDFT后需要做的是 重叠相加,这里需要注意的是,如果你所加的窗函数在重叠部分相加为常数,那么IDFT后你就不需要再加窗函数了,如下图所示,否则需要加在DFT之前同样的窗函数(DFT前的窗函数称为分析窗,IDFT后的窗函数称为合成窗,它们一般相同)。

分帧,加窗和DFT

本文相关代码在公众号语音算法组菜单栏点击Code获取。

参考文献:

[1]. 语音信号处理,胡航

[2]. https://www.zhihu.com/question/52093104

[3]. Preference for 20-40 ms window duration in speech analysis

[4]. IMPACT OF FRAME RATE ON AUTOMATIC SPEECH-TEXT ALIGNMENT FOR CORPUS-BASED PHONETIC STUDIES

[5]. https://en.wikipedia.org/wiki/Spectral_leakage

[6].https://dspillustrations.com/pages/posts/misc/spectral-leakage-zero-padding-and-frequency-resolution.html

Original: https://blog.csdn.net/sinat_35821976/article/details/119519674
Author: 非典型废言
Title: 分帧,加窗和DFT

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/515176/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球