声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 913|回复: 0

[编程技巧] 高手救命啊!小弟感激不尽啊.有关用matlab去噪的.

[复制链接]
发表于 2006-10-13 09:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
  现有部分程序,不感肯定对不对.去噪是基于最大似然比准则的.
WavData=wavread('D:\0717.wav');
FrameLength=256;
FrameOffset=1/2*FrameLength;
window=hamming(FrameLength);%哈明窗
%求帧数,用fix函数去掉小数
nFrame=fix((length(WavData)-FrameOffset)/(FrameLength-FrameOffset));
%产生随机白噪声,和声音一样大小
RAND=randn(size(WavData));
%预加重
k=2:length(WavData)
WavData(k)=WavData(k)-0.97*WavData(k-1);

data_rand=WavData+RAND;                   %声音加噪音

%加窗分帧
data=zeros(FrameLength,nFrame);
for k=1:nFrame
    for m=1:FrameLength
        data(m,k)=window(m)*data_rand((k-1)* (FrameLength-FrameOffset)+m);         
    end
end
fid=fopen('data+rand预处理后.txt','w+');
fprintf(fid,'%f ',data);
fclose(fid);   
   


%**********************************************

%含噪声音512点dft变换
X=zeros(512,nFrame);
y=fft(data,512);
X=y.*conj(y);                                        %X:512*nFrame的矩阵.  

save 'shuju' nFrame FrameLength X  RAND

%**********************************************
%*****************************************
load 'shuju'

%求噪声方差
%读噪声
noise=zeros(FrameLength,nFrame);
for k=1:nFrame
    for m=1:FrameLength
        noise(m,k)=RAND((k-1)* (FrameLength-FrameOffset)+m);         
    end
end
nfft=512;
V=zeros(nfft,nFrame);                        %预分配,存放噪声方差
window=hamming(64); %哈明窗
noverlap=32; %数据无重叠
range='twosided'; %频率间隔为[0 1],计算全部的频率
for k=1:nFrame
[P,f]=pwelch(noise(:,k),window,noverlap,nfft,[],range);
V(:,k)=P;
end  
  

%************************************************


%******************************************************
%求似然比
%*******************************************************
a=0.98;
%求postprior SNR:r
r=zeros(512,nFrame);
r=X./V;
%求P[r-1]
p=zeros(512,nFrame);
p=max(r-1,0);
%求prior SNR:E
E=zeros(512,nFrame);
%E的初始值
E(:,1)=a+(1-a)*p(:,1);
E(:,[2:nFrame])=a*X(:,[1:nFrame-1])./V(:,[1:nFrame-1])+...
(1-a)*p(:,[2:nFrame]);
%似然比Sr
Sr=zeros(FrameLength,nFrame);
Sr=1./(1+E).*exp(r.*E./(1+E));  
  

save '似然比' Sr  
save  '似然比' V  

接着要确定一个门限,确定哪一帧是语音,最后把语音帧还原.
哪位大哥有经验,我可以附上更详细的资料.谢谢拉!
回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-25 05:32 , Processed in 0.065516 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表