发布时间 : 星期四 文章用MATLAB实现语音信号的时域分析更新完毕开始阅读
实验一、用MATLAB实现语音信号的时域分析
1. 实验目的
观察并验证语音信号的时域特性,理解并掌握典型的语音信号时域分析方法和时域特征,为深入学习语音信号处理的各种应用奠定基础。
2. MATLAB程序代码
(1)由麦克风采集语音数据,将采集的数据存成WAV文件(采样率为8000Hz),存在本人的文件夹中。所用程序代码为:
clear; close all; Fs=8000;
y=wavrecord(5*Fs,Fs,'double'); wavwrite(y,'f:\\\\a');
soundview(y,Fs,'name')
(2)读取WAV文件,显示语音信号的波形。所用程序代码为: x = wavread('f:\\\\a.wav'); figure; plot(x);
axis([0,size(x,1),-0.35,0.3]); %坐标轴范围
title('语音信号时域波形');xlabel('样点数'); ylabel('幅度');(
3)读取WAV文件,计算并显示语音的短时能量(窗函数为矩形窗,帧长为20)。所用程序代码为:
x = wavread('f:\\\\a.wav'); x = double(x);
f = enframe(x,20, 100); energy = sum(abs(f), 2);
subplot(2,2,1);plot(x); axis([0,size(x,1),-0.7,0.9]);
title('语音信号时域波形');xlabel('样点数'); ylabel('幅度'); subplot(2,2,2);plot(energy); title('语音信号的短时能量'); legend('帧长LEN = 20'); f = enframe(x,20, 200);
energy = sum(abs(f), 2);
subplot(2,2,3);plot(energy); title('语音信号的短时能量'); legend('帧长LEN = 100'); f = enframe(x,20, 400);
energy = sum(abs(f), 2);
subplot(2,2,4);plot(energy); title('语音信号的短时能量'); legend('帧长LEN = 200');
1
(4)读取WAV文件,计算并显示语音的短时过零率(窗函数为矩形窗,帧长为256,帧移为128),所用程序代码为:
x = wavread('f:\\\\a.wav'); x = double(x); LEN =100; INC=100;
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文件,当窗函数为矩形窗、帧长为20时,计算一帧浊音的短时自相关函数所用的程序代码为:
x = wavread('f:\\\\a.wav');
x = double(x); LEN = 100; INC= 100;
f = enframe(x, LEN, INC);
ff=f(72,:); %选取一帧浊音信号 ff=ff'.*rectwin(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
2
subplot(2,1,1);plot(ff); axis([0,N,-0.5,0.5])
title('加矩形窗的语音帧'); xlabel('样点数'); ylabel('幅度'); subplot(2,1,2); plot(R1); axis([0,N,-1,1])
title('加矩形窗的短时自相关函数'); xlabel('k'); ylabel('R(k)');
3. 实验结果及其分析
(1)本实验利用8000Hz的采样频率对输入的语音信号进行采样,采样点数为40000个,持续时间为4秒,存储格式为double。之后将数字语音数据写入F盘的a.wav文件,这段波形是读音为’ke’的波形,并通过放音设备进行回放。回放的GUI界面如图1所示,通过该界面可以观察采集的语音信号。
图1 用soundview函数显示的语音信号
(2)本实验将L盘的a.wav文件读取出来,并显示文件中的语音信号波形,显示的波形如图2所示。该波形是汉语拼音“ke”的时域波形。从图2可以看出,[K]是清音,它的波形峰值较低;[e]是浊音,它的波形峰值较高。
3