当前栏目:

语音信号处理-实验一 语音信号的预处理

时间:2011-07-20浏览:276设置

实验一语音信号的预处理(2课时)

一、实验目的

通过Matlab编程掌握语音信号的预处理方法,包括对信号进行分帧、预加重,加窗处理。

二、实验原理

由于语音信号从整体上来看是一个非平稳过程,但是在一个短的时间内,其特性保持相对不变,所以语音信号具有短时平稳性,对语音信号的分析和处理必须建立在“短时”的基础上,将信号分为一段一段来分析其特征参数。

人发音时存在口唇的辐射效应,口唇的辐射模型相当于一阶高通滤波器,所以在对实际信号进行分析处理时,常用“预加重技术”,目的提升信号的高频部分,使信号的频谱更加平坦,方便信号的分析。

三、实验过程

1)读语音数 wavread

2)听语音sound

3)写语音wavwrite

4)对语音信号进行分帧处理

5)对语音信号进行预加重

6)加汉明窗

四、实验结果

  

  

  

  

  

语音信号的预处理实验程序

  

所用函数wavreadsoundwavwritelengthfixy=x(m:n) subplotplotfigure xlabelylabeltitle

选取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)

  

  

  

  

  

  

  

  


同栏目信息

其它相关信息