https://www.cnblogs.com/shenxiaolin/p/9234666.html
for 循环的值有下述三种形式之一:
plot函数
https://baike.baidu.com/item/plot/10776857?fr=aladdin
matlab中length函数
https://jingyan.baidu.com/article/54b6b9c006d3bd6d583b47df.html
断点
https://blog.csdn.net/qq_45562910/article/details/104982713
语音信号的短时平均能量matlab
https://blog.csdn.net/hanxueyu666/article/details/51258659
我的是MATLAB\R2018a
这里的audioread函数代替了wavread
解读程序:
for i = 1:framenumber;%分帧处理
framesignal = signal((i-1)*framelength+1:i*framelength);%获取每帧的数据
E(i) = 0;%每帧能量置零
for j = 1:framelength;%计算每一帧的能量
E(i) = E(i)+framesignal(j)^2;
end
end
signal函数取出(i-1)framelength+1,到iframelength直接的信号值,存放在framesignal 数组中。
E(i) = 0;初始为累计值为0
E(i) = E(i)+framesignal(j)^2;
取出数组framesignal的值,对其平方,然后累计在E(i)中。
https://blog.csdn.net/joey_su/article/details/36414877
加窗
我们知道语音信号是不断改变的(非平稳),但是非平稳的信号不好处理,所以语音处理算法通常假定信号是稳定的。
分段(短时)平稳性:将语音信号看成是由一帧帧构成(假定一帧是平稳的)。
加窗:在时域上,波形乘以窗函数即可得到加窗后的波形,公式为X[n]=W[n]S[n]
如果我们简单地将语音信号分成很多小段,那么这些小段(帧)就是矩形窗,而矩形窗的边缘是陡峭的,即不连续的,所以应该选取连续的窗函数,使得相邻两帧可以平滑过渡。
在语言处理中,通常使用锥形的窗代替矩形窗,比如Hamming或者Hanning,窗函数如下:
其中,alpha为窗函数的系数,Hamming窗为0.46164,Hanning窗为0.5。
时域上的加窗效果如下
可见锥形窗边缘部分过渡更加平滑了。
离散傅立叶变换(DFT)
DFT的目的:从一个加窗的信号中提取频谱信息。
输入:加窗后的信号x[n1],…,x[n1+L-1](时域),这里的L是窗的大小
输出:复数x[k],表示N个频带上的第k个频率成分的幅度和相位。
DFT公式:
注意点:为了使帧与帧之间的过渡平稳,采用帧移的方法,即两帧之间有个重叠的区域。
对于语音识别来说,我们选用20ms的帧长,10ms的帧移。
Mel-frequency cepstral coefficients (MFCCs)——梅尔频率倒谱系数
梅尔,也就是梅尔刻度;
频率,一种非线性的频率;
倒谱,经倒谱分析后得到的特征;
倒谱
倒过来的频谱,将频谱spectrum前四个字母倒过来得到cepstrum。
我们可以近似理解为倒谱是频谱的一种特殊的你变换,专业说法是同态处理。
语音产生模型可看成是发生源-滤波器(source-filter)模型。
发声源source,声带振动产生波形。
滤波器filter,给波形一个特定的形状,就会有特定的滤波特性。
发声源对区分因素没有用,但是滤波器可以用来区分因素。
而倒谱分析可以帮助我们分离发生源和滤波器,这样,我们就可以将滤波器分离出来,就可以区分音素了,这就是非常重要的倒谱特征。