实验一语音信号的预处理(2课时)
通过Matlab编程掌握语音信号的预处理方法,包括对信号进行分帧、预加重,加窗处理。
由于语音信号从整体上来看是一个非平稳过程,但是在一个短的时间内,其特性保持相对不变,所以语音信号具有短时平稳性,对语音信号的分析和处理必须建立在“短时”的基础上,将信号分为一段一段来分析其特征参数。
人发音时存在口唇的辐射效应,口唇的辐射模型相当于一阶高通滤波器,所以在对实际信号进行分析处理时,常用“预加重技术”,目的提升信号的高频部分,使信号的频谱更加平坦,方便信号的分析。
1)读语音数 wavread
2)听语音sound
3)写语音wavwrite
4)对语音信号进行分帧处理
5)对语音信号进行预加重
6)加汉明窗
语音信号的预处理实验程序
所用函数wavread、sound、wavwrite、length、fix、y=x(m:n)、 subplot、plot、figure 、xlabel、ylabel、title
选取c:\windows\media 目录下.wav文件作为读取的声音文件。
读[x,fs,bits]=wavread('c:\windows\media\dig.wav');
听sound(x,fs)
写wavwrite(x,fs,bits,'c:\windows\media\dig.wav')
分帧处理流程
1 读语音数据。
2 求语音长度。
3确定帧长和帧移。
4确定可以分多少帧
5 for循环实现各帧信号的取出。先确定各帧信号的起点和终点坐标,然后利用矩阵操作函数将各帧信号取出。
[x,fs,bits]=wavread(' c:\windows\media\dig.wav ');
x=x(:,1);
x=x';
len=length(x);
N=256;
M=128;
Fn=fix((len-N)/M+1);
y=[];
for i=1:Fn
down=1+(i-1)*M;
up=down+N-1;
temp=x(down:up);
y=[y;temp];
end
加窗取出一帧信号和窗函数相乘
预加重 Z域
y=filter([1 -0.96],1,x);
时域表达:
y(k)=x(k)-x(k-1)
程序:
[x,fs,bits]=wavread(' c:\windows\media\dig.wav ');
x=x(:,1);
y=x(10101:10612);
figure(1)
plot(y)
L=length(y);
k=1:L;
w=0.42-0.5*cos(2*pi*k/L)+0.08*cos(4*pi*k/L);
z=y.*w’;
figure(2)
plot(z)
for r=2:L
p(r)=y(r)-y(r-1);
end
figure(3)
plot(p)