⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 evrc_2.m

📁 matlab仿真通过的降噪程序
💻 M
字号:
clear all;
[y1,fs,bits]=wavread('E:\noise enhancing\wav\5.wav');
y1=y1/max(abs(y1));%归一化
%wavwrite(y1,8000,8,'f:\wav\3music.wav');
figure(1);
plot(y1);

[noise,fs1,bits1]=wavread('E:\noise enhancing\wav\5_noise.wav');
y2=mixsig(y1,noise,5);
y2=y2/max(abs(y2));%归一化
%wavwrite(y2,8000,8,'E:\noise enhancing\wav\mymasking_s&w(10).wav');%0db带噪信号
figure(2);
plot(y2);

window=chebwin(35,80);
b=fir1(34,0.015,'high',window);
y=filter(b,1,y2);

frame = 256;    % Defining frame size

shift=128;
win=hamming(256);

%%%%%%     preemphasize     %%%%%%%%

signal(1)=y(1);
pre_u=0.01;
for j1 = 2:length(y),
 signal(j1) = y(j1)-pre_u*y(j1-1);
end;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for j1 = 1:length(y),
 signal(j1) = y(j1);
end;

ps_noise=zeros(length(signal)/frame,frame);
frame_temp = zeros(length(signal)/frame,frame);
framenoise_temp = zeros(length(signal)/frame,frame);

hh = 0; 
head=0;
   
%%%%  estimation of noise  %%%%
   for k = 1 : 5,
        for m = 1 : frame,
          abc1(m) = signal(head+m);
        end;
        abc1=abc1.*win';
         
        head = head +frame;
        frame_temp(k,1:frame) = abs(fft(abc1));% FFT OF THE SIGNAL + NOISE FRAME BY FRAME
        frame_angle(k,1:frame) = angle(fft(abc1));% ANGLE OF FFT OF THE SIGNAL + NOISE FRAME BY FRAME
        ps_noise(k,1:frame) = (frame_temp(k,1:frame).*conj(frame_temp(k,1:frame)))/frame;

    g=zeros(1,22);

    for i1=1:3,
	    g(1)=g(1)+ps_noise(k,i1);       
    end;
	Ec(k,1)=g(1)/(100+1);
    for i1=4:6,
		g(2)=g(2)+ps_noise(k,i1);   
    end;
    Ec(k,2)=g(2)/(100+1);
	for i1=7:10,
		g(3)=g(3)+ps_noise(k,i1);       
    end;
    Ec(k,3)=g(3)/(100+1);
	for i1=11:13,
		g(4)=g(4)+ps_noise(k,i1);    
    end;
    Ec(k,4)=g(4)/(100+1);
	for i1=14:16,
		g(5)=g(5)+ps_noise(k,i1);
    end;   
    Ec(k,5)=g(5)/(110+1);
	for i1=17:20,
		g(6)=g(6)+ps_noise(k,i1);
    end; 
    Ec(k,6)=g(6)/(120+1);
	for i1=21:25,
		g(7)=g(7)+ps_noise(k,i1);
    end;
	Ec(k,7)=g(7)/(140+1);
    for i1=26:29,
		g(8)=g(8)+ps_noise(k,i1);  
    end;
    Ec(k,8)=g(8)/(150+1);  
	for i1=30:35,
		g(9)=g(9)+ps_noise(k,i1);   
    end;
    Ec(k,9)=g(9)/(160+1);
	for i1=36:41,
		g(10)=g(10)+ps_noise(k,i1);    
    end;
    Ec(k,10)=g(10)/(190+1);
	for i1=42:47,
		g(11)=g(11)+ps_noise(k,i1);   
    end;
    Ec(k,11)=g(11)/(210+1);
	for i1=48:55,
		g(12)=g(12)+ps_noise(k,i1);    
    end;
    Ec(k,12)=g(12)/(240+1);
	for i1=56:64,
		g(13)=g(13)+ps_noise(k,i1);      
    end;
    Ec(k,13)=g(13)/(280+1);
	for i1=65:74,
		g(14)=g(14)+ps_noise(k,i1);   
    end; 
    Ec(k,14)=g(14)/(320+1);
	for i1=75:86,
		g(15)=g(15)+ps_noise(k,i1);   
    end;  
    Ec(k,15)=g(15)/(380+1);
	for i1=87:101,
		g(16)=g(16)+ps_noise(k,i1);  
    end;
    Ec(k,16)=g(16)/(450+1);
	for i1=102:118,
		g(17)=g(17)+ps_noise(k,i1);
    end;
    Ec(k,17)=g(17)/(550+1);
	for i1=119:141,
		g(18)=g(18)+ps_noise(k,i1);  
    end;
    Ec(k,18)=g(18)/(700+1);
	for i1=142:170,
		g(19)=g(19)+ps_noise(k,i1);   
    end;Ec(k,19)=g(19)/(900+1);
	for i1=171:205,
		g(20)=g(20)+ps_noise(k,i1);  
    end;
    Ec(k,20)=g(20)/(1100+1);
	for i1=206:246,
		g(21)=g(21)+ps_noise(k,i1);   
    end;  
    Ec(k,21)=g(21)/(1300+1);
    for i1=247:256,
		g(22)=g(22)+ps_noise(k,i1);    
    end;
    Ec(k,22)=g(22)/(1800+1);
    
