首页 > 行业资讯 > 【信号去噪】基于Boll的改进谱减法语音去噪含Matlab源码

【信号去噪】基于Boll的改进谱减法语音去噪含Matlab源码

时间:2022-05-22 来源: 浏览:

【信号去噪】基于Boll的改进谱减法语音去噪含Matlab源码

天天Matlab 天天Matlab
天天Matlab

TT_Matlab

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,完整matlab代码或者程序定制加qq1575304183。

收录于合集 #信号处理应用matlab源码 214个

1 简介

2 部分代码

function output=SpectralSubIm(signal,wind,inc,NIS,Gamma,Beta) nwin=length(wind); if (nwin == 1) % 判断窗长是否为1,若为1,即表示没有设窗函数 W = wind; % 是,帧长=wind wnd=hamming(W); else W = nwin; % 否,帧长=窗长 wnd=wind; end nfft=W; y=enframe(signal,W,inc)’; Y=fft(y,nfft); YPhase=angle(Y(1:fix(end/2)+1,:)); %含噪语音的相位 Y=abs(Y(1:fix(end/2)+1,:)).^Gamma; %功率谱 numberOfFrames=size(Y,2); N=mean(Y(:,1:NIS)’)’; %初始的能量谱均值D(k) NRM=zeros(size(N)); %噪声残余量最大值 NoiseCounter=0; NoiseLength=9; %噪声平滑因子 YS=Y; %平均谱值 for i=2:(numberOfFrames-1) YS(:,i)=(Y(:,i-1)+Y(:,i)+Y(:,i+1))/3; end for i=1:numberOfFrames [NoiseFlag, SpeechFlag, NoiseCounter, Dist]=vad_LogSpec(Y(:,i).^(1/Gamma),N.^(1/Gamma),NoiseCounter); %基于频谱距离的VAD检测 if SpeechFlag==0 N=(NoiseLength*N+Y(:,i))/(NoiseLength+1); %更新并平滑噪声 NRM=max(NRM,YS(:,i)-N); %更新最大的噪声残余 X(:,i)=Beta*Y(:,i); else D=YS(:,i)-N; %谱减 if i>1 && i<numberOfFrames %减少噪声残留项 for j=1:length(D) if D(j)<NRM(j) D(j)=min([D(j) YS(j,i-1)-N(j) YS(j,i+1)-N(j)]); end end end X(:,i)=max(D,0); end end output=OverlapAdd2(X.^(1/Gamma),YPhase,W,inc);

3 仿真结果

4 参考文献

[1]林琴, 张道信, 吴小培. 一种基于改进谱减法的语音去噪新方法[J]. 计算机技术与发展, 2007, 17(7):4.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。
相关推荐