• 790.00 KB
  • 24页

工程设计报告——基于dsp的语音信号处理系统

  • 24页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'工程设计报告——基于DSP的语音信号处理系统小组成员:13020188002王亨13020188006谢瞻远13020188030王雪一、 设计背景摘要语音信号是人类传播信息和情感交流的重要媒介,在许多领域中具有广泛的应用前景。然而在现实生活中,语音不可避免地要受到周围环境、传输系统本身产生的噪声以及其他讲话者的干扰,因此在接收端的信号为带噪语音信号。混叠在语音信号中的噪声按类别可分为加性噪声和乘性噪声;按性质可分为平稳噪声和非平稳噪声。当语音受到噪声干扰时,会使许多语音处理系统的性能急剧恶化。比如,语音识别在实验室环境下可以取得相当好的效果,但在噪声环境中,尤其是在强噪声环境中使用时,系统的识别率将受到严重的影响。此时,采用语音增强技术进行预处理,将有效改善系统性能。语音增强的目的就是从带噪语音中尽可能提取纯净的语音信号,但是噪声信号都是随机产生的,完全消噪是不可能的。因此,实际语音增强的目标主要是:改进语音质量,降低背景噪声,使听者乐于接受,不感到疲倦,提高语音的可懂度,方便听者理解。一、设计原理本次工程设计中进行语音信号增强及降低背景噪声时,主要采用了两种设计方法。其中第一种为谱减法,第二种为LMS自适应滤波法。(一)谱减法在处理未知噪声和线性滤波干扰的问题上,谱减法具有非常重要的影响。由于语音信号的短时谱具有较强的相关性,而噪声的前后相关性很弱,因此可利用短时谱估计的方法从带噪语音中估计原始语音。由于人耳对语音相位感受不敏感,可将估计的对象放在短时谱的幅度上。假设为纯净语音信号,为噪声信号,为带噪语音信号,则有用分别表示的傅里叶变换,则可得下式:由于假定语音信号与加性噪声是相互独立的,因此有 因此,如果用分别表示为的功率谱,则有而由于平稳噪声的功率谱在发声前和发声后可以认为基本没有变化,这样可以通过发声前的所谓“寂静段”(认为在这一段时间内没有语音只有噪声)来估计噪声的功率谱,从而有这样减出来的功率谱即可认为是较为纯净的语音功率谱,然而,从这个功率谱可以恢复降噪后的语音时域信号。在具体运算中,为防止出现负功率谱的情况,减谱时,若,令,即完整的减谱运箅公式如下:(一)LMS自适应滤波自适应滤波法是现代信号处理技术的重要组成部分,对复杂信号的处理具有独特的功能。自适应滤波器实现的复杂性通常用它所需的乘法次数和阶数来衡量,并调节滤波器系数以改进性能。LMS算法采用n个权重不尽相同的自适应线性组合器来模拟真实的声音,假设理想信号为y(n),实际输出信号为d(n),那么误差信号可以表示为式中:为组合器的权重矩阵;x(n)为n个组合器的信号矩阵。运用最小均方误差准则,就是求使得最小时的W,因为是通过对其求导并令其等于0求得的,而在最小点不可导,所以采用 。均方误差表示为:代入d(n)的表达式,得:式中:为n×n的自相关矩阵,它是输入信号相关性矩阵;P=E[d(n)x(n)]代表理想信号d(n)与输入矢量的相关性。当最小时:式中:为要求的最佳权系数。常见的两种系数求法是最陡梯度法和随机梯度法。最陡梯度法的思路是先假设W(0),利用迭代公式计算。当W(n+1)和W(n)的误差小于目标值则认为迭代完成。随机梯度法的思路是用瞬时代替,此时迭代公式为:式中μ是步长因子,满足,一般认为步长越大,收敛速度越慢。当d(n)≈0或y(n)≈0时可认为没有语音信号输入,可以不对这一段的语音信号数据进行处理。一、分模块设计与实现本次设计共分为三个模块进行实现,分别为谱减法处理、LMS自适应信号处理和DSP平台实现。(一)谱减法进行语音信号处理(1)基本谱减法谱减法语音增强的算法流程如下图所示。 谱减法在频域将带噪语音的功率谱减去噪声的功率谱得到纯净语音功率谱估计,开方后就得到语音幅度谱估计,用带噪语音的相位来近似纯净语音的相位,再采用反傅里叶变换恢复时域信号。(1)基本谱减法的改进如完整的谱减运算公式所示的基本谱减法对于整个语音段采用减去相同噪声功率谱的办法,这样,实际处理效果不是很理想,原因是,语音的能量往往集中在某些频段内,在这些频段内的幅度相对较高,尤其是共振峰处的幅度一般远大于噪声,因此,不应用同一标准处理。由上述分析可知,在谱减法中噪声功率谱的估计至关重要,如果噪声估计偏差较大的话,将毫无疑问地影响语音增强质量。可以采用基于语音端点检测技术来精确判断出每一帧的噪声,保证语音处理系统良好的性能。该方法可以综述为:从输入信号中提取一个或一系列的对比特征参数,然后将其和一个或一系列的门限阈值进行比较,如果超过门限则表示当前为有音段,否则就表示当前为无音段。门限通常是根据无音段时的语音特征确定的,这里采用了基于能零比的语音端点检测技术进行端点检测,改进算法的步骤如下: (1)计算每一帧的能量和过零率,得到每一帧语音的能零比参数;(2)通过对背景噪声能量的统计,定出门限,利用门限来确定无声段,在无语音期间估计出噪声谱。(3)对带噪语音进行功率谱计算,如果当前帧为语音帧,噪声功率谱按最临近的无声帧的功率谱来替代,当前帧功率谱减去噪声功率谱即可得到去噪后语音的功率谱。(4)对其做傅里叶逆变换后得到增强后的语音信号。(一)LMS自适应滤波进行语音信号处理自适应滤波器的一般形式如下图所示,图中输入信号x(n)加权到数字滤波器产生输出信号y(n),自适应算法调节滤波器权系数使输出y(n)和滤波器期望的响应d(n)之间的误差信号为最小。自适应滤波器的系数受误差信号的控制,根据的值和自适应算法自动调整。一旦输入信号的统计规律发生了变化,滤波器能够自动跟踪输入信号的变化,自动调整滤波器的权系数,实现自适应过程,最终达到滤波效果。滤波器结构自适应算法+-但鉴于实际情景下,理想参考信号d(n)无法获得,所以该模型不能够直接被实现出来。但是,我们注意到,语音信号可以看作一种短时平稳信号,在一定的范围内具有较强的周期性和相关性,然而白噪声却是一种互不相干的信号,因此,我们可以将语音信号延时后作为参考信号输入。具体结构如下图。该系统仍然利用LMS算法迭代调节W系数。 (一)DSP平台实现DSPDSP实现总共分两大部分,第一部分是语音信号的A/D采集和D/A输出,第二部分是对语音信号的自适应滤波。我们使用SSM2603芯片进行A/D采集,数据精度为16bit,采样率为48kHz。然后使用DMA的方式将采集到的数字信号拷贝到内存中,将其解码成对应的音量值。接着进行滤波操作。最后是将滤波后的结果再转换为对应格式,写到D/A输出的缓存区中去以便输出模拟信号。一、测试结果(一)基本谱减法 图1谱减法语音增强波形图2谱减法语音误差对比波形从以上波形可以看出,谱减法可以达到去噪的效果,然而在去噪的同时会削弱一部分原唱语音,导致重构误差为78.33%。对比增强后的语音与原始语音及带噪语音的波形可以看出,对于这两者的误差较为相似。(一)谱减法的改进 图3改进谱减法语音增强波形图4改进谱减法语音误差对比波形 对比上图可以看出,该方法在信噪比方面提高幅度更明显,去噪的效果优于基本谱减方法。利用短时能零比和谱减过程实时地改进噪声功率谱比重,实现了对于噪声门限和噪声功率谱估计这二者的更新,得出准确噪声功率谱估计和语音起止点,利用得到的准确的噪声功率谱估计进一步去噪。仿真实验表明,无论在视觉效果还是在信噪比客观意义上,本方法的去噪效果均优于传统的基本谱减法,此时的重构误差为11.41%。(一)LMS自适应滤波图5输入周期信号与随机噪声信号波形图6滤波器输入信号波形与滤波后输出信号波形 图7自适应滤波器输出波形与预期输出对比及误差曲线由上图可以看出,加噪信号经自适应滤波器滤波后,输出波形与预期波形几乎完全吻合。经计算,两者误差幅值范围在-0.20.2之间。自适应滤波器之所以能够自动跟踪输入信号,是在于算法不断地根据实际输出和期望输出的误差调整滤波器的系数,从而使输出跟踪输入。程序调试过程中改变自适应滤波器输入正弦信号的频率或将输入改为阶跃信号等其他不同的信号,滤波器的输出同样能够跟踪输入。(一)LMS自适应滤波对不同信噪比信号的处理效果在代码实现初期,我们发现语音信号滤波处理效果不理想,在之后寻找原因时发现信噪比大小会影响滤波效果。在调整了信噪比大小后发现滤波效果明显改善。在之后的仿真时,我们同时进行了信噪比对滤波效果的影响。研究结果如下: S/N(dB)=138.1551S/N(dB)=92.1034 S/N(dB)=46.0517S/N(dB)=0 S/N(dB)=-46.0517S/N(dB)=-92.1034由上六张图图形相互对比可见,信噪比越大时,自适应滤波输出与预期输出图线吻合度越高,滤波效果越好。当信噪比为负值时,滤波输出曲线基本失真,无实际使用价值。(一)DSP平台DSP 将混杂有白噪声的音频信号通过音频线输入DSP板,再通过耳机接收DSP输出的信号,可以听出噪声被明显削弱。但是局限于硬件性能和算法本身,还是有部分噪声残余。一、结论与展望通过三种算法的对比可以看出,在谱减法、改进后的谱减法及LMS自适应滤波中,改进后的谱减法及LMS自适应滤波有较好的语音增强效果。其中,自适应滤波在处理语音信号时,误差明显小于谱减法及改进后的谱减法处理结果。在实际生活中,语音信号经常会受到噪声的干扰。语音增强技术作为语音去噪的一个重要研究方向,其目的是从带噪的语音信号中尽可能提取纯净的原始语音。在本次工程设计中,通过三种算法的实验,我们基本达到了增强语音信号的目的。在查找资料时,我们也发现了其他语音信号处理的方法,例如小波阈值降噪、自适应的维纳和卡尔曼滤波器等,这些将是我们以后探索的方向。附录一、谱减法代码clcclearall;closeall%读取原始纯净语音数据%[x_geshou,fs]=audioread("C:UsersAdministratorDesktopfinalprojectyuanchang.wav");%读取语音文件load("C:UsersAdministratorDesktopsignal_me.mat");fori=1:length(signal_me)signal_me(i)=10*signal_me(i);end %=length(x_geshou);randn("state",sum(length(signal_me)*clock));%去除伪随机数影响noise=0.1*randn(1,length(signal_me));%noise=wgn(1,length(signal_me),-40);%产生高斯白噪声Length=min(length(signal_me),length(noise));%得到带噪语音数据form=1:Length;signal_noise(m)=signal_me(m)+noise(m);endframelength=32;%设置帧长framenumber=fix(Length/framelength);%计算帧数PureSignal(1:framelength*3/4+framelength*framenumber)=0;%存放增强后的语音数据H=hamming(framelength);NoisePower(1:framelength)=0;%计算噪声功率谱forL=1:2;form=1:framelength;data_noise(m)=signal_noise((L-1)*framelength/4+m);endZ=fft(data_noise,framelength);NoisePower=NoisePower+abs(Z);endNoisePower=NoisePower/4;NoisePower=NoisePower.^2;form=1:framelength*3/4;%去噪xx(m)=0;endform=1:framenumber*framelength;xx(m+framelength*3/4)=signal_noise(m);endforL=1:framenumber*4; form=1:framelength;data(m)=xx((L-1)*framelength/4+m);endY=fft(data,framelength);%带噪语音的傅里叶变换noise_angle=angle(Y);%带噪语音信号相位Mag=abs(Y);%带噪语音的幅度Mag=Mag.^2;%带噪语音的功率谱form=1:framelength;if(Mag(m)>=NoisePower(m))PureMag(m)=Mag(m)-NoisePower(m);endif(Mag(m)1ERROR1(i)=1;elseifERROR1(i)<-1ERROR1(i)=-1;endendfigure;plot(ERROR1);title("增强语音与原始语音误差");一、谱减法改进代码clcclearallcloseall%读取经预处理的语音文件load("C:UsersAdministratorDesktopsignal_me.mat");fori=1:length(signal_me)signal_me(i)=10*signal_me(i);end noise=wgn(1,length(signal_me),-40);%产生高斯白噪声N=length(noise);N1=length(signal_me);N2=min(N,N1);signal_noise=signal_me(1:N2)+noise(1:N2);%参数设置framelength=32;frameinc=16;H=hamming(framelength);framenumber=2*fix(length(signal_noise)/framelength)-1;PureSignal(1:length(signal_noise))=0;%存放去噪后的数据%计算能量fori=1:framenumber;E(i)=0;form=1:framelength;data(m)=signal_noise(frameinc*(i-1)+m)*H(m);endE(i)=sum(data.^2);end%计算过零率fori=1:framenumber;Z(i)=0;form=1:framelength;data(m)=signal_noise(frameinc*(i-1)+m)*H(m);endform=2:framelength;Z(i)=Z(i)+abs(sign(data(m))-sign(data(m-1))); endend%得到能零比fori=1:framenumber;K(i)=E(i)/Z(i);end%确定语音断电阈值大小,如果小于这个值,认为是噪声段Threshold=min(K)*1.8;%去噪fori=1:framenumber;form=1:framelength;data(m)=signal_noise(frameinc*(i-1)+m)*H(m);endY=fft(data,framelength);A=angle(Y);Amplitudevalue(i,:)=abs(Y);fftangle(i,:)=A;end%如果有连续10帧为噪声帧,则认为该帧是真正的噪声帧count=0;fori=2:framenumber;if(K(i)>=Threshold)startframe=i;count=count+1;elseendframe=i; ifcount>=10;form=startframe-count+1:endframe-1;Amplltudevalue(m,:)=Amplitudevalue(m,:)-Amplitudevalue(startframe-count,:);endendcount=0;Amplitudevalue(i-1,:)=0;endendAmplitudevalue(framenumber,:)=0;%重构语音fori=1:framenumber;PureY=Amplitudevalue(i,:).*exp(1i*fftangle(i,:));PureY=real(ifft(PureY,framelength));form=1:framelength;PureSignal((i-1)*framelength/2+m)=PureSignal((i-1)*framelength/2+m)+PureY(m);endendsubplot(3,1,1)%画图plot(signal_me)title("原始语音信号波形")subplot(3,1,2)plot(signal_noise)title("带噪声语音信号波形")subplot(3,1,3)plot(PureSignal) title("增强后的语音信号波形")Length2=min(length(signal_me),length(PureSignal));ERROR1=[];ERROR1=(PureSignal(1:Length2)-signal_me(1:Length2))./signal_me(1:Length2);fori=1:length(signal_me)ifERROR1(i)>1ERROR1(i)=1;elseifERROR1(i)<-1ERROR1(i)=-1;endendfigure;plot(ERROR1);title("增强语音与原始语音误差");一、LMS自适应滤波代码function[yn,W,en]=LMS(xn,dn,M,mu,itr)%LMS(LeastMeanSqure)算法%输入参数:%xn输入的信号序列(列向量)%dn所期望的响应序列(列向量)%M滤波器的阶数(标量)%mu收敛因子(步长)(标量)要求大于0,小于xn的相关矩阵最大特征值的倒数%itr迭代次数(标量)默认为xn的长度,Mlength(xn)|itr