【信号去噪】基于Boll的改进谱减法语音去噪含Matlab源码
【信号去噪】基于Boll的改进谱减法语音去噪含Matlab源码
TT_Matlab
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,完整matlab代码或者程序定制加qq1575304183。
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代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。
-
2023年血糖新标准公布,不是3.9-6.1,快来看看你的血糖正常吗? 2023-02-07
-
2023年各省最新电价一览!8省中午执行谷段电价! 2023-01-03
-
GB 55009-2021《燃气工程项目规范》(含条文说明),2022年1月1日起实施 2021-11-07
-
PPT导出高分辨率图片的四种方法 2022-09-22
-
2023年最新!国家电网27家省级电力公司负责人大盘点 2023-03-14
-
全国消防救援总队主官及简历(2023.2) 2023-02-10
-
盘点 l 中国石油大庆油田现任领导班子 2023-02-28
-
我们的前辈!历届全国工程勘察设计大师完整名单! 2022-11-18
-
关于某送变电公司“4·22”人身死亡事故的快报 2022-04-26
