谱减法原理及源代码实现.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
谱减法原理及源代码实现

23456 处理宽带噪声的最通用技术是谱减法。它利用语音信号的短时平稳特性,从带噪语音的短时谱值中减去噪声的短时谱,从而得到纯净语音的频谱,达到语音增强得目的。谱减法包括幅度谱减法和功率谱减法:幅度谱减法就是在频域中从带噪语音的幅度谱上减去噪声的幅度谱 作为语音信号的幅度谱;功率谱减法则是从带噪语音的功率谱中减去噪声的功率谱,得到纯净语音的功率谱估计,通过开方运算得到幅度谱。由于人耳对语音频谱分量的相位感知不敏感,因此这些算法都是在幅度上进行的修正,相位部分则保持不变,仍然使用带噪语音的相位。 谱减法通过从带噪语音的短时谱估值中减去噪声的短时谱来达到语音增强得目的,算法简单且容易实现。但在减去噪声谱后,还会有些较大功率谱分量的剩余部分,在频谱上呈现出随机出现的尖峰,在听觉上形成残留噪声。这种噪声具有一定的节奏性起伏感,被称之为“音乐噪声”。后来,Ephraim 等人又对谱减法进行了大量改进,部分解决了“音乐噪声”问题,但在带噪语言信噪比较低时其残余噪声还是很大,尤其是当信噪比小于 5dB 的时候。因此,如何最大限度地消除谱减法中的“音乐噪声”,仍将是人们今后研究的重要课题。 以下为MATLAB源码的实现 %基本谱减法 clear; %[xx,fs]=wavread(E:\mywhisper\shu.wav); %[xx,fs]=wavread(E:\speech\x\w1xun_01.wav); %[xx,fs]=wavread(E:\speech\耳语音切割\b\w1ba_5); [xx,fs]=wavread(MIC0.wav);% 读取音频文件yuan.wav,并返回采样数据给变量xx及采样率Fs [team,row]=size(xx);%将数组xx的行数赋给team,列数赋给row if row==2 x=(xx(:,1)+xx(:,2))/2; yy=x; %如果语音信号xx为2列,即信号为双声道,则将其转换成单声道信号,即取两列的平均值赋给x,并将x的值赋给yy else x=xx; yy=x; %若语音信号xx为单声道,则将xx的值赋给x,并将x的值赋给yy end x=x-mean(x)+0.1*rand(length(x),1); N=length(x);%将语音信号长度赋给变量N n=220;%对语音信号进行分帧,帧长为220 n1=160;%帧移为160 frame=floor((N-n)/(n-n1));%将分帧数赋给变量frame %frame=floor(N/n); for i=1:frame y1=x((i-1)*(n-n1)+1:(i-1)*(n-n1)+n).*hamming(n); %对每段分帧进行加窗处理 fy=fft(y1,n); nen(i,:)=abs(fy).^2;% 将频域信号功率赋给矩阵变量nen ang(i,:)=angle(fy);%将频域信号的相位角赋给矩阵变量ang end yuzhi=sum(sum(nen(2:5,:)))/(4*n); for i=1:frame nen(i,:)=nen(i,:)-yuzhi; nen(i,find(nen(i,:)0))=0; %chuli=nen(i,1:n/2); %chuli=chuli-yuzhi; %chuli(find(chuli0))=0; %nen(i,:)=[chuli,fliplr(chuli)]; % nen(i,:)=filter(1,[0.5 0.5],nen(i,:)); % nen(i,find(nen(i,:)0))=0; end for i=1:frame nen(i,:)=sqrt(nen(i,:));%将纯语音功率谱开根,得到频域值 jie=nen(i,:).*exp(j*ang(i,:)); out(i,:)=real(ifft(jie))/hamming(n); %对纯语音频谱进行逆傅里叶变换,并取其实部,并进行去窗处理 end zong=out(1,:);%将第一帧中未重叠部分记入数组zong jiewei=n; for i=2:frame zong(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)];%将从第二帧开始的每一帧中未重叠部分记入数组zong end %zong=out(1,:); %for i=2:fra

文档评论(0)

asd522513656 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档