谱减法原理及源代码实现

谱减法原理及源代码实现

ID:38645161

大小:15.55 KB

页数:3页

时间:2019-06-17

谱减法原理及源代码实现_第1页
谱减法原理及源代码实现_第2页
谱减法原理及源代码实现_第3页
资源描述:

《谱减法原理及源代码实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、23456处理宽带噪声的最通用技术是谱减法。它利用语音信号的短时平稳特性,从带噪语音的短时谱值中减去噪声的短时谱,从而得到纯净语音的频谱,达到语音增强得目的。谱减法包括幅度谱减法和功率谱减法:幅度谱减法就是在频域中从带噪语音的幅度谱上减去噪声的幅度谱作为语音信号的幅度谱;功率谱减法则是从带噪语音的功率谱中减去噪声的功率谱,得到纯净语音的功率谱估计,通过开方运算得到幅度谱。由于人耳对语音频谱分量的相位感知不敏感,因此这些算法都是在幅度上进行的修正,相位部分则保持不变,仍然使用带噪语音的相位。谱减法通过从带噪语音的短时谱估值中减去

2、噪声的短时谱来达到语音增强得目的,算法简单且容易实现。但在减去噪声谱后,还会有些较大功率谱分量的剩余部分,在频谱上呈现出随机出现的尖峰,在听觉上形成残留噪声。这种噪声具有一定的节奏性起伏感,被称之为“音乐噪声”。后来,Ephraim等人又对谱减法进行了大量改进,部分解决了“音乐噪声”问题,但在带噪语言信噪比较低时其残余噪声还是很大,尤其是当信噪比小于5dB的时候。因此,如何最大限度地消除谱减法中的“音乐噪声”,仍将是人们今后研究的重要课题。以下为MATLAB源码的实现%基本谱减法clear;%[xx,fs]=wavread('

3、E:mywhispershu.wav');%[xx,fs]=wavread('E:speechxw1xun_01.wav');%[xx,fs]=wavread('E:speech耳语音切割bw1ba_5');[xx,fs]=wavread('MIC0.wav');%读取音频文件yuan.wav,并返回采样数据给变量xx及采样率Fs[team,row]=size(xx);%将数组xx的行数赋给team,列数赋给rowifrow==2x=(xx(:,1)+xx(:,2))/2;yy=x;%如果语音信号xx为2列,

4、即信号为双声道,则将其转换成单声道信号,即取两列的平均值赋给x,并将x的值赋给yyelsex=xx;yy=x;%若语音信号xx为单声道,则将xx的值赋给x,并将x的值赋给yyendx=x-mean(x)+0.1*rand(length(x),1);N=length(x);%将语音信号长度赋给变量Nn=220;%对语音信号进行分帧,帧长为220n1=160;%帧移为160frame=floor((N-n)/(n-n1));%将分帧数赋给变量frame%frame=floor(N/n);fori=1:framey1=x((i-1)

5、*(n-n1)+1:(i-1)*(n-n1)+n).*hamming(n);%对每段分帧进行加窗处理fy=fft(y1,n);nen(i,:)=abs(fy).^2;%将频域信号功率赋给矩阵变量nen23456ang(i,:)=angle(fy);%将频域信号的相位角赋给矩阵变量angendyuzhi=sum(sum(nen(2:5,:)))/(4*n);fori=1:framenen(i,:)=nen(i,:)-yuzhi;nen(i,find(nen(i,:)<0))=0;%chuli=nen(i,1:n/2);%chul

6、i=chuli-yuzhi;%chuli(find(chuli<0))=0;%nen(i,:)=[chuli,fliplr(chuli)];%nen(i,:)=filter(1,[0.50.5],nen(i,:));%nen(i,find(nen(i,:)<0))=0;endfori=1:framenen(i,:)=sqrt(nen(i,:));%将纯语音功率谱开根,得到频域值jie=nen(i,:).*exp(j*ang(i,:));out(i,:)=real(ifft(jie))/hamming(n)';%对纯语音频谱进行

7、逆傅里叶变换,并取其实部,并进行去窗处理endzong=out(1,:)';%将第一帧中未重叠部分记入数组zongjiewei=n;fori=2:framezong(jiewei-n1+1:jiewei)=(zong(jiewei-n1+1:jiewei)+out(i,1:n1)')/2;jiewei=jiewei+n-n1;%使指针jiewei依次指向下一帧的帧尾zong=[zong;out(i,n1+1:end)'];%将从第二帧开始的每一帧中未重叠部分记入数组zongend%zong=out(1,:)';%fori=2:

8、frame%zong=[zong;out(i,:)'];%end%%fori=1:frame%zong=[zong,nen(i,:)'];%zong(i*(n-n1)+1:(i-1)*(n-n1)+n)=zong(i*(n-n1)+1:(i-1)*(n-n1)+n)/2;fi

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。