1、南京邮电大学电子信息科学与技术专业程序设计 摘要 在电子信息工程领域,有许多问题的解决需要我们估计一个随机过程在频率域上的功率分布,这样的问题有很多,譬如:设计滤波器消除噪声,信号的回波抵消,信号的特征抽取与表示等等。 谱估计的分类,通常分为两类,一类是参数法谱估计,一类是非参数法谱估计。参数法谱估计通常对数据进行建模,如把数据建模成滑动平均模型(Moving Average),或者自回归(Autoregressive)模型,而非参数法除了要求信号满足广义平稳之外,没有其它的统计假设。与非参数法相比较,参数法的优点是在一个给定的数据集合上能够有较少的偏差(Bias)与方差(Vari
2、ance). 对于非参数法谱估计,常用的方法有: • 周期图法 • Bartlett 法(平均多个周期图, 采用不同数据块) • 自相关法 (Blackman-Tukey 法) Abstract In the electronics and information engineering field, there are many problems we need to estimate a random process in frequency domain of the power distribution, so that there are many problems, s
3、uch as: designing filters to eliminate noise and echo cancellation signal, the signal feature extraction and said so. Classification of spectral estimation is usually divided into two categories, one is parametric spectral estimation, a class of non-parametric spectral estimation. Parametric spectr
4、um estimation is usually the data model, such as the data modeling into a moving average model (Moving Average), or autoregressive (Autoregressive) model, rather than the parametric approach other than the demand to meet the wide-sense stationary signal, there is no other statistical assumptions. We
5、ars with the non-parametric comparison, the parameter method has the advantage of a given data sets can have less bias (Bias) and variance (Variance). For non-parametric spectral estimation, commonly used methods are: • Periodogram • Bartlett method (average number of cycle maps, using differen
6、t data blocks) • Auto-correlation method (Blackman-Tukey method) 引言 本论文主要采用非参数法谱估计,对语音信号进行功率谱估计,采用自相关法来对功率谱进行估计。 正文 功率谱估计的方法有直接法(也叫周期图法)、间接法、Bartlett法和welch法等,本文中实现采用自相关法 (Blackman-Tukey 法)来对一语音信号进行功率谱估计。 自相关法功率谱估计的原理: 由Wiener-Khintchine 定理,一个平稳随机过程的功率谱为自相关函数的 复利叶变换: 其中,rxx(m)为平稳
7、随机过程的自相关函数。 由(1-1)式,在无限长序列rxx(m)上采用有限长窗口w(m)(矩形窗)截取,就可以获得平稳随机过程的功率谱的估计。 问题分析:根据实验原理,我们知道,首先要用Wavread函数读入wav文件中的数据,然后再对读入的数据进行处理。读入后,发现一共为10715个点。由于语音信号是一种典型的非平稳信号,而在10~20ms内可以认为是短时平稳的。所以要对数据进行分帧,用buffer函数可以实现这种功能。由于wav的采样率为16000Hz,所以应有20*16000/1000=320个采样点。又根据原理要对每帧进行基二fft算法,所以,选择每帧512个采样点。又
8、由于每帧之间具有相关性,所以进行50%的帧重叠以保持帧与帧之间的相关性。分完帧后,对其中的一帧进行自相关函数的运算,由于自相关函数与信号的功率谱是一对复利叶变化对,再进行复利叶变换,再转化成以分贝(dB)为单位的数值,就可以求解出功率谱了。 可能用到的matlab 指令: Wavread()音频信号的读取 buffer( )用于信号分帧 fft() 快速傅立叶变换 xcorr() 求自相关函数 窗函数: hamming(),hanning(),blackman()。 源程序代码: W0=wavread('ExperimentalData.wav'); %原语音信号读入
9、figure;plot(W0); Cx1=buffer(W0,512,256); %分帧 Cx2=Cx1(:,3); %取出其中一帧 Cx3=Cx2'; Cx=xcorr(Cx3,'unbiased'); Cxk=fft(Cx); %快速傅里叶变换 P=20*log10(abs(Cxk)); %求解PSD figure;plot(P);title('Pxx'); n=input(''); %输入所加窗的长度 W2
10、hanning(n);figure;plot(W2); windows=windowing(Cx,W2); figure;plot(windows);title('hanning'); %hanning W3=blackman(n);figure;plot(W3); windows=windowing(Cx,W3); figure;plot(windows);title('blackman'); %blackman W4=hamming(n);figure;plot(W4); windows=windowing(Cx,W4); figure;pl
11、ot(windows);title('hamming'); %hamming 其中调用的子函数如下(实现加窗处理的功能): function windows=windowing(A,B); m=min(length(A),length(B)); for k=1:m, windows(k)=A(k).*B(k); end; 实验结果:在输入n=1023时; 原始语音信号 hanning windowing Blackman windowing hamming window 实验结果分
12、析:在经过分帧后,对其中的一帧进行自相关运算,再进行快速傅里叶变换,就能求解出功率谱,对以上实验结果分析可知,能用此种方法解决信号的功率谱的估计,对于不同的加窗的长度都能实现对自相关函数的加窗处理。 结束语 通过本次实验,了解了如何用自相关法对语音信号进行功率谱的估计,以及所涉及到的知识和思想方法,更好的让我理解了通信原理中的所学过的一些知识,在语音信号处理中是需要对信号进行分帧处理,在分帧时,由于语音信号各帧之间的相关性,所以要保留一部分相同的数据,这样才能保证处理的完整性,在对一帧数据进行处理时,如果采用自相关法,需要进行自相关函数求解,快速傅里叶变换,了解了自相
13、关函数和信号的功率谱是一对傅里叶变换对的结论,对信号的功率谱进行了很好的估计,对语音信号的性质能很好的分析,更深入理解了其原理及其方法。 参考文献 [1]、《数字信号处理》——理论、算法与实现,清华大学胡广书编著,北京:清华大学出版社, 1997。 [2]、《现代谱估计原理与应用》[美]S.M.凯依著,黄建国等译,北京:科学出版社,1994。 总结 在刚开始对语音信号处理时没有用的分帧这样的处理方法,而是对将该语音信号作为一帧进行处理,导致求解出来的功率谱非常的陡峭,不是很平滑,所以在后来的程序中,进行分帧处理后,所求出的功率
14、谱明显平滑。 在此次所做的程序设计中,还有许多的不足之处与需要改进的地方,在处理语音信号时,只是对其中的一帧进行了处理,缺没有对所有的帧进行统计,这样就不具有代表性,不能代表整个语音信号的特性;在处理对自相关函数加窗时,加窗处理过程感觉有点简单,只是取窗和自相关函数长度的较小值作为基准,进行加窗处理,这只是一般的想法,其实可以更近一步;让用户输入一个所需要加窗长度时,如果用户输入的长度不符合要求的时,应当给出提示,让用户重新输入,而现有的程序只能对所输入的数据进行加窗处理,而且只能处理一次变退出了程序,没有健壮性。 在对其中的一帧进行处理时,由于这一帧的长度是固定的,所有不需要再进行加窗截
15、断处理,在进行自相关函数运算时,自相关函数中所带的参量也是需要考虑的,由于是自相关,所以后面一个变量可以缺省不写,也能求出;在快速傅里叶变换时,在此程序中默认的长度就是自相关函数的长度,如果需要更改FFT的长度时,又应该如何处理,这是应该去考虑的,在进行傅里叶变换后所得出的结果直接进行功率谱的估计是不行的,只有转化成以分贝(dB)为单位,才能估计出功率谱。 在设计过程中,由于加窗的次数较多,所以定义了一个功能函数,调用起来方便,减少了复杂度,使程序的运行更为迅速,同样的,在加窗时,不是定义好了窗长,而是让用户自己输入,更加具有实际性。 在用自相关进行功率谱估计时,能不能将其算法的复杂性进行简化,和现在的运算方法比较的话,可以大大减少运算量,加窗处理时,能不能更加的符合实际,使得加窗处理能真正的别运用,语音信号的性质能很好的分析出来,语音信号处理方法更实际,更简明,更迅速。 8






