| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 分帧,加窗和DFT -> 正文阅读 |
|
[人工智能]分帧,加窗和DFT |
我们知道语音信号特性是随时间变化的,是一个非平稳随机过程。但是,从另一方面来看,语音虽然具有时变的性质,在短时间内其特性可以视为是稳定的。这是因为,人的发声器官的肌肉惯性,从一个状态瞬间转换到另一个状态是不可能的。在一个短时间内语音特性保持不变称为语音的短时平稳特性,贯穿于语音信号全过程的是短时分析技术。短时方法是用平稳信号的处理方法分析非平稳信号的关键,而进行短时分析的过程一般包括分帧、加窗和DFT。 Step1.?分帧 语音信号分帧的目的是把若干个语音采样点分为一帧,在这一帧内,语音信号的特性可是视为是稳定的。那么一帧应该取多长呢?首先它必须足够短来保证帧内信号是平稳的,因此一帧的长度应该小于一个音素的长度,正常语速下一个音素持续时间大约为50ms。此外,要进行傅里叶分析这一帧必须包含足够多的振动周期,男声在 100 赫兹左右,女声在 200 赫兹左右,换算成周期就是 10 ms和 5 ms。因此,一般语音分帧的长度取10~40ms左右。不同的语音帧长度对于同一个任务是有一定的影响的,下图是ASR正确率随着语音帧长度的变化趋势。可以看到随着语音帧长度增加,ASR的正确率先在增加后减少,因此对于特定的任务,选择合适的语音帧长度也很有必要。 语音分帧并不是确定帧长就结束了,为了使得语音帧之间有一个平滑的过度,一般帧与帧之间有一定的重叠,相邻两帧的起始位置的时间差叫做帧移。?帧长为N帧移为m的语音分帧过程如下图所示。帧移一般为帧长的1/2,3/4;在ASR中帧长大多为25ms,帧移为10ms。 同帧长一样,帧移的选择也是一门学问。选择较短的帧移可以跟踪语音信号的连续性,并且不会遗漏帧边缘处的突然变化,即有助于处理语速较快的情况;较长的帧移意味着较少的语音帧数目,这减少了后续相关处理(如解码)的计算量。下图是一个音素标注的任务,分别由人类和分别使用5ms帧移10ms帧移自动标注的结果。看到在ministre这个单词后人类结果没有/t/这个音素,而自动标注都捕获了这个音素,但是10ms帧移情况下/t/这个音素标注区域其中有一部分应该是/s/。 Step2.?加窗 我们并不会直接使用语音分帧后的结果进行DFT,这会造成频谱泄露,那么什么是频谱泄露呢?广义上来说,任何其他类型的操作产生了新的频率成分,就称其为频谱泄漏。频谱泄漏使信号真实频率进行DFT操作之后,在多个频率之间扩展,这使得很难从频谱找到信号的实际频率。 在上图中,分别对正弦波信号取整数个周期和非整数个周期。我们发现正弦波在矩形窗口内具有整数个周期时不会发生频谱泄露,而矩形窗内具有非整数个周期时会多出其他频率的分量,因此可以推断频谱泄露一般是由信号被非周期截断产生的*。为了避免这种情况,我们引入窗函数,如下图所示。 不同的窗函数对频谱泄露的缓解程度不同,其总泄漏是通过等效噪声带宽(equivalent noise bandwidth,ENBW)来衡量的。好的窗函数设计应该满足频谱的能量主要集中在主瓣,尽量使旁瓣的能量低,使得窗口内的信号近似具有周期性。但是加窗使得每一帧两端的信号变弱,为了缓解这个问题,帧与帧之间或有重叠部分,这就是上一节涉及到的帧移。 Step3. DFT 关于傅里叶变换的内容,我在这篇文章中已经讲了一些基础的内容,这里进行一些补充。我们做完DFT后。信号的频谱被限制在基频整数倍处,只能在相应离散点处看到输出,这种情况被称为栅栏效应。如下图所示,我们只能通过栅栏之间的缝隙来观察频谱,而频谱真正的峰值可能被栅栏挡住。 为了缓解栅栏效应最直接的方法就是增加处理DFT信号的长度。如果不修改时域信号,那么在信号后面padding 0,增加频域抽样点数,使得谱线更密,这样也可以观察到原来看不到的频谱分量。值得注意的是,对信号进行零填充不会显示有关频谱的更多信息,而只会在不应用零填充时会发生的频率段之间进行内插,即padding 0不会增加频谱分辨率。 最后,如果要从DFT处理后的结果恢复信号,在IDFT后需要做的是重叠相加,这里需要注意的是,如果你所加的窗函数在重叠部分相加为常数,那么IDFT后你就不需要再加窗函数了,如下图所示,否则需要加在DFT之前同样的窗函数(DFT前的窗函数称为分析窗,IDFT后的窗函数称为合成窗,它们一般相同)。 本文相关代码在公众号语音算法组菜单栏点击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 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 21:42:51- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |