2010~2011学年第一学期“信号与信息处理”课程设计讲义——语音处理杨顺辽李永全一、设计目的语音处理是信号与信息处理的重要内容之一,通过本课程设计,使学生理解数字信号处理的有关理论和方法在语音处理中的具体应用。
课程设计的目的归纳如下:1、掌握语音信号的特点;2、掌握语音处理的基本理论和方法;3、掌握基于Matlab编程实现语音的获取、显示、频谱分析、短时能量、短时自相关以及倒谱复倒谱的分析方法;4、掌握语音基音频率及共振峰频率的检测方法。
二、设计任务在课程设计中,学生应该完成以下任务:1、语音的录制,包括采样率、量化参数的确定;2、语音数据的读取显示;3、数字滤波器的设计及对语音的滤波处理;4、语音数据的频谱分析;5、语音的短时能量和短时自相关的计算;6、语音倒谱及复倒谱的计算;7、语音基音频率及共振峰频率的检测。
三、设计内容1、语音的特点语音信号从语音形成的机理上来看,可以分为两大类。
一类是发声时声带周期性地开启和闭合,在声门处产生一个准周期的脉冲序列空气流,这种语音叫“浊音”(如声音“啊”)。
还有一类是在发声时,声门是开启的,气流在声道中摩擦或口唇的爆破而发生,这类语音叫做“清音”(如声音“咝”)。
显然,浊音具有周期性,这个周期称为基音周期,而清音不具有周期性。
气流通过声道时,在声道中会产生共振,共振谐振频率称为共振峰。
在语音处理中,一个很重要的任务就是对基音周期的检测和共振峰频率的确定。
人耳能够听到的声音频率范围为20Hz~20KHz,按照采样定理,采样率应该不低于40KHz。
但是在语音中,对语音可懂度和语音特性有重要影响的信号频率一般在5KHz以内,因此,实际语音信号处理中,采样率往往取8KHz和10KHz,在对语音质量要求较高时,采样率常常取11.025KHz、22.05KHz和44.1KHz。
量化的过程就是将采样后的样点数据用有限的二进制码表示的过程,量化必然会产生量化误差。
语音信号在量化时,如果采用8位二进制码量化,则信噪比在40dB左右。
语音波形的动态范围往往能达到55dB,因此量化位数应该在10位以上,实际常用12位。
语音信号是随时间变化的,是一个非平稳的随机过程,即具有时变特性,不能直接采用数字信号处理的方法来进行处理。
但是语音信号在较短的时间范围内可以看作是特性保持不变的,即具有短时平稳性。
因此在语音处理中,“短时分析”贯穿始终。
所谓短时分析,就是将语音分成一段一段,然后对每一段进行分析,分段的过程其实就是第4章介绍的加窗处理,每一段称为一“帧”。
语音通常在10~30ms内保持相对平稳,所以语音帧时长一般取10~30ms。
如采样率为8KHz时,语音帧长度在80~240点之间。
2、语音的录制语音的录制过程中,需要确定的两个参数是采样率和量化位数。
在本设计中,采样率取8KHz,采用8bit量化。
Matlab中语音录制函数为wavrecord,调用格式如下:x=wavrecord(n*Fs,Fs,uint8)%用采样率Fs对语音采样,录制n秒的语音信号,8bit量化,语音数据存放在变量x中,变量x的长度为n*Fs。
显示语音波形可用plot函数,比较简单,可查看Matlab的帮助文件。
(a) 浊音 (b) 清音图6-1 语音时域波形图1为两段语音的时域波形,图1(a) 为发浊音“啊”时的语音波形。
从波形中可以看出,该语音具有明显的周期性,周期为44个样点,由于语音采样率为8KHz,所以该语音的基音周期为44/8000=0.0055s,即基音频率为181.8Hz。
图1(b)为发清音“丝”时的时域波形,从波形可以看出,该语音不具有周期性,类似于随机噪声的特性。
所以,语音的基音周期检测,都是针对浊音语音的,而清音是不能从中检测出基音周期的。
3、语音的短时能量即计算一帧语音数据的能量,能量即样点值的平方和。
注意语音处理采用短时处理技术,短时能量是依次计算每帧数据的能量。
分帧时为了保证前后帧之间的连续性,往往帧间重叠帧长的一半长度。
分帧的程序如下:nx=length(x);%x为语音数据nwin=200;%每帧长200点ninc=100;%帧间重叠100点nf = fix((nx-nwin+ninc)/ninc);frame=zeros(nf,nwin);indf= ninc*(0:(nf-1)).';inds = (1:nwin);frame(:) = x(indf(:,ones(1,nwin))+inds(ones(nf,1),:));w =ones(nwin)';frame= frame.* w(ones(nf,1),:);%frame为分帧结果图2是对一段语音的时域波形和短时能量波形。
从语音的时域波形可看出,该语音中既包含浊音(幅度值较大的部分),也包含清音(幅度值近似为0的部分)。
为了提取基音周期,必须区分出浊音段语音数据。
从短时能量处理结果来看,短时能量处理的结果对浊音和清音的区分更加明显,能够更好的确定浊音语音的起始点和终止点,即具有端点的检测的功能。
图2 语音的时域波形和短时能量波形4、语音的滤波处理在提取基音频率时,一般基音频率在1000Hz以内,为了便于使提取的基音频率较准确,往往在提取之前进行截止频率为900Hz的低通滤波处理。
滤波器可以采用IIR数字滤波器,也可以采用FIR数字滤波器。
滤波器的指标为:f p=900Hz;f s=1200;A p=3dB;A s=40dB。
设计出滤波器后再对语音进行滤波处理。
在Matlab中滤波可由filter函数来实现,调用格式如下:y=filter(b,a,x)%用分子分母多项式系数为b和a滤波器来对信号x进行滤波,滤波后的输出结果放在y 中。
本函数既可用于IIR滤波器,也可用于FIR滤波器,当滤波器为FIR滤波器时,a为1图3 滤波前后的语音波形对比图3为滤波前后浊音语音的对比,滤波前的语音变化较剧烈,即具有一定的高频成分,滤波后的语音波形变化较平缓,表明高频部分已被滤除。
要详细地看出哪些频率成分被滤除,需要通过下一步的频谱分析。
5、语音的频谱分析语音是时变的信号,不能对语音数据直接进行频谱分析,需要采用短时处理技术。
所谓短时处理,就是对语音加窗阶截短,长度为200点左右,然后再对每段进行快速傅里叶变换进行频谱分析。
在Matlab中快速傅里叶变换的函数为fft,调用格式如下:y=fft(x,N)%对信号x进行N点的快速傅里叶变换(N可以省略)变换后的数据为复数,如显示其幅度,即为幅度谱。
注意横坐标与频率之间的对应关系。
最好将横坐标转换为频率。
如对图1(a)的浊音和图1(b)的清音进行傅里叶变换,来观察两个语音的频谱,结果如图4所示。
在语音信号处理中,傅里叶变换也是对语音的每帧进行傅里叶变换,称为短时傅里叶变换。
从图4(a)可以看出,浊音语音信号中包含了离散频率为5、9、13、18、23、27、32、36及68的谱线,也就表明该浊音中包含了这些频率的正弦周期信号。
语音采样率为8KHz,离散傅里叶变换的点数即数据长度,为200,根据离散频率与模拟频率的关系可知,第k个点对应的模拟频率为k×8000/200=40k。
因此,在浊音的频谱中,第一个谱线,即k =5对应的频率为200Hz。
这与在时域中观察结果不一致,原因是傅里叶变换的点数太小,为200,导致其频率分辨率为40Hz,也就是两个点之间的最小间隔为40Hz,显然频率分辨率太低。
要提高频率分辨率,就必须增加傅里叶变换的点数,当频率点数增加10倍时,其频率分辩率为4Hz,如要进一步提高频率分辨率,就要进一步增加傅里叶变换的点数。
4(b)清音的频谱表明,该清音除了有较大的直流分量(对应k=0处的谱线)外,再也没有明显的、幅度较大的谱线,类似于随机噪声的频谱。
(a) 浊音的频谱 (b) 清音的频谱图4 语音的频谱图5为滤波前后语音频谱图,即图3波形的频谱图。
显然,从其频谱图中可以明显的看出滤波的效果。
滤波前的语音中包含的频率成分最大达到了1400Hz左右,而滤波后的语音中,最高频率成分为900Hz,即采用的是截止频率为900Hz低通滤波的处理结果。
而900Hz 以内的信号保持不变,即低通滤波后对低频分量基本没有影响,仅仅是滤除了高频成分的信号。
这里,将傅里叶变换的结果进行了平移,调用了fftshift函数,调用格式如下:fftshift(x)%将x的前后对调该函数一般在fft函数后调用,使得fft的结果包含正、负频率成分。
当然还得与横坐标一起进行控制。
图5 滤波前后语音频谱的对比6、语音的短时自相关自相关运算具有以下一些特点:① 自相关在延时为0处具有最大值,即r xx (0)为自相关的最大值,为序列的能量; ② 周期序列的自相关也具有周期性,其周期与序列的周期相同,除了r xx (0)外与r xx (0)最近的极大值对应时间即为信号的周期;③ 非周期序列的自相关不具有周期性,但r xx (0)仍为最大值。
自相关的第2个特点可以用来检测周期信号的周期。
图6为浊音和清音的自相关结果。
(a) 浊音的自相关 (b) 清音的自相关图6 语音的自相关波形图6表明,浊音的自相关具有周期性,而清音的自相关近似为幅度很小的直流。
从图6(a)可以看出,该语音的自相关最大值出现在n =0处,由自相关的特点可知,n =0时的自相关为该序列的能量。
而除了n =0后的第一个极大值出现在n =±44处,这个间隔就是语音的基音周期,与时域观察结果完全相同。
显然,对语音进行自相关处理,不仅能较精确地估计出基音周期,而且也能够用来检测语音帧是浊音还是清音帧,这在语音处理中具有重要意义。
在Matlab 中计算自相关的函数为xcorr ,调用格式如下:r=xcorr(x)%计算x 的自相关,结果存放在r 中7、语音的倒谱及复倒谱计算语音的产生可以看作是声门激励信号和声道响应系统的卷积,最后所得的语音信号是声门激励信号和声道响应系统的共同作用。
为了能分别分析激励信号和声道系统的特性,我们常常希望能将两者区分开。
所谓复倒谱,是对序列x (n )的傅里叶变换)(ωj e X 取对数()[]ωωj j e X e Xln )(ˆ= (1) 然后再进行傅里叶逆变换所得序列)(ˆn x即为序列x (n )的复倒谱。
显然,如果将)(ωj e X 表示成幅度和相位的形式,则有 ()()[]ωωωj j j e X j e X e Xarg ln )(ˆ+= (2) 即包含了实部和虚部,实部为对数幅度谱,虚部为相位。
注意,复倒谱只是为了和下面要介绍的倒谱概念相区别,并不意味着它必为复数,当序列x (n )为实序列时,其复倒谱也为实数。
所谓倒谱是对序列x (n )的傅里叶变换)(ωj e X 的幅度取对数,即 ()ωωj j e X e Xln )(ˆ= (3) 然后再进行傅里叶逆变换所得序列c x (n )即为序列x (n )的倒谱。