实验一语音信号的时域特性和频域特性
- 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);
plot(ss);
axis([0,256,-1,1])
title('截取的语音段');
xlabel('样点数');
ylabel('幅度');
subplot(3,1,2);
plot(f);
axis([0,256,-1,1])
title('窗选语音信号');
xlabel('样点数');
ylabel('幅度');
subplot(3,1,3);
plot(pinlv,signal);
xlabel('频率/Hz');
ylabel('对数幅度/dB');
title ('加Hamming窗时语音频谱');
(4) 显示清音短时过零率
clear;
close all;
x = wavread('f:\\k.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('语音信号的短时过零率');
2:语音信号的频域分析
1.加汉明窗的浊音
clear;
close all;
x = wavread('f:\\a.wav');
x = double(x);
FrameLen =256;
FrameInc =128;
s = enframe(x, FrameLen, FrameInc);
ss=s(125,:); %选取一帧语音信号(可以通过观察短时能量的分布来判断哪一帧是清音段还是浊音段)
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);
plot(ss);
axis([0,256,-1,1])
title('截取的语音段');
xlabel('样点数');
ylabel('幅度');
subplot(3,1,2);
plot(f);
axis([0,256,-1,1])
title('窗选语音信号');
xlabel('样点数');
ylabel('幅度');
subplot(3,1,3);
plot(pinlv,signal);
xlabel('频率/Hz');
ylabel('对数幅度/dB');
title ('加Hamming窗时语音频谱
2.加汉明窗的清音
clear;
close all;
x = wavread('f:\\k.wav');
x = double(x);
FrameLen =256;
FrameInc =128;
s = enframe(x, FrameLen, FrameInc);
ss=s(90,:); %选取一帧语音信号(可以通过观察短时能量的分布来判断哪一帧是清音段还是浊音段)
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);
plot(ss);
axis([0,256,-1,1])
title('截取的语音段');
xlabel('样点数');
ylabel('幅度');
subplot(3,1,2);
plot(f);
axis([0,256,-1,1])
title('窗选语音信号');
xlabel('样点数');
ylabel('幅度');
subplot(3,1,3);
plot(pinlv,signal);
xlabel('频率/Hz');
ylabel('对数幅度/dB');
title ('加Hamming窗时语音频谱
3.加矩形窗的浊音
clear;
close all;
x = wavread('f:\\a.wav');
x = double(x);
FrameLen =256;
FrameInc =128;
s = enframe(x, FrameLen, FrameInc);
ss=s(125,:); %选取一帧语音信号(可以通过观察短时能量的分布来判断哪一帧是清音段还是浊音段)
f=ss'.*rectwin(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);
plot(ss);
axis([0,256,-1,1])
title('截取的语音段');
xlabel('样点数');
ylabel('幅度');
subplot(3,1,2);
plot(f);
axis([0,256,-1,1])
title('窗选语音信号');
xlabel('样点数');
ylabel('幅度');
subplot(3,1,3);
plot(pinlv,signal);
xlabel('频率/Hz');
ylabel('对数幅度/dB');
title ('加矩形窗时语音频谱)
8.实验结果及其分析
浊音
(1) 短时能量
0.51 1.5
2 2.5
3 3.5
4
x 10
4
-101
2语音信号时域波形
样点数
幅度
050
100
语音信号的短时能量
帧数
短时能量
(2) 短时过零率
0.5
1
1.5
2 2.5
3
3.5
4
x 10
4
-1-0.500.5
1语音信号时域波形
样点数
幅度
102030
帧数
短时过零率
语音信号的短时过零率
(3) 短时傅里叶变换
01
截取的语音段
样点数幅度
50
100
150
200
250
01
窗选语音信号
样点数
幅度
-100
0频率/Hz
对数幅度/d B
加Hamming 窗时语音频谱
清音
(1) 短时能量
x 10
4
01
2语音信号时域波形
样点数
幅度
0204060
语音信号的短时能量
帧数
短时能量
(2) 短时过零率
x 10
4
-1-0.500.5
1语音信号时域波形
样点数
幅
度
50
100
150
200
250
300
350
051015
20帧数
短时过零率
语音信号的短时过零率
(3) 短时傅里叶变换
01
截取的语音段
样点数幅度
01
窗选语音信号
样点数
幅
度
500
1000
1500
20002500
3000
3500
4000
-100
0频率/Hz
对数幅度/d B
加Hamming 窗时语音频谱
(4) 显示清音短时过零率
x 10
4
01语音信号时域波形
样点数
幅
度
051015
20帧数
短时过零率
语音信号的短时过零率
加窗
(1)加汉明窗的浊音
50
100
150
200
250
-10
1
截取的语音段
样点数幅度
50
100
150
200
250
-10
1
窗选语音信号
样点数
幅度
1000
2000
30004000
5000
6000
-100
-500频率/Hz
对数幅度/d B
加Hamming 窗时语音频谱
(2)加汉明窗的清音
-101
截取的语音段
样点数幅度
50
100
150
200
250
-101
窗选语音信号
样点数
幅度
-100
-500频率/Hz
对数幅度/d B
加Hamming 窗时语音频谱
(3)加矩形窗的浊音
50
100
150
200
250
-101
截取的语音段
样点数幅
度
-101
窗选语音信号
样点数
幅度
-100
-500频率/Hz
对数幅度/d B
加矩形窗时语音频谱
分析:
(1)对于浊音与清音,浊音的幅值比较明显,有一个的波动,能清楚的看清楚它的周期;而清音类似于白噪声,没有明显的幅值,很平缓。
(2)浊音的短时能量高,轻音的短时能量低;浊音的短时过零率低,而清音的短时过零率高。
(3)总而言之,浊音对于分析语音信号是很有用的语音信号。
9.收获与体会
从这次实验中,收获不少。
能更进一步的了解浊音与清音的区别以及他们的相同点,他们的用途以及相关函数的表示方式与差别,例如:短时过零率、短时能量等。
对MATLAB的使用方法与相关函数又有了新的认识与了解。
这次实验让我学到了不少。
更加掌握了知识,从某种程度上,也增加了我学习MATLAB的兴趣。
也为我自己以后从事相关的事务做了一定的铺垫基础。