A python wrapper for Speech Signal Processing Toolkit (SPTK).
pysptk是一款语音信号处理工具包。
源码地址:pysptk源码及安装等
文档:pysptk文档
mcep = pysptk.sp2mc(spc, config["dim_mcep"], config["alpha"])
将频谱包络转换为倒谱。
def sp2mc(powerspec, order, alpha):
# |X(ω)|² -> log(|X(ω)²|)
logperiodogram = np.log(powerspec)
# transform log-periodogram to real cepstrum
# log(|X(ω)|²) -> c(m)
c = np.fft.irfft(logperiodogram)
c[0] /= 2.0
# c(m) -> cₐ(m)
return freqt(c, order, alpha)
输入参数:
powerspec: array
功率谱
order:int
想要的mcep维数
alpha:float
全通的常数。
输出返回:
mc : array, shape(order+1
)
mel-cepstrum
其中,又用到np.fft.irfft:
def irfft(a, n=None, axis=-1, norm=None):
计算n点DFT的逆。
输入参数
a: array_like
输入数组。
n: int,可选输出转换轴的长度。对于’ n ‘输出点,’ n//2+1 ’ ‘输入点是必要的。如果输入长度大于此值,则进行裁剪。如果它比这个短,就用0填充。如果没有给出’ n ‘,则被认为是’ ’ 2*(m-1) ’ ‘,其中’ ’ m ’ ‘是输入沿’ axis '指定的轴的长度。
axis: int,
可选的计算FFT逆的轴。如果没有给出,则使用最后一个轴。
norm: {None, “ortho”},可选。
1.10.0规范化模式(参见’ numpy.fft ')。默认值为None。
输出返回
out: ndarray
被截断或补零的输入,沿’ axis ‘指示的轴转换,如果’ axis ‘未指定则按最后一个轴转换。转换轴的长度是’ n ‘,或者,如果’ n ‘没有给出,’ ’ 2*(m-1) ’ ‘,其中’ ’ m ’ ‘是输入的转换后轴的长度。要获得奇数个输出点,必须指定’ n '。
注意,普通的ifft的输入的最后一项是第二项的复共轭,而输出的虚部处处为零。当调用’ irfft '时,不指定负频率,输出数组为纯实数。
还用到一个函数frert:
def freqt(ceps, order=25, alpha=0.0):
频率变换。
输入参数
**ceps:**数组倒谱。
order:int,
可选转换倒谱的期望顺序。默认值是25。
alpha:float
可选全通常数。默认值是0.0。
返回输出:
dst_ceps: array, shape(’ ’ order + 1 ’ ')
频率转换的倒谱(通常为mel-倒谱)
求梅尔频率倒谱系数。
mfcc = pysptk.sptk.mfcc(x, order=14, fs=16000, alpha=0.97, eps=1.0, window_len=None, frame_len=None, num_filterbanks=20, cepslift=22, use_dft=False, use_hamming=False, czero=False, power=False)
参数和上面类似。
输入:
order:MFCC的维数。默认值是14。取前14维。
alpha:预加重系数。默认0.97
eps:在滤波器组分析中计算log(x)的flooring value值。默认为1.0。
cepslist:同态滤波系数。默认为22。
czero:如果为True,则mfcc也返回第0个系数。默认为False。
power:如果为True,则mfcc也返回功率系数。默认为False。
输出:
MFCC向量,顺序为:mfcc [0], mfcc [1], mfcc[2],…mfcc [1], c0,power。
注意,c0和Power是可选的。
如果c0或power设置为True,则order + 1。
如果c0和power都设置为True,则order + 2。
包括swipe算法和RAPT算法