end
for i2=1:22,
   for k=1:5, 
       En(i2)=sum(Ec(k,i2))/5;      
   end
   if En(i2)<0.0625
       En(i2)=0.0625;
   end
end


head = 0; 
mm=1;
nn=1;
% START OF THE NOISE ELIMINATION THROUGH SPECTRAL SUBTRACTION BASED ON THE THRESHOLD SET

   for k = 1 : length(signal)/shift-1,
        for m = 1 : frame,
          abc1(m) = signal(head+m);
          %abc1=abc1.*win';
        end;
        
        
        head = head +shift;
        frame_temp(k,1:frame) = abs(fft(abc1));% FFT OF THE SIGNAL + NOISE FRAME BY FRAME

        frame_angle(k,1:frame) = angle(fft(abc1));% ANGLE OF FFT OF THE SIGNAL + NOISE FRAME BY FRAME
        
        ps_signal(k,1:frame) = (frame_temp(k,1:frame).*conj(frame_temp(k,1:frame)))/frame;

 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    g=zeros(1,22);
    sum_En(k)=0;
		
    for i1=1:3,
	    g(1)=g(1)+ps_signal(k,i1);       
    end;
	Ec(k,1)=g(1)/(100+1);
    for i1=4:6,
		g(2)=g(2)+ps_signal(k,i1);   
    end;
    Ec(k,2)=g(2)/(100+1);
	for i1=7:10,
		g(3)=g(3)+ps_signal(k,i1);       
    end;
    Ec(k,3)=g(3)/(100+1);
	for i1=11:13,
		g(4)=g(4)+ps_signal(k,i1);    
    end;
    Ec(k,4)=g(4)/(100+1);
	for i1=14:16,
		g(5)=g(5)+ps_signal(k,i1);
    end;   
    Ec(k,5)=g(5)/(110+1);
	for i1=17:20,
		g(6)=g(6)+ps_signal(k,i1);
    end; 
    Ec(k,6)=g(6)/(120+1);
	for i1=21:25,
		g(7)=g(7)+ps_signal(k,i1);
    end;
	Ec(k,7)=g(7)/(140+1);
    for i1=26:29,
		g(8)=g(8)+ps_signal(k,i1);  
    end;
    Ec(k,8)=g(8)/(150+1);  
	for i1=30:35,
		g(9)=g(9)+ps_signal(k,i1);   
    end;
    Ec(k,9)=g(9)/(160+1);
	for i1=36:41,
		g(10)=g(10)+ps_signal(k,i1);    
    end;
    Ec(k,10)=g(10)/(190+1);
	for i1=42:47,
		g(11)=g(11)+ps_signal(k,i1);   
    end;
    Ec(k,11)=g(11)/(210+1);
	for i1=48:55,
		g(12)=g(12)+ps_signal(k,i1);    
    end;
    Ec(k,12)=g(12)/(240+1);
	for i1=56:64,
		g(13)=g(13)+ps_signal(k,i1);      
    end;
    Ec(k,13)=g(13)/(280+1);
	for i1=65:74,
		g(14)=g(14)+ps_signal(k,i1);   
    end; 
    Ec(k,14)=g(14)/(320+1);
	for i1=75:86,
		g(15)=g(15)+ps_signal(k,i1);   
    end;  
    Ec(k,15)=g(15)/(380+1);
	for i1=87:101,
		g(16)=g(16)+ps_signal(k,i1);  
    end;
    Ec(k,16)=g(16)/(450+1);
	for i1=102:118,
		g(17)=g(17)+ps_signal(k,i1);
    end;
    Ec(k,17)=g(17)/(550+1);
	for i1=119:141,
		g(18)=g(18)+ps_signal(k,i1);  
    end;
    Ec(k,18)=g(18)/(700+1);
	for i1=142:170,
		g(19)=g(19)+ps_signal(k,i1);   
    end;Ec(k,19)=g(19)/(900+1);
	for i1=171:205,
		g(20)=g(20)+ps_signal(k,i1);  
    end;
    Ec(k,20)=g(20)/(1100+1);
	for i1=206:246,
		g(21)=g(21)+ps_signal(k,i1);   
    end;  
    Ec(k,21)=g(21)/(1300+1);
    for i1=247:256,
		g(22)=g(22)+ps_signal(k,i1);    
    end;
    Ec(k,22)=g(22)/(1800+1);
	
    for i2=1:22,
	  if k==1
        E(k,i2)=Ec(k,i2);
      else  E(k,i2)=0.45*E(k-1,i2)+0.55*Ec(k,i2);
      end
      if E(k,i2)<0
        E(k,i2)=0.0625;
      end
    end   
    
    for i2=1:22,
      sum_En(k)=sum_En(k)+En(i2);
    end
    
    gama_n(k)=-10*log10(sum_En(k));
    
    for i2=1:22,
        snr_ch(i2)=round(10*log10(E(k,i2)/En(i2))/0.375);
        gama_db(i2)=0.39*(snr_ch(i2)-6)+gama_n(k);
        gama(i2)=min(1,power(10,gama_db(i2)/20));
    end
    
    for i1=1:3,
	    frame1(k,i1)=frame_temp(k,i1)*gama(1);
    end;
	for i1=4:6,
        frame1(k,i1)=frame_temp(k,i1)*gama(2);
    end;
	for i1=7:10,
        frame1(k,i1)=frame_temp(k,i1)*gama(3);
    end;
	for i1=11:13,
		frame1(k,i1)=frame_temp(k,i1)*gama(4);
    end;
	for i1=14:16,
		frame1(k,i1)=frame_temp(k,i1)*gama(5);
    end;
	for i1=17:20,
		frame1(k,i1)=frame_temp(k,i1)*gama(6);
    end;
	for i1=21:25,
		frame1(k,i1)=frame_temp(k,i1)*gama(7);
    end;
	for i1=26:29,
		frame1(k,i1)=frame_temp(k,i1)*gama(8);
    end;
	for i1=30:35,
		frame1(k,i1)=frame_temp(k,i1)*gama(9);
    end;
	for i1=36:41,
		frame1(k,i1)=frame_temp(k,i1)*gama(10);
    end;
	for i1=42:47,
		frame1(k,i1)=frame_temp(k,i1)*gama(11);
    end;
	for i1=48:55,
		frame1(k,i1)=frame_temp(k,i1)*gama(12);
    end;
	for i1=56:64,
		frame1(k,i1)=frame_temp(k,i1)*gama(13);
    end;
	for i1=65:74,
		frame1(k,i1)=frame_temp(k,i1)*gama(14);
    end;
	for i1=75:86,
		frame1(k,i1)=frame_temp(k,i1)*gama(15);
    end;
	for i1=87:101,
		frame1(k,i1)=frame_temp(k,i1)*gama(16);
    end;
	for i1=102:118,
		frame1(k,i1)=frame_temp(k,i1)*gama(17);
    end;
	for i1=119:141,
		frame1(k,i1)=frame_temp(k,i1)*gama(18);
    end;
	for i1=142:170,
		frame1(k,i1)=frame_temp(k,i1)*gama(19);
    end;
	for i1=171:205,
		frame1(k,i1)=frame_temp(k,i1)*gama(20);
    end;
	for i1=206:246,
		frame1(k,i1)=frame_temp(k,i1)*gama(21);
    end;    
    for i1=247:256,
		frame1(k,i1)=frame_temp(k,i1)*gama(22);
    end;
	
    
       frame1(k,1:frame) = frame1(k,1:frame).*(exp(i*frame_angle(k,1:frame)));
       frame2(k,1:frame)=ifft(frame1(k,1:frame));
       %signal(1,(((k-1)*frame)+1):(k*frame)) = frame2(k,1:frame); % Retriving back the signal(after spectral subtraction)
       if k==1 
             signal(1,1:shift)=frame2(k,1:shift);
             %        else if k==2
       else   signal(1,((k-1)*shift+1):(k*shift))=(frame2(k,1:shift)+frame2(k-1,(shift+1):(shift*2)))/2;      
       end
   end;
   
