数字语音处理实验报告 下载本文

内容发布更新时间 : 2024/9/21 15:48:17星期一 下面是文章的全部内容请认真阅读。

实验一、用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