语音识别

来源:互联网 发布:linux嵌入式招聘 编辑:程序博客网 时间:2024/04/27 22:34

Hanmming窗
hamming窗的定义:一个N点的hamming窗函数定义为如下

这里写图片描述

语音信号可以认为是短时平稳的。在5~50ms的范围内,语音频谱特性和一些物理特性参数基本保持不变。我们将每个短时的语音称为一个分析帧。一般帧长取10~30ms。我们采用一个长度有限的窗函数来截取语音信号形成分析帧。通常会采用矩形窗和汉明窗。图1.1给出了这两种窗函数在帧长N=50时的时域波形。

这里写图片描述

语音信号一般在10ms到30ms之间,我们可以把它看成是平稳的。为了处理语音信号,我们要对语音信号进行加窗,也就是一次仅处理窗中的数据。因为实际的语音信号是很长的,我们不能也不必对非常长的数据进行一次性处理。明智的解决办法就是每次取一段数据,进行分析,然后再取下一段数据,再进行分析。

怎么仅取一段数据呢?一种方式就是构造一个函数。这个函数在某一区间有非零值,而在其余区间皆为0.汉明窗就是这样的一种函数。它主要部分的形状像sin(x)在0到pi区间的形状,而其余部分都是0.这样的函数乘上其他任何一个函数f,f只有一部分有非零值。
之后我们会对汉明窗中的数据进行FFT,它假设一个窗内的信号是代表一个周期的信号。(也就是说窗的左端和右端应该大致能连在一起)而通常一小段音频数据没有明显的周期性,加上汉明窗后,数据形状就有点周期的感觉了。
因为加上汉明窗,只有中间的数据体现出来了,两边的数据信息丢失了,所以等会移窗的时候,只会移1/3或1/2窗,这样被前一帧或二帧丢失的数据又重新得到了体现。
乘法是:信号直接乘以一个HammingWindowTable中的值,这个加窗有什么作用:因为要处理的是无限长序列中的一段,所以必须对这段序列加窗采集出来。
a=wavread(‘jiasiqi.wav’); %将音频信号jiasiqi.wav读入
subplot(2,1,1), %分配画布,一幅图上共两个图,这是第一个
plot(a);title(‘original signal’); %画出原始信号,即前面这个音频信号的原始波形
grid %添加网格线
N=256; %设置短时傅里叶变换的长度,同时也是汉明窗的长度
h=hamming(N); %设置汉明窗
for m=1:N %用汉明窗截取信号,长度为N,主要是为了减少截断引起的栅栏效应等
b(m)=a(m)*h(m)
end
y=20*log(abs(fft(b))) %做傅里叶变换,取其模值,即幅频特性,然后用分贝(dB)表示
subplot(2,1,2) %分配画布,第二副图
plot(y);title(‘短时谱’); %画出短时谱
grid %添加网格线

0 0
原创粉丝点击