实验一语音信号的时域特性和频域特性
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一、语音信号的时域特性和频域特性
学院:信息与通信工程学院
专业:通信工程
班级:104
学号:2010026410
姓名:黄余芳
指导教师:崔艳秋
1.实验名称
语音信号的时域特性和频域特性
2.实验类型
验证性实验
3.实验目的
观察并验证语音信号的时域特性和频域特性,理解并掌握典型的语音信号时域分析方法和频域分析方法,为深入学习数字语音信号处理的相关理论奠定基础。
4.实验设备
安装有MATLAB的计算机
5.实验内容
1.输入并运行MATLAB代码。
2.观察语音信号的时域特性
(1)发一个清音和一个浊音,由麦克风采集语音数据,参考实验内容1中的程
序将这些数据分别存成两个“.wav”文件(例如[a]的语音存为“a.wav”,要求
采样率为8000),存在本人的文件夹中。
(2)读取WA V文件,显示语音波形,观察清音和浊音波形的差异。
(3)读取WA V文件,计算并显示语音的短时能量(要求分帧加窗的帧长为256,
帧移为128),观察并分析清音和浊音短时能量的差异。
(4)读取WA V文件,计算并显示语音的短时过零率(要求分帧加窗是的帧长
为256,帧移为128),观察并分析清音和浊音短时过零率的差异。
3. 观察语音信号的频域特性
(1)读取WA V文件,计算并显示一帧语音的原始信号、加窗信号、短时频谱(要求分帧加窗的窗函数为汉明窗、帧长为256,帧移为128),观察并分析清音和浊音短时频谱的差异。
(2)读取WA V文件,计算并显示不同窗函数情况下一帧语音的加窗信号、短
时频谱(要求分帧加窗的窗函数分别为矩形窗和汉明窗、帧长为256,帧移为
128),观察并分析不同的窗函数对短时谱分析的影响。
6.相关函数
wavread、plot、fft
7.MATLAB程序代码
1. 输入并运行以下MATLAB代码。
(1) 短时能量
clear;
close all;
Fs=11025;
y=wavrecord(5*Fs,Fs,'double'); wavwrite(y,'f:\\a');
soundview(y,Fs);
x = wavread('f:\\a.wav');
x = double(x);
x = filter([1 -0.9375], 1, x); % 预加重FrameLen = 256;
FrameInc = 128;
s = enframe(x, FrameLen, FrameInc); energy = sum(abs(s), 2);
figure;
subplot(2,1,1);
plot(x);
title('语音信号时域波形');
xlabel('样点数');
ylabel('幅度');
subplot(2,1,2);
plot(energy);
title('语音信号的短时能量');
xlabel('帧数');
ylabel('短时能量');
legend('帧长FrameLen = 240');
(2) 短时过零率
clear;
close all;
x = wavread('f:\\a.wav');
x = double(x);
FrameLen = 256;
FrameInc =128;
tmp1 = enframe(x(1:end-1), FrameLen, FrameInc);
tmp2 = enframe(x(2:end) , FrameLen, FrameInc);
signs = (tmp1.*tmp2)<0;
diffs = (tmp1 -tmp2)>0.02;
zcr = sum(signs.*diffs, 2);
figure;
subplot(2,1,1);
plot(x);
title('语音信号时域波形');
xlabel('样点数');
ylabel('幅度');
subplot(2,1,2);
plot(zcr);
xlabel('帧数');
ylabel('短时过零率');
title('语音信号的短时过零率');
(3) 短时傅里叶变换
clear;
close all;
x = wavread('f:\\a.wav');
x = double(x);
FrameLen =256;
FrameInc =128;
s = enframe(x, FrameLen, FrameInc);
ss=s(50,:); %选取一帧语音信号(可以通过观察短时能量的分布来判断哪一帧是清音段还是浊音段)
f=ss'.*hamming(length(ss));
r=fft(f,512);
r1=abs(r);
r1=r1/max(r1);
yuanlai=20*log10(r1);
signal(1:256)=yuanlai(1:256);
pinlv=(0:1:255)*11025/512;
figure;
subplot(3,1,1);