likes
comments
collection
share

以任意频率重采样语音信号

作者站长头像
站长
· 阅读数 3

语音信号重采样是语音信号处理中常用的方法,许多语音信号处理算法只支持一两种采样频率,当使用其他采样频率的语音数据送过来时,就可以使用重采样的方法使得其符合语音算法的采样频率。重采样分为上采样和下采样,其原理都是通过插值来实现的,常用的插值方法有直接插值、拉格朗日插值和正弦插值,下面分别进行介绍。

1. Direction Interpolation

直接插值的基本思想就是,通过使用一条穿过两个固定点的线来近似插值点。我们假设原始语音x长度为N,采样率为L,重采样后的语音y长度为K,采样率为M。那么对于y中的每个点k都可以在x中找到与之对应的点nk,即

以任意频率重采样语音信号

其中L/M称为缩放因子(scaling factor),然后我们取与nk相邻的点n,

以任意频率重采样语音信号

赋予它们不同的权重

以任意频率重采样语音信号

最后,将它们的加权和作为此时y[k]的值,即

以任意频率重采样语音信号

这样就完成一次插值,对y每个时刻都进行上述的操作,就完成了整个重采样的过程。

2. Lagrange Interpolation

直接插值简单粗暴,但是简单的算法往往效果不好,直接插值的算法是线性的,在有些条件下插值的效果不是很好。由于语音信号的采样周期相同,因此很自然地想到将拉格朗日插值方法应用于语音重采样。拉格朗日插值法是使用拉格朗日插值多项式估计插值点的值,前面的直接插值可以看做拉格朗日插值的一个简单的情况。有了直接插值的基础,拉格朗日插值在重采样中插值计算公式为

以任意频率重采样语音信号

其中w为窗口长度,那么可以知道拉格朗日多项式阶数为2w+1,即使用2w+1个原始数据的采样点来计算这次插值点。对于公式(5)如果只x[n-i]前面的系数

以任意频率重采样语音信号

可以发现当w趋于无穷大的时候,有

以任意频率重采样语音信号

这就是我们后面要介绍的正弦插值。

3. Sine Interpolation

关于正弦插值前面已经铺垫很多了,这里就直接给出插值的计算公式,

以任意频率重采样语音信号

重采样之后,最好使用低通滤波器来过滤掉超出的频率分量,特别是在下采样的情况下。

4. 重采样结果

从TIMIT中随机选取了一个样本,采样频率是16KHz,下面把它重采样为8KH和32KHz。首先看下三种方法的时间开销,可以发现拉格朗日插值法的时间开销最大,正弦插值次之,直接插值用时最少。

以任意频率重采样语音信号

最后看下频谱图:resample_test.wav 频谱图

以任意频率重采样语音信号

upsample_Direct.wav频谱图

以任意频率重采样语音信号

downsample_Direct.wav频谱图

以任意频率重采样语音信号

本文相关的数据和Python代码可以在语音算法组公众号菜单栏点击->More ->Code->SpeechAlgorithms->Resample中获得

参考文献:

[1]. Speech signal resampling by arbitrary rate

[2]. wenku.baidu.com/view/b7

转载自:https://juejin.cn/post/6903000591254061069
评论
请登录