function enhancedsignal=wiener(noisyspeech,samplefrequency)
x=noisyspeech;
fs=samplefrequency;
nx=length(x);
enhanced_x=zeros(1,nx);
%分帧和加窗
FrameLen=fix(0.025*fs);%取25毫秒为一帧
overlap=FrameLen/2;
inc=FrameLen-overlap; %帧移
x_frame=enframe(x,FrameLen,inc); %分帧
nf=size(x_frame,1); % 帧数
win=hamming(FrameLen)';
x_window=[];
for k=1:nf
x_row=x_frame(k,:).*win; % 加窗
x_window=[x_window;x_row];
end
%对带噪语音进行DFT
y=fft(x_window');
ymag = abs(y);
yphase = angle(y);
%初始噪声估计
NNoise=23; %取噪音段(语音的初始段)帧数
MN=mean(ymag(:,1:NNoise)')';
PN=mean(ymag(:,1:NNoise)'.^2)'; %初始噪声功率谱均值
NoiseCounter=0;%连续噪声段长度
SmoothFactor=9;%噪声平滑因子
Alpha=0.95; %语音平滑因子
SNRPre=ones(size(MN));
%维纳滤波
for k=1:nf
%-----噪声估计更新
if k<=NNoise
SpeechFlag=0;%非有声段
NoiseCounter=NNoise;
else
NoiseMargin=3;
HangOver=8;
SpectralDist= 20*(log10(ymag(:,k))-log10(MN));
SpectralDist(find(SpectralDist<0))=0;
Dist=mean(SpectralDist);
if (Dist < NoiseMargin)
NoiseFlag=1;
NoiseCounter=NoiseCounter+1;
else
NoiseFlag=0;
NoiseCounter=0;
end
% 只检测大于一定长度的噪声段
if (NoiseCounter > HangOver)
SpeechFlag=0;
else
SpeechFlag=1;
end
end
if SpeechFlag==0 % 如果是噪声段
MN=(SmoothFactor*MN+ymag(:,k))/(SmoothFactor+1); %更新噪声均值
PN=(SmoothFactor*PN+(ymag(:,k).^2))/(1+SmoothFactor); %更新噪声功率
end
%------滤波
SNRNew=(ymag(:,k).^2)./PN-1;
SNRPost=Alpha*SNRPre+(1-Alpha).*max(SNRNew,0); %由上一帧的增益,原始语音,噪声功率求得SNR,再平滑并确定SNR
Gain=SNRPost./(SNRPost+1);
smag=Gain.*ymag(:,k);
SNRPre=smag.^2./PN; %备下一帧用
%------重新生成谱
spectrum= smag.*exp(j*yphase(:,k));
%------重新生成语音
enhanced_x((inc*(k-1)+1):(inc*(k-1)+FrameLen))=enhanced_x((inc*(k-1)+1):(inc*(k-1)+FrameLen))+real(ifft(spectrum,FrameLen))';
end
enhancedsignal=enhanced_x;
LPC.rar_LPC_lpc matlab
版权申诉
137 浏览量
2022-09-24
07:20:13
上传
评论
收藏 94KB RAR 举报
周楷雯
- 粉丝: 80
- 资源: 1万+
最新资源
- 关于数据分析工具的问题 (Excel、PowerBI-Tableau、R-Python)-教程案例分享.zip
- jqueryUI管理后台+WeiXinApp微信小程序+uni例子内容 参数例子,学习用
- 基于聚类分析分批训练的BP神经网络回归分析
- 计算机大类学生课程实验心得、案例-基于Python 的图像处理实验.zip
- CocosDashboard-v2.1.3-win-042311.exe
- vue3-admin-master-后台管理平台模板.zip
- 基于yolov5和deepsort算法的车辆检测项目源码+数据集(高分项目).zip
- 使用Python的requests库和BeautifulSoup库进行网页爬取的示例案例
- 蓝色个人主页接单HTML源码.zip
- 基于YOLOv5+Deepsort实现车辆行人追踪和计数(完整源码+说明文档+数据).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