总 结
通过这次课程设计,使我对语音信号有了全面的认识,对数字信号处理的知识又有了深刻的理解,在之前数字信号与处理的学习以及完成课后的作业的过程中,已经使用过MATLAB,对其有了一些基础的了解和认识。通过这次练习是我进一步了解了信号的产生、采样及频谱分析的方法。以及其中产生信号和绘制信号的基本命令和一些基础编程语言。让我感受到只有在了解课本知识的前提下,才能更好的应用这个工具;并且熟练的应用MATLAB也可以很好的加深我对课程的理解,方便我的思维。这次设计使我了解了MATLAB的使用方法,学会分析滤波器的优劣和性能,提高了分析和动手实践能力。同时我相信,进一步加强对MATLAB的学习与研究对我今后的学习将会起到很大的帮助。
26
参 考 文 献
[1]胡航.语音信号处理[M].哈尔滨:哈尔滨工业大学出版社,2002. [2]丁玉美.高西全.数字信号处理[M].西安电子科技大学出版社,2006. [4]张威.MATLAB基础与编程入门[M].西安电子科技大学出版社,2006. [5]林福宗.多媒体技术基础[M].北京:清华大学出版社,2000.
[6]周渊,王炳和,刘斌胜.基于MATLAB的噪声信号采集和分析系统的设计[M].噪声控制.2004(7):52-54.
[7]何强,何英.MATLAB扩展编程[M].北京:清华大学出版社,2002:293-296. [8]朱学芳,徐建平.计算机语音信号处理与语音识别系统[J].南京邮电学院学报,1998,18(5—6):113—11.
[9]杨崇林,李雪耀,孙羽.强噪声背景下汉语语音端点检测和音节分割[J].哈尔滨工程大学学报,1997.18(5):28—32.
[10] 张雄伟,陈量,杨吉斌.现代语音处理技术及应用[M].北京:机械工业出版社.2003.
[11]韦晓东,等.应用倒谱特征的带噪语音端点检测方法[J].上海交通大学学报,2000,34(2):185—188.
[12]胡光锐,韦晓东.基于倒谱特征的带噪语音端点检测[J].电子学报.200028(10):95—97.
[13]hnson D E, Johnson J R, Moore H P.A Handbook of active filters[M].New Jersry,1980:1-72.
[14]GershoA,Gr RM.Vector signal Compression[M].Boston,Kluwer Academic Publishers,1998.
[15]Q.Zhang,A.BenvenisteWaveletNetworks [M].NeuralNetworks,2000.
27
致 谢
非常感谢我的导师张秀清老师!在张老师无微不至的教导下,我才能够顺顺利利的完成了毕业课程的设计。从课程设计材料的搜集到根据选题对素材的提取与整理,从Matlab的简易入手到程序的分析与设计,从理论与算法到程序的编写与仿真,每一步都有张老师的细心知道与耐心讲解。在平易近人学识渊博的张老师的熏陶下,使我感觉到自己知识的浅薄,在浩瀚的知识海洋面前,使我感觉到自己要不断进取。
非常感谢我的同学们,感谢他们给我的帮助与支持,使我在毕业设计的过程中少走了不少弯路。
非常感谢我的家人和朋友们,感谢他们从毕业设计以来对我的关心与支持! 最后,再次感谢信息所有的老师,感谢他们四年以来对我的栽培与教养!
28
附录一:
%语音信号时域频域分析
[y,Fs,bits]=wavread('2.wav');%读出信号,采样率和采样位数。 y=y(:,1);%取单声道作分析 sigLength=length(y); Y = fft(y,sigLength);
Pyy = Y.* conj(Y) / sigLength; halflength=floor(sigLength/2); f=Fs*(0:halflength)/sigLength;
figure;plot(f,Pyy(1:halflength+1));xlabel('Frequency(Hz)'); t=(0:sigLength-1)/Fs;
figure;plot(t,y);xlabel('Time(s)'); 附录二: %抽取的源程序
[y,fs,bs]=wavread('d:\\01.wav',[25000,75000]); y=y(:,1); lg=length(y); yx=(0:(lg-1))*fs/lg; yx=yx(1:lg/2); % sound(y,fs); figure(1); subplot(211); plot(y);
title('原始信号'); subplot(212); yf=abs(fft(y)); yf=yf(1:lg/2); plot(yx,yf);
ycq=zeros(1,lg); %先将抽取后的值全设为零
for i=1:80:lg; %通过循环,每隔80个点将抽取后的值赋值为原函数的 ycq(i)=y(i); %采样值 end
29
sound(ycq,fs); figure(2); subplot(211); plot(ycq);
title('抽取后的信号'); subplot(212); ycqf=abs(fft(ycq)); ycqf=ycqf(1:lg/2); plot(yx,ycqf); 附录三:
%短时平均能量,短时过零率 % function [x1,x2]=vad(x)
[x,Fs,bits] = wavread('e:\\235.wav') specgram(x,240,8000,80); x=double(x);
x=x/max(abs(x));%将幅度归一化到[-1,1] framelen=240;
frameinc=80;%设定帧长为240帧移为80 amp1=10; amp2=2; zcr1=10; zcr2=5; maxsilence=3; minlen=15; status=0; count=0; silence=0;
temp1=enframe(x(1:length(x)-1),framelen,frameinc); temp2=enframe(x(2:length(x)),framelen,frameinc); signs=(temp1.*temp2)<0; diffs=(temp1-temp2)>0.02;
zcr=sum(signs.*diffs,2);%计算过零率
amp=sum(abs(enframe(x(1:length(x)-1),framelen,frameinc)),2); %计算
30