0
点赞
收藏
分享

微信扫一扫

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


1 简介

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

【信号去噪】基于Boll的改进谱减法语音去噪含Matlab源码_参考文献_02编辑

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 仿真结果

【信号去噪】基于Boll的改进谱减法语音去噪含Matlab源码_参考文献_03

【信号去噪】基于Boll的改进谱减法语音去噪含Matlab源码_计算机技术_04编辑

4 参考文献

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

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

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

【信号去噪】基于Boll的改进谱减法语音去噪含Matlab源码_参考文献_05

【信号去噪】基于Boll的改进谱减法语音去噪含Matlab源码_参考文献_06编辑

举报

相关推荐

0 条评论