预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共14页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

实验一、语音信号的时域特性和频域特性 学院:信息与通信工程学院 专业:通信工程 班级:104 学号:2010026410 姓名:黄余芳 指导教师:崔艳秋 实验名称 语音信号的时域特性和频域特性 实验类型 验证性实验 实验目的 观察并验证语音信号的时域特性和频域特性,理解并掌握典型的语音信号时域分析方法和频域分析方法,为深入学习数字语音信号处理的相关理论奠定基础。 实验设备 安装有MATLAB的计算机 实验内容 输入并运行MATLAB代码。 观察语音信号的时域特性 (1)发一个清音和一个浊音,由麦克风采集语音数据,参考实验内容1中的程序将这些数据分别存成两个“.wav”文件(例如[a]的语音存为“a.wav”,要求采样率为8000),存在本人的文件夹中。 (2)读取WAV文件,显示语音波形,观察清音和浊音波形的差异。 (3)读取WAV文件,计算并显示语音的短时能量(要求分帧加窗的帧长为256,帧移为128),观察并分析清音和浊音短时能量的差异。 (4)读取WAV文件,计算并显示语音的短时过零率(要求分帧加窗是的帧长为256,帧移为128),观察并分析清音和浊音短时过零率的差异。 3.观察语音信号的频域特性 (1)读取WAV文件,计算并显示一帧语音的原始信号、加窗信号、短时频谱(要求分帧加窗的窗函数为汉明窗、帧长为256,帧移为128),观察并分析清音和浊音短时频谱的差异。 (2)读取WAV文件,计算并显示不同窗函数情况下一帧语音的加窗信号、短时频谱(要求分帧加窗的窗函数分别为矩形窗和汉明窗、帧长为256,帧移为128),观察并分析不同的窗函数对短时谱分析的影响。 相关函数 wavread、plot、fft MATLAB程序代码 1.输入并运行以下MATLAB代码。 (1)短时能量 clear; closeall; 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; closeall; 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; closeall; 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('截取的