语音的帧长、帧移与帧数
发布网友
发布时间:2022-12-23 10:48
我来回答
共1个回答
热心网友
时间:2023-06-29 21:38
接着前面的文章,关于语音分帧问题,在前期将语音静音删除后,需要将语音裁剪成长度相同的长度或者分帧,保证数据集的统一。长度不同的音频文件不容易建模分析,需要先分帧,切成长度相同的,另外切成一小段固定长度时,段和段之间适当重叠部分。
经过一上午的学习实践,参考librosa文档和知乎等资料,终于搞定懂了。
语音信号是一个非稳态的、时变的信号。但在短时间范围内可以认为语音信号是稳态的、时不变的,这个短时间一般取 10-30ms。进行语音信号处理时,为减少语音信号整体的非稳态、时变的影响,从而对语音信号进行分段处理,其中每一段称为一帧,帧长一般取 25ms。为了使帧与帧之间平滑过渡,保持其连续性,分帧一般采用交叠分段的方法,保证相邻两帧相互重叠一部分,末尾不足部分用零填充。相邻两帧的起始位置的时间差称为帧移,我们一般在使用中帧移取值为 10ms。
那么对于一个 22050Hz 采样的音频来说,帧长有 22050 * 0.025 = 551.25 个点,帧移有 22050 * 0.01 = 220.5 个点。根据上一篇文章- jupyter notebook完成wav文件探索 ,计算点数方法是采样率 * 时长,那么wav文件就有5.89569 * 22050 = 130000,和librosa.load返回的数据是一致的。num_samples、frame_len、frame_shift 分别代表音频的数据点数、帧长和帧移,那么i 帧的数据需要的点数:(i-1) * frame_shift + frame_len,n 个点的音频的帧数:ceil(n- / frame_shift) 。
那么在librosa.load语音文件后,需要自己来分帧吗?NO,librosa已经帮你实现了!librosa.feature.mfcc函数提取MFCCs特征时,MFCC一般默认帧长为2048,帧移为512,即默认1/4关系。查看参考librosa文档:hop_length = win_length / 4,win_length = n_fft。n_fft=2048, hop_length=512。
那么笔者再次在jupyter notebook中添加计算,发现和mfcc函数提取的帧数是一致的。那么在提取特征时就不需要自动来保证帧移的分帧。jupyter 真是太好用了,可以查看、修改历史过程,不用从头开始导入数据、分析数据了。