温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何理解语音信号MFCC算法

发布时间:2021-11-03 09:02:06 来源:亿速云 阅读:175 作者:柒染 栏目:互联网科技

今天就跟大家聊聊有关如何理解语音信号MFCC算法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

要进行语音处理,可以借助已经集成的工具包,如voicebox。

在Matlab7里toolbox里添加voicebox工具包。官方下载地址,在command里输入

<!-- lang: shell -->
>> addpath(genpath('E:\soft\Matlab\toolbox\voicebox'))  
>> savepath

路径写自己PC里voicebox的位置。

##MFCC流程## MFCC是这样的一个流程:

如何理解语音信号MFCC算法

##Matlab实现数据读入##

<!-- lang: shell -->
[x,fs,bits,opt_ck]=wavread('turan.wav',[1018 1400]');

x的返回值是一个382*2的数组,说明是左右二通道。该语句读取文件名为turan.wav的音频文件,并将音频数据存储在x中,返回给用户使用。音频数据的值域为[-1,1],被归一化了。

在C里面是把语音数据读入到一个一维数组,因此要进行左右声道数据分离。而Matlab中也为了跟踪调试数据换成单声道。

x=x(:,1); %获取左声道数据

##C实现预加重##

<!-- lang: cpp -->
void PreEmphasise (float *s, float k)
{
int i;
float preE;//加重系数

preE = k;
for (i=ipframesize;i>=2;i--)
   s[i] -= s[i-1]*preE;
s[1] *= 1.0-preE;
}

预加重在时域上的求法很像差分,在频域上起一个高通滤波器的作用。S2(n)=S(n)-aS(n-1)的传递函数进行Z变换就是H(z)=1-a(Z^(-1))。画出它的频谱图就可以直观看出这是一个高通滤波器,加强语音信号的共振峰。具体关于Z变换的知识可以参加奥本海默《Signals & Systems》P534。如果看不懂,就去做几道信号与系统习题吧。

##分帧加窗## 我们把语音信号看做平稳的,实际语音信号可能很长。为了便于处理整个信号,每次只处理一小段(10ms~30ms)的数据。这就是分帧,为了保证信号的连续性,帧与帧之间有部分重叠。

而直接对信号进行截断(加矩形窗)会产生频率泄露,一般都是加汉明窗。汉明窗和正弦函数很像,用Matlab命令plot(hamming(100))绘制出的图像如下:

如何理解语音信号MFCC算法

FFT的作用

FFT在一般应用中是用来滤波。先正变换滤掉一部分频谱分量,再作逆变换把信号变回来达到滤波的目的。但是FFT还有另外一个作用,比如在这个应用中是对每一帧进行FFT变换,求频谱进而求得幅度谱。求得的幅度谱用在后面的Mel尺度的三角形滤波器组中。

这次看FFT算法真有种重温旧梦的感觉。对以前学的信号与系统、数字信号处理重新审视了一下,其实这些东西还真是不错。

看完上述内容,你们对如何理解语音信号MFCC算法有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI