数字语音处理实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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,:);