首页 > 编程 > Python > 正文

MELP算法的Python实现(二)

2019-11-06 08:53:09
字体:
来源:转载
供稿:网友

MELP算法中首先需要将一帧语音数据通过一个60Hz的低通四阶切比雪夫二型滤波器,以去除低频干扰信号。预处理结束之后需要将数据通过一个1kHz的六阶巴特沃夫滤波器以便进行下一步的基音提取操作。

     这里我们可以从C源码中找到滤波器系数,所以直接利用scipy中的signal生成,将两个滤波器的代码整理如下:

#coding=utf-8__author__ = 'cao'####该模块保存常用的滤波器,包括预处理的隔直流滤波器####1kHz的高通滤波器,以及分带的滤波器import scipy.signal as signalimport numpy as np##dc隔直流滤波器的系数DC_ORD = 4##低通滤波器的系数LPF_ORD=6###隔直流滤波器的滤波器系数dc_den = np.array([1.00000000,              -3.84610723,              5.55209760,              -3.56516069,              0.85918839])dc_num =np.array([0.92692416,             -3.70563834,             5.55742893,             -3.70563834,             0.92692416])####低通滤波器系数lpd_den = np.array([1.00000000,                    -2.97852993,                    4.13608100,                    -3.25976428,                    1.51727884,                    -0.39111723,                    0.04335699])lpd_num = np.array([0.00105165,                    0.00630988,                    0.01577470,                    0.02103294,                    0.01577470,                    0.00630988,                    0.00105165])# def polflt(input,coeff,output,order,npts):#     for i in range(npts):#         accum = input[i]#         for j in range(1,order+1):#             accum = output[i-j]*#本函数提供一个高通滤波器,去除60hz以下的频率def DC_rov(data):    return signal.lfilter(dc_num,dc_den,data)#本函数提供一个低通滤波器,滤出1kHz以上的频率def lpd(data):    return signal.lfilter(lpd_num,lpd_den,data)


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表