实验二 语音信号的频域处理一、 实验目的、要求(1) 掌握语音信号频域分析方法(2) 了解语音信号频域的特点(3) 了解谱减法作为频域语音增强的原理与编程实现 (3)了解谱减法的缺点,并分析产生该缺点的原因二、实验原理 语音虽然是一个时变、非平稳的随机过程但在短时间内可近似看作是平稳 的因此如果能从带噪语音的短时谱中估计出“纯净”语音的短时谱,即可达到 语音增强的目的由于噪声也是随机过程,因此这种估计只能建立在统计模型基 础上利用人耳感知对语音频谱分量的相位不敏感的特性,这类语音增强算法主 要针对短时谱的幅度估计短时话幅度估计概述 设一帧加窗后的带噪语音为y(n)= s(n) d(n) 卫 n N- 1 (2.1)其中s(n)为纯净语音,d(n)假设为平稳加性高斯噪声将y(n)在一组基{Q (n)}上展开,使展对系数为各不相关的随机变量设y(n) k的相关函数为R (n,m),由K_L展开得知他(n)}满足 yk九(K)© (n)=亍 R (n, m)Q (m) (2.2)k y km=0则y(n)的展开式为y(n )=S Y © n )(2.3)k k< K=0Y =Sy(n © n )k kn=0如果y(n)的相关长度小于帧长N,则© (n)的近似函数为k申(n)=k1J2兀exp j(2.4)可见y(n)的展开过程实际上相当于离散博里叶交换,其展开系数(为傅里叶 变换系数。
由 y(n) = s(n) + d(n),则有:Y = S + Nk k k其中 Y =1Y lexpLj」、S =1S lexpL j」、N 分别为 y(n)、s(n)及d(n)的k k k k k k k傅里叶交换系数由于假设噪声是高斯分布的,其傅里叶系数 N 相当于多个高k斯样本的加权和,故可认为仍然为高斯分布其均值为0,方差可通过无语音时 对噪声的分析而获得语音增强的任务就是利用已知的噪声功率谱信息,从 Y 中估计出 S 由于 kk 人耳对相位不敏感,故只需估计出| S |,然后借用带噪语音的相位,进行傅里叶 k 逆变换就可得到增强的语音基于短时谱幅度估计的方法的原理图如图2.1所示图 2.1 短时谱估计原理图在短时谱幅(STSA)估计基础上,人们提出了许多语音增强算法基本思想 是利用输入带噪语音短时谱幅来估计清洁语音短时谱幅,结合带噪语音相位信 息,得到增强信号运用短时傅里叶变换(STFT)和重叠相加是短时谱估计技术中最常用的方法 输入信号y(n)的短时谱幅I Y(k)1与一个修正因子相乘,得到增强信号谱幅度 I S(k)l (通常修正因子与噪声信号d(n)谱幅估计密切相关);或将含噪语音谱幅 减去噪声谱幅估计 , 得到增 强信号谱 幅,这些方 法统称 为相减类型 算法 (subtractive—type algorithms)。
噪声谱幅估计可以通过有声、无声检测获取一 般认为噪声与信号不相关,增强信号谱幅| S(k)|是清洁语音信号s(n)的谱幅估 计通常假设人耳对含噪语音相位产生的畸变不敏感,所以进行IDFT恢复成时 域信号时,含噪语音的相位一般不作处理三、 使用仪器、材料微机(带声卡)、耳机,话筒四、 实验步骤(1) 分析含噪语音信号的频谱(幅度谱和相位谱)(2) 获取噪声信号频谱(幅度谱)(3) 对含噪语音信号进行分帧并进行加窗处理(4) 将含噪语音信号谱和噪声谱作为输入,进行谱减法(5) 回复增强语音信号帧.(6) 对比输入信号与增强信号波形,分析算法对其产生的影响.五、实验过程原始记录(数据,图表,计算)假设y(n)为含噪语音离散时间序列,由清洁语音信号s(n)和非相关加性噪声 信号d(n)组成y(n)可表示为(2.5)y (n) = s (n) + d (n)将输入信号按帧处理,前后帧之间重叠(一般为 50%),对每帧含噪语音进 行加窗处理,然后进行 FFT 变换,变换到频率域含噪语音的能量谱可以表示 为(2.6)I Y(k) |2 - | S(k) |2 +1 D(k) |2其中Y(k)为N—1 .2 加nY (k) = £ y(n)e—j n = I Y (k) I eg(k) (2.7)n=0其中申(k)为含噪语音Y(k)的相位。
由于没法直接得到含噪语音中噪声能量谱I D(k) I2,一般将无声阶段的数帧 噪声信号进行能量谱加权平均得到噪声能量谱估计I D(k) I2假设噪声与语音信 号不相关,语音能量谱估计为I S(k) I2 = I Y(k) I2 -1 D(k) I2 (2.8)其中清洁语音能量谱估计I S(k) I2由含噪语音能量谱减去噪声能量谱估计得 到由于噪声能量谱估计与含噪语音中噪声能量谱之间存在差异,式(3.4)可能出 现负值,为了避免能量谱出现负值,将这些负值设为零,这一处理称为半波整流 (half-wave rectification)通过半波整流,清洁语音能量谱估计I S(k) I2可表示为I S(k)|2 =| (2.9)〔0 当 I S(k)|2 < 0结合含噪语音相位信息,通过逆离散傅里叶变换(IDFT)得到时域清洁语音信 号的估计信号s(n)S(n) =IDFT(I S(k) I emk)) (2.10)其中增强语音信号频谱S(k)也可以通过时变滤波器G(k)重建S(k) = G(k) Y(k) (2.11)式中时变滤波器(或称为增益函数)G(k)可表示为G (k) =(1 — a -I D (k )|2 )0.5IY(k) I2如果I D(k) |2I Y (k ) |2(2.12)(P-I D (k )|2 )0.5|Y (k) |2否则六:实验结果,及分析规一O化幅度值0.5 11.5 2 2.53.5 X104(a) 原始含噪语音归一化幅度值0.5 11.5 2 2.5(b) 谱相减增强语音3 3.5样本数〔个)-0.5■1o0.51.52.5(c) 原始含噪语音3 3.5X104样本数(亍)归一化幅度值0.5-0.5■1o2.50.5 1 1.5 2(d) 谱相减增强语音图 2.2 谱减法结果分析实验结果:图2.2中(a), (c)为不同信噪比输入含噪语音信号,3 3.5样本数〔个)图2.2中(b), (d)为对应增强语音信号。
当信噪比较低时,降噪效果较差并且引入音乐噪声 算法缺陷分析:(1) 不可避免的引入音乐噪声要有效地滤除含噪语音中的噪声,需要准确地估计含 噪语音中噪声的频谱噪声谱估计越准确,增强信号谱中音乐噪声越小然而,由于不能直 接得到噪声谱,在绝大多数谱相减算法中,通过加权平均无声阶段噪声谱得到噪声谱估计, 这种噪声谱估计与含噪语音中的瞬时噪声谱存在差异,噪声平稳性越差,差异越大,由于这 种差异的存在,谱相减不可避免地引入音乐噪声2) 半波、全波整流 式(3.4)中负能量值的产生是由于噪声谱估计发生了错误这些负值用半波整流(被设定 为 0 )或全波整流(被设定为绝对值),这样处理并没有纠正这种错误,可能导致时域信号 更进一步的失真3) 用含噪语音的相位作为增强语音的相位 在生成增强时域信号时,含噪语音的相位并没有作任何修改这是基于这样一个事实, 相位的失真对语音质量下降造成的影响不大当信噪比比较高(>5dB )时,相位失真确实 对语音质量的影响不大,然而,当信噪比较低时(<0dB)这种由于相位失真造成的语音质 量下降是可以感觉得到的七、实验参考程序代码谱相减原程序代码hanning=zeros(1,256);speech=zeros(1,32000);dd=wavread('D:\语音信号处理实验 2\noise.wav');%噪声;sp=wavread('D:\语音信号处理实验2\speech.wav');%纯语音;hanning=zeros(1,256);noise=dd(10000:45000);speech=sp(25000:60000);e2=noise+speech;szeros=zeros(1,32000);soutput1=zeros(1,32000);j=sqrt(-1);a=3,b=0.01;Snoise=zeros(1,256);phase=zeros(1,256);for n=1:256hanning(n)=(1/2)*(1-cos((2*pi)*(n-1)/255));end % to get noise spectral Noise=zeros(1,256);Noise1=zeros(1,256);for i=1:3 Noise1(1:256)=abs(fft(e2(1+i*256:256*(i+1)).*hanning')); Noise=Noise+Noise1/3;end% spectral subtraction algrithmfor i=1:245 %%第 i 帧snoise=e2((i-1)*128+1:(i-1)*128+256).*hanning'; phase=angle(fft(snoise)); % to get noisy signal spectral phase Snoise=abs(fft(snoise)); % to get noisy signal spectral amplitudefor n=1:256if(Snoise(n)A2-Noise(n)A2)<0 %the power of enhanced speech must be positive Sout0(n)=0.1*Snoise(n);elseSout0(n)=(Snoise(n)A2-(Noise(n)*1.5)A2)A0.5; %power type spectral subtractionendS0(n)=Sout0(n)*(cos(phase(n))+j*sin(phase(n))); % to get enhanced speech spectral amplitudeendsout0=ifft(S0); szeros(((i-1)*128+1):((i-1)*128+256))=real(sout0);soutput1=soutput1+szeros; szeros=zeros(1,32000);end%the following is for SNR calculation sp_energe=zeros(1,256);sn_energe=zeros(1,256);SN=zeros(1,256); in_SNR1=zeros(1,125);out_SNR1=zeros(1,125);snoise=zeros(1,256); for i=1:240snoise=speech((i-l)*128+l:(i-l)*128+256).*hanning';%第 i 帧清洁语音存放到 snoiseSN=noise((i-l)*128+l:(i-l)*128+256).*hanning'; %第 i 帧清洁语音存放到 SN%in_SNRl(i)sp_energe(i)=snoise(1:256)'*snoise(1:256);%第 i 帧清洁语音 snoise 的能量存放到 sp_energe(i) sn_energe(i)=SN(1:256)'*SN(1:256);%第 i 帧皂声 SN 的能量存放到 sn_energe(i) in_SNR1(i)=10*log10(sp_energe(i)/sn_energe(i));%第 i 帧含噪语音信号输入信噪比 in_SNR1(i)SN=soutput1((i-1)*128+1:(i-1)*128+256).*hanning; %第 i 帧输出信号存放 SN sn_energe1(i)=SN(1:256)*SN(1:256)';%第 i 帧输出信号 SN 能量 out_SNR1(i)=10*log10(sp_energe(i)/abs(sn_energe1(i)-sp_energe(i)));%第 i 帧增强信号输出信噪比 endplot(e2);hold onplot(soutput1,'r'); plot(speech,'g');figure plot(in_SNR1) hold on plot(out_SNR1,'r')figure plot(hanning);%sound(speech);%sound(e2);sound(soutput1);。