数字语音处理实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一、用MATLAB实现语音信号的时域分析

学院:信息与通信工程学院

专业:通信工程

班级:通信144

学号:**********

姓名:***

指导教师:***

1.实验目的

观察并验证语音信号的时域特性,理解并掌握典型的语音信号时域分析方法和时域特征,为深入学习语音信号处理的各种应用奠定基础。

2.MATLAB程序代码

(1)由麦克风采集语音数据,将采集的数据存成WA V文件(采样率为8000Hz),存在本人的文件夹中。所用程序代码为:

clear;

close all;

Fs=11025;

y=wavrecord(5*Fs,Fs,'double');

wavwrite(y,'D:\\lxy');

soundview(y,Fs);

(2)读取WA V文件,显示语音信号的波形。所用程序代码为:

clear;

close all;

x = wavread('D:\\lxy.wav');

figure;

plot(x);

axis([0,size(x,1),-0.35,0.3]);

title('语音信号时域波形');xlabel('样点数'); ylabel('幅度');

(3)读取WA V文件,计算并显示语音的短时能量(窗函数为矩形窗,帧长为50,200,400,600)。所用程序代码为:

clear;

close all;

x = wavread('d:\\k.wav');

x = double(x);

f1= enframe(x,50, 50);

energy1 = sum(abs(f1), 2);

subplot(2,2,1);plot(energy1);

title('语音信号的短时能量');

legend('帧长LEN =50');

f2= enframe(x,200, 200);

energy2 = sum(abs(f2), 2);

subplot(2,2,2);plot(energy2);

title('语音信号的短时能量');

legend('帧长LEN = 200');

f3= enframe(x,400, 400);

energy3 = sum(abs(f3), 2);

subplot(2,2,3);plot(energy3);

title('语音信号的短时能量');

legend('帧长LEN = 400');

f4= enframe(x,600,600);

energy4 = sum(abs(f4), 2);

subplot(2,2,4);plot(energy4);

title('语音信号的短时能量');

legend('帧长LEN = 600');

(4)读取WA V文件,计算并显示语音的短时过零率(窗函数为矩形窗,帧长为256,帧移为128),所用程序代码为:

clear;

close all;

x = wavread('D:\\lxy.wav');

x = double(x);

LEN = 300;

INC= 150;

f = enframe(x, LEN, INC);

% 计算短时过零率

z = zeros(size(f,1),1);

difs =0.01;

for i=1:size(f,1)

s=f(i,:);

for j=1:(length(s)-1)

if s(j)* s(j+1)<0&abs(s(j)-s(j+1))>difs;

z(i)= z(i)+1;

end

end

end

subplot(2,1,1); plot(x);

axis([0,size(x,1),-0.35,0.3]);

title('语音信号时域波形'); xlabel('样点数'); ylabel('幅度');

subplot(2,1,2);plot(z);

title('语音信号的短时过零率');xlabel('帧数'); ylabel('短时过零率');

(5)读取WA V文件,计算浊音与清音的短时自相关函数所用的程序代码为:clear;

close all;

x = wavread('D:\\lxy.wav');

x = double(x);

LEN = 256;

INC= 128;

f = enframe(x, LEN, INC);

ff=f(15,:);

N=LEN;

R=zeros(1,N);

for k=1:N

R(k)= sum(ff(k:N).*ff(1:N-k+1));

end

for k=1:N

R1(k)= R(k)/R(1);

end

subplot(2,1,1);plot(ff);

axis([0,N,-0.5,0.75])

title('加矩形窗的语音帧'); xlabel('样点数'); ylabel('幅度'); subplot(2,1,2); plot(R1);

axis([0,N,-1,1])

title('加矩形窗的短时自相关函数'); xlabel('k'); ylabel('R(k)'); clear;

close all;

x = wavread('d:\\k.wav');

x = double(x);

LEN = 256;

INC= 128;

f = enframe(x, LEN, INC);

ff=f(124,:);

ff=ff'.*hamming(length(ff));

N=LEN;

R=zeros(1,N);

for k=1:N

R(k)= sum(ff(k:N).*ff(1:N-k+1));

end

for k=1:N

R1(k)= R(k)/R(1);

end

subplot(2,1,1);plot(ff);

axis([0,N,-0.5,0.75])

title('加汉明窗的语音帧'); xlabel('样点数'); ylabel('幅度'); subplot(2,1,2); plot(R1);

axis([0,N,-1,1])

title('加汉明窗的短时自相关函数'); xlabel('k'); ylabel('R(k)'); clear;

close all;

x = wavread('D:\\lxy.wav');

x = double(x);

LEN = 10;

INC= 10;

f = enframe(x, LEN, INC);

ff=f(500,:);

相关文档
最新文档