实验一、用MATLAB实现语音信号的时域分析
学院:信息与通信工程学院 专业:通信工程 班级:通信144 学号:2014136410 姓名:刘新雨 指导教师:崔艳秋
1. 实验目的
观察并验证语音信号的时域特性,理解并掌握典型的语音信号时域分析方法和时域特征,为深入学习语音信号处理的各种应用奠定基础。
2. MATLAB程序代码
(1)由麦克风采集语音数据,将采集的数据存成WAV文件(采样率为8000Hz),存在本人的文件夹中。所用程序代码为:
clear; close all; Fs=11025;
y=wavrecord(5*Fs,Fs,'double'); wavwrite(y,'D:\\\\lxy'); soundview(y,Fs);
(2)读取WAV文件,显示语音信号的波形。所用程序代码为:
clear; close all;
x = wavread('D:\\\\lxy.wav'); figure; plot(x);
axis([0,size(x,1),-0.35,0.3]);
title('语音信号时域波形');xlabel('样点数'); ylabel('幅度');
(3)读取WAV文件,计算并显示语音的短时能量(窗函数为矩形窗,帧长为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');
1
f4= enframe(x,600,600); energy4 = sum(abs(f4), 2);
subplot(2,2,4);plot(energy4); title('语音信号的短时能量'); legend('帧长LEN = 600');
(4)读取WAV文件,计算并显示语音的短时过零率(窗函数为矩形窗,帧长为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)读取WAV文件,计算浊音与清音的短时自相关函数所用的程序代码为: 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));
2