本课题隶属于学校的创新性课题研究项目。2012年就已经作完了,今天一并拿来发表。php
--基于谱减法的语音信号加强算法..................................................................... 1算法
一:语音加强技术概述........................................................................................ 3编程
三:语音信号的相关特性.................................................................................... 3函数
1. 1 语音信号具备短时平稳性.............................................................. 3设计
1.2.语音信号能够分为浊音和清音....................................................... 33d
1.3.语音信号能够利用统计分析特征描述........................................... 4对象
3.1周期性噪声....................................................................................... 4
3.2脉冲噪声........................................................................................... 5
3.3宽带噪声........................................................................................... 5
3.4同声道语音干扰............................................................................... 5
3.5传输噪声........................................................................................... 5
四:国内外有关抗噪声技术的解决方案............................................................ 5
(1) 基于谱减法的语音加强................................................................... 6
(2) 自适应滤波法的语音加强............................................................... 6
(3) 短时对数谱的MMSE语音加强...................................................... 6
2 寻找稳健的语音特征做为特征参数......................................................... 6
3 基于模型参数自适应的噪声补偿算法..................................................... 6
五:语音加强算法的三种具体算法分析与比较................................................ 6
(1) 谱减法算法的理论分析................................................................... 6
(2) 经过语音加强技术改善语音质量的过程....................................... 7
(3) 谱减法的流程图............................................................................... 7
(4)谱减法原理图.................................................................................... 8
2:自适应噪声抵消法.................................................................................. 9
(1) 自适应滤波器原理........................................................................... 9
(2) 结构框图......................................................................................... 10
3:短时对数谱的MMSE语音加强算法................................................... 11
六:实验环境(matlab)简介........................................................................... 13
七:算法的实现及仿真结果.............................................................................. 14
在通讯过程当中语音受到来自周围环境、传输媒介引入的噪声,使接收到的语音信号并不是纯净的原始语音信号,而是受噪声污染的带噪语音信号。这里的“噪音”定义为所需语音信号之外的全部干扰信号。
干扰信号能够是窄带的或宽带的、白噪声的或有色噪声的、声学的或电学的、加性的或乘性的,甚至能够是其它无关的语音。由噪声致使的语音质量的降低会使许多语音处理系统的性能急剧恶化。采用语音加强技术进行预处理,可有效地改善系统性能。
对收听人而言主要是改善语音质量,提升语音可懂度,减小疲劳感;对语音处理系统(识别器、声码器、手机)而言是提升系统的识别率和抗干扰能力。
语音加强与语音信号处理理论有关,并且涉及到人的听觉感知和语音学。噪声来源众多,随应用场合不一样而特性各异,所以难以找到一种通用的语音加强算法能够适用于各类噪声环境,必须针对不一样环境下的噪声采起不一样的语音加强策略。所以,要进行语音加强首先要了解语音特性、人耳感知特性和噪声特性。
声道形状有相对稳定性,在一段时间内(10ms~30ms),人的声带和声道形状是相对稳定的,可认为其特征是不变的,于是语音的短时谱具备相对稳定性,在语音分析中能够把语音信号分为若干分析帧,每一帧的语音能够认为是准稳定的。语音加强能够利用这种短时平稳性。
语音能够分为周期性的浊音和非周期性的清音。在语音加强中,能够利用浊音的周期性特征,采用梳状滤波器提取语音份量或者抑制非语音信号,而清音则难以与宽带噪声区分。
做为一个随机过程,语音信号能够利用许多统计分析特征进行分析。语音的短时谱幅度统计特征是时变的,只有当分析帧长趋于无穷大时,才能近似具备高斯分布。在高斯模型的假设中,能够认为傅里叶展开系数是独立的高斯随机变量,均值为零,而方差是时变的。在有限帧长时这种高斯模型只是一种近似的描述,能够做为分析的前提在宽带噪声污染的带噪语音加强中应用。
人耳对语音的感知主要是经过语音信号频谱份量幅度获取的,对各份量相位则不敏感,对频率高低的感觉近似与该频率的对数值成正比。人耳具备掩蔽效应,人耳除了能够感觉声音的强度、音调、音色和空间方位外,还能够在两人以上的讲话环境中分辨出所须要的声音,这种分辨能力是人体内部语音理解机制具备的一种感知能力。人类的这种分离语音的能力与人的双耳输入效应有关,称为“鸡尾酒会效应”。语音加强的最终效果度量是人耳的主观感受,因此在语音加强中能够利用人耳感知特性来减小运算代价。
根据与输入语音信号的关系,噪声可分为加性噪声和非加性噪声两类。对某些非加性噪声而言,能够经过必定的变换转换成加性噪声。语音处理中的加性噪声大致上能够分为周期性噪声、脉冲噪声、宽带噪声和同声道其余语音的干扰等。
周期性噪声主要来源于发动机等周期性运转的机械,电气干扰也会引发周期性噪声。特色是频谱上有许多离散的线谱。实际信号受多种因素的影响,线谱份量一般转变为窄带谱结构,并且一般这些窄带谱都是时变的,位置也不固定。必须采用自适应滤波的方法才能有效地区分这些噪声份量。
脉冲噪声来源于爆炸、撞击、放电及突发性干扰等。特征是时间上的宽度很窄。在时域消除脉冲噪声过程以下:根据带噪语音信号幅度的平均值肯定阈值。当信号超出这一阈值时判别为脉冲噪声。而后对信号进行适当的衰减,就可彻底消除噪声份量,也可使用内插方法将脉冲噪声在时域上进行平滑。
宽带噪声来源不少,热噪声、气流噪声及各类随机噪声源、量化噪声均可以视为宽带噪声。宽带噪声与语音信号在时域和频域上基本上重叠,只有在无话期间,噪声份量才单独存在。所以消除这种噪声比较困难。对于平稳的宽带噪声,一般能够认为是白色高斯噪声。
干扰语音信号和待传语音信号同时在一个信道中传输所形成的语音干扰称为同声道语音干扰。区别有用语音和干扰语音的基本方法是利用它们的基音差异。考虑到通常状况下两种语音的基音不一样,也不成整数倍,这样能够用梳状滤波器提取基音和各次谐波,再恢复出有用语音信号
这是传输系统的电路噪声。处理这种噪声能够采用同态处理的方法,把非加性噪声变换为加性噪声来处理。
目前国内外有关抗噪声技术的的研究成果的三类解决方法:
采用语音加强算法,提升语音识别系统前端预处理的抗噪声能力,提升输入信号的信噪比。
寻找稳健的语音特征做为特征参数,实验证实,这类参数对宽带语音具备较好的抗噪性;
谱减法是利用噪声的统计平稳性以及加性噪声与语音不相关的特色而提出的一种语音加强方法。这种方法没有使用参考噪声源,但它假设噪声是统计平稳的,即有语音期间噪声的幅度谱的指望值与语音间隙噪声的幅度谱的指望值相等。用无语音间隙测量计算获得的噪声频谱的估计值取代有语音噪声的频谱,与含噪声语音频谱相减,获得语音频谱的估计值。当上述差值获得的负的幅度值时,将其置零。因为人耳对语音的感知主要是经过语音信号中各频谱份量幅度得到的,对各份量的相位不敏感。所以,此类语音加强方法将估计的对象放在短时谱幅度上。
假设带噪信号为:
y(n)=s(n)+d(n),0<=n<=N-1
其中s(n)为纯净语音,d(n)为平稳加性噪声,y(n)一般须要加窗处理来消除分帧是带来的阶段效应,这里为方面依然使用y(n)表示加窗处理后的带噪信号。因为实际的分析帧长有限,傅里叶系数之间存在着必定的相关性。假设s(n)知足高斯分布,其傅里叶变换至关于多个高斯样本的加权和,仍然能够认为知足高斯分布,均值为0,方差能够经过无语音期间的噪声分析获得。基于短时谱幅度估计的语音加强就是利用已知的噪声功率谱信息,从中估计出。因为人耳对相位不敏感,为此只要估计出Sk,而后利用带噪语音的相位,进行傅里叶反变换就可获得加强的语音。基于语音短时谱估计方法的通常原理以下所示。根据实现估计的方法不一样,能够分为谱减法,维纳滤波法和最小均方偏差
谱减法在频域将带噪语音的功率谱减去噪声的功率谱获得纯净语音功率谱估计,开方后就获得语音幅度谱估计,用带噪语音的相位来近似纯净语音的相位,再采用反傅里叶变换回复时域信号。它的有点是比较简单,只须要进行反傅里叶变换,并且实时实现较容易。但谱减法适用的信噪比范围较窄,在信噪比较低时对语音的可懂度损伤最大,这是由于信噪比主要表明了由浊音决定的大信号能量,而语音可懂度主要取决于元音和相对较小的表明辅音的信号。因此,实际应用时除了要下降噪声外,还要兼顾语音的可懂度和天然度。另外,因为频谱直接相减会使加强后的语言产生“音乐噪声”,它具备必定的节奏性,听上去相似音乐声,由此而得名。
利用噪声的统计平稳性以及加性噪声与语音不相关的特色而提出的一种语音加强方法。没有使用参考噪声源,但它假设噪声是统计平稳的,即有语音期间噪声幅度谱的指望值与无语音间隙噪声的幅度谱的指望值相等。用无语音间隙测量计算获得的噪声频谱的估计值取代有语音期间噪声的频谱,与含噪语音频谱相减,获得语音频谱的估计值。此类语音加强方法将估计的对象放在短时谱幅度上。
谱相减的物理意义:至关于对带噪语音的每个频谱份量乘以一个系数。信噪比高时,含有语音的可能性大,衰减系数小。反之,则认为含有语音的可能性小,衰减系数大。
谱减法在频域将带噪语音的功率谱减去噪声的功率谱获得纯净语音功率谱估计,开方后就获得语音幅度谱估计,用带噪语音的相位来近似纯净语音的相位,再采用反傅里叶变换恢复时域信号。
谱减法优势:比较简单,只须要进行正反傅立叶变换,并且实时实现较容易。
谱减法缺点:适用的信噪比范围较窄,在信噪比较低时对语音的可懂度损伤较大。因此实际应用时除了要下降噪声外,还要兼顾语音的可懂度和天然度。
因为频谱直接相减会使加强后的语音产生“音乐噪声”,它具备必定的节奏性,听上去相似音乐声,由此而得名。
设带噪语音输入为y(n)=s(n)+d(n), s(n)为语音信号,d(n)为未知噪声信号,r(n)参考噪声输入,也即自适应滤波器的输入,v(n)是该滤波器的输出。 r(n)与s(n)无关,而与d(n)相关。
在输入过程的统计特性未知或是输入过程的统计特性变化时,可以调整本身的参数,以知足某种最佳准则的要求。自适应滤波的目的就是经过对 r(n)的滤波,使输出的噪声估值v(n)尽量接近带噪语音中的d(n),而后从带噪语音中直接减去 v(n) ,达到语音加强的目的。
自适应滤波器一般采用FIR滤波器,系数采用最小均方偏差(MMSE)准则来迭代估计。判断标准是使偏差信号e(n)能量最小:
其中,wk是滤波器系数,N是滤波器抽头数。MMSE准则要求噪声和语音相互独立,这时,偏差信号e(n)能量最小,可保证v(n)与d(n)最接近。
自适应滤波器
自适应滤波器是可以根据输入信号自动调整性能进行数字信号处理的数字滤波器。做为对比,非自适应滤波器有静态的滤波器系数,这些静态系数一块儿组成传递函数。
对于一些应用来讲,因为事先并不知道所须要进行操做的参数,例如一些噪声信号的特性,因此要求使用自适应的系数进行处理。在这种状况下,一般使用自适应滤波器,自适应滤波器使用反馈来调整滤波器系数以及频率响应。
总的来讲,自适应的过程涉及到将价值函数用于肯定如何更改滤波器系数从而减少下一次迭代过程成本的算法。价值函数是滤波器最佳性能的判断准则,好比减少输入信号中的噪声成分的能力。
随着数字信号处理器性能的加强,自适应滤波器的应用愈来愈常见,时至今日它们已经普遍地用于手机以及其它通讯设备、数码录像机和数码照相机以及医疗监测设备中。
下面图示的框图是最小均方滤波器(LMS)和递归最小平方(en:Recursive least squares filter,RLS)这些特殊自适应滤波器实现的基础。框图的理论基础是可变滤波器可以获得所要信号的估计。
在开始讨论结构框图以前,咱们作如下假设:
可变滤波器有有限脉冲响应结构,这样结构的脉冲响应等于滤波器系数。 阶滤波器的系数定义为
偏差信号或者叫做代价函数,是所要信号与估计信号之差
可变滤波器经过将输入信号与脉冲响应做卷积估计所要信号,用向量表示为
其中
是输入信号向量。另外,可变滤波器每次都会立刻改变滤波器系数
其中 是滤波器系数的校订因子。自适应算法根据输入信号与偏差信号生成这个校订因子,LMS 和 RLS 是两种不一样的系数更新算法。
分别表示带噪语音 y(t) 、信号 x(t) 和噪声d(t) 进行FFT变换后的第k个频谱份量。语音加强的任务就是利用已知的噪声功率谱信息,从 y(t) 中估计出x(t) ,即由{Y0 , Y1 , L }估计出Xk 。这里仅对频谱幅度的对数感兴趣,而认为相位对语音质量影响不大,带噪语音的短时谱可用快速傅里叶变换一帧的计算获得,其相位提取后存储起来,而后对纯净语音的短时对数谱做最小均方偏差估计。处理后的语音由估计获得的幅度谱和相位重建。于是估值能够简化为估计Ak 。Ak的估计式可写成
MATLAB是矩阵实验室(Matrix Laboratory)的简称,和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面数一数二。MATLAB能够进行矩阵运算、绘制函数和数据、实现算法、建立用户界面、链接其余编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通信、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中经常使用的形式十分类似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的事情简捷得多,而且mathwork也吸取了像Maple等软件的优势,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++ ,JAVA的支持。能够直接调用,用户也能够将本身编写的实用程序导入到MATLAB函数库中方便本身之后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户能够直接进行下载就能够用。
要求利用MATLAB来读入(采集)语音信号,将它赋值给某一贯量。再将该向量看做一个普通的信号,对其进行FFT变换实现频谱分析,再依据实际状况对它进行滤波。而后咱们还能够经过sound命令来对语音信号进行回放,以便在听觉上来感觉声音的变化。
该算法是利用Matlab进行仿真的。经过对时域波形的观察,代表MMSE的语音加强算法可以有效地滤除背景噪声,在用了有声/无声判断后,“音乐噪声”也大幅度下降。
Matlab代码
clear all
%-----------------读入语音文件------------------------
[speech,fs,nbits]=wavread('chunge.wav');
%------------------读入数据-----------------------------
%------------------参数定义-----------------------------
winsize=256; %窗长
n=0.04; %噪声水平
size=length(speech); %语音长度
numofwin=floor(size/winsize); %帧数
ham=hamming(winsize)'; %产生汉明窗
hanwin=zeros(1,size); %定义汉明窗的长度
enhanced=zeros(1,size); %定于加强语音的长度
clean=zeros(1,winsize);
x=speech'+n*randn(1,size); %产生带躁信号
noisy=n* randn(1,winsize);
N=fft(noisy); %对噪声傅里叶变换
nmag=abs(N); %噪声功率谱
%-------------------分帧-------------------------
for q=1:2*numofwin-1
frame=x(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2);
%-------------------对带躁语音帧间重叠一半取值--------------------
hamwin(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)=...
hamwin(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)+ham;
%-------------------加窗----------------------------------
y=fft(frame.*ham); %对带躁语音傅里叶变换
mag=abs(y); %噪声语音功率谱
phase=angle(y); %带躁语音相位
%-------------------幅度谱减---------------------------------------------------
for i=1:winsize
if mag(i)-nmag*(i)>0
clean(i)=mag(i)-nmag(i);
else
clean(i)=0;
end
end
%-----------------在频域中从新合成语音---------------------------------------------
spectral=clean.*exp(1i*phase);
%-----------------反傅里叶变换并重叠相加----------------------------------------
enhanced(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2) =...
enhanced(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)+real(ifft(spectral))
end
%------------------除去汉明窗引发的增益--------------------------------------
for i=1:size
if hanwin(i)==0
enhanced(i)=0
else
enhanced(i)=enhanced(i)/hanwin(i);
end
end
%计算加强先后的信噪比
%SNR1=10*log10(var(speech')/var(noisy));
%加躁语音信噪比
%SNR2=10*log10(var(speech')/var(enhanced-speech'));
%加强语音信噪比
wavwrite(x,fs,nbits,'noisy.wav');
%输出带躁信号
wavwrite(enhanced,fs,nbits,'enhanced.wav')
%输出加强信号
%---------------画波形
figure(1);
subplot(3,1,1);
plot(speech');
title('yuanshiyuyinboxing');
xlabel('yangdianshu');
ylabel('fudu');
axis([0 2.5*10^4-0.3 0.3]);
subplot(3,1,2);
plot(x);
title('jiazaoyuyinboxing')
xlabel('yangdianshu');
ylabel('fudu');
axis([0 2.5*10^4-0.3 0.3]);
subplot(3,1,3);
plot(enhanced);
title('zengqiangyuyinboxing');
xlabel('yangdianshu');
ylabel('fudu');
axis([0 2.5*10^4-0.3 0.3]);
张雪英著《数字语音处理及matlab仿真》 电子工业出版社 2010
Steven W Smith 《实用数字信号处理-从原理到应用》人民邮电出版社 2007
A V奥本海姆 《离散时间信号处理》西安交通大学出版社 1999