%%%%%%%%%%  depreemphasize    %%%%%%%%%%%%%
signal2(1)=signal(1);
for j1 = 2:length(signal),
 signal2(j1) = signal(j1)+pre_u*signal2(j1-1);
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%  signal((length(y)-1000):(length(y)))=[];   %give up 4 frames in the end
%  y1((length(y1)-1000):(length(y1)))=[];
%    y((length(y)-1000):(length(y)))=[];
% figure(3);
% plot(1:length(frame_ps),frame_ps,1:length(ps_final),ps_final);
figure(4);
signal2=signal2';
signal2=signal2/max(abs(signal2));%归一化
plot(1:length(signal2),signal2);
%以下画语谱图
%map=(log10(1:0.1:10))';
%map=[map map map ];
%subplot(2,2,1)
%spgrambw( noise,8000);title('noise Specgram');colormap(1-map);
%subplot(2,2,2)
%spgrambw(y1,8000);title('sig Specgram');colormap(1-map);
%subplot(2,2,3)
%spgrambw(y,8000);title('mixsig Specgram');colormap(1-map);
%subplot(2,2,4)
%spgrambw(signal,8000);title('Proposed Algorithm Specgram');colormap(1-map);

%spgrambw(sig,8000);title('pure Specgram');colormap(1-map);
%[overall_snr2,seg_nr2]=snr(y1,signal)
% before_snr = 10*log10(sum(abs(y1).^2)/sum((abs(y1-y)).^2))
% overall_snr = 10*log10(sum(abs(y1).^2)/sum((abs(y1-signal)).^2))
wavwrite(signal2,8000,8,'E:\noise enhancing\wav\result(5).wav');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -