www.pudn.com > aec_回音消除.rar > corr229--milestone.m


% 噪声系列1 
%%%%%x = [3,11,7,0,-1,4,2]; 
%%%%%nx =[-3:3]; 
load r.txt; 
load r1.txt; 
load echo.txt; 
%pro(1:length(echo)) = round(1000*echo(1:length(echo))); 
pro(1:length(echo)) = 1*echo(1:length(echo)); 
 
 
framelength = 160;   %%%%%每帧(20ms)共160点 
number1 = 248;   %%%%%总帧数 
number2 = 10;    %%%%%时延帧数,或搜索帧数范围(number2,number3-k);number2:最大时延帧数 
number3 = 6;     %%%%%number3:最小时延帧数 
k = 2;     %%%%%求相关系数的帧数 
 
per1 = 1;  %%%%%从echo中取初始帧的移动的最小单位= 1/per1帧 
per2 = 4;  %%%%%从r中搜索最大相关系数的最小单位= 1/per2帧 
 
a = 0.8; 
b = 0.5;%%%%%b = 0.22; 
c = 0.3;%%%%%c = 0.18; 
 
attenuation_factor = 22/17; %%%%27/17; 
 
xgxs_1 = zeros(2,2); 
xgxs = zeros(number1*per1,number2*per2); 
opt = zeros(2,number1*per2); 
opt(1,1) = 0; 
opt(1,2) = 0; 
aver_power_x2 = zeros(1,number2*per2); 
aver_power_y2 = zeros(1,number1*per1-number2*per1); 
x_pre2f = zeros(1,(number2-number3+k)*framelength); 
 
for i=((number2)*per1):(number1*per1) 
    y = echo((i)*framelength/per1+1:(i)*framelength/per1+k*framelength); 
    ny = [1:k*framelength];   
    y2 = (y.^2); 
    aver_power_y2(i) = mean(y2); 
     
    x_pre2f = r((i)*framelength/per1+1-number2*framelength:(i)*framelength/per1+k*framelength-number3*framelength); 
    x2_pre2 = (x_pre2f.^2);  
    aver_power_x2(i) = mean(x2_pre2); 
     
    if (aver_power_y2(i) < (aver_power_x2(i) * attenuation_factor)) 
        pro((i-1)*framelength/per1+1:(i-1)*framelength/per1+k*framelength) = zeros(1,k*framelength); 
    else 
    %y_max(i) = max(y); 
        for j= 1 :number2*per2 
            x = r((i)*framelength/per1+1-number2*framelength+j*framelength/per2:(i)*framelength/per1-number2*framelength+j*framelength/per2+k*framelength); 
            nx = [1:k*framelength];      
            %%%%%if (max(y)>0.3)         
            %x1 = (x.^2); 
            %aver_power_x(j-(i - number2)*per2) = mean(x1); 
            %x_max(j-(i - number2)*per2) = max(x); 
            if (max(y)>0.3) 
                if ((max(x)==0)|(max(y)==0))  
                    xgxs(i,j) = 0; 
                else 
                    xgxs_1 = corrcoef(x,y);       
                    xgxs(i,j) = xgxs_1(2,1);   
                end    
            else 
                xgxs(i,j) = 0; 
            end 
     
        end 
        opt(1,i) = max(xgxs(i,:)); 
        opt(2,i) = i - rem(min(find(xgxs(i,:)==max(xgxs(i,:)))),number1*per2); 
        %x1 = (x.^2)'; 
        %y1 = (y.^2)'; 
        %if ((opt(1,i) > 0.08) & (cumsum(y1) < cumsum(x1))) 
        %if ((opt(1,i) > a)|(aver_power_y(i) < (max(aver_power_x) * attenuation_factor))) 
        %if ((opt(1,i) > a)) 
        %if ((opt(1,i) > a)|(y_max(i) < (max(x_max) * attenuation_factor))) 
        if ((opt(1,i) > a)) 
            %pro((i-1)*framelength/per1+1:(i-1)*framelength/per1+k*framelength) = zeros(1,k*framelength); 
         
            %pro((i-1)*framelength/per1+1:(i-1)*framelength/per1+framelength) = (pro((i-1)*framelength/per1+1:(i-1)*framelength/per1+framelength)).^(0.3);  
        %for k =1:framelength 
         %   if (pro((i-1)*framelength/per1+k) > mean(pro((i-1)*framelength/per1+1:(i-1)*framelength/per1+framelength)))  
          %      pro((i-1)*framelength/per1+k) = mean(pro((i-1)*framelength/per1+1:(i-1)*framelength/per1+framelength)); 
           % end 
        %end 
        %pro((i-1)*framelength/per1+1:(i-1)*framelength/per1+framelength) = (1000*(pro((i-1)*framelength/per1+1:(i-1)*framelength/per1+framelength))).^(0.3)/100;  
        %pro((i-1)*framelength/per1+1:(i-1)*framelength/per1+framelength) = zeros(1,framelength); 
        %%%%%else if ((opt(1,i) > b) & (opt(1,i-1) > b) & (opt(1,i-2) > b) & (i > 3)) 
        else if ((opt(1,i) > b) & (opt(1,i-1) > b)) 
                %pro((i-1)*framelength/per1+1:(i-1)*framelength/per1+framelength) = pro((i-1)*framelength/per1+1:(i-1)*framelength/per1+framelength)/10;    
                pro((i-1)*framelength/per1+1:(i-1)*framelength/per1+k*framelength) =  zeros(1,k*framelength);   
            else if ((opt(1,i) > c) & (opt(1,i-1) > c) & (opt(1,i-2) > c)) 
                %pro((i-1)*framelength/per1+1:(i-1)*framelength/per1+framelength) = pro((i-1)*framelength/per1+1:(i-1)*framelength/per1+framelength)/10;    
                %pro((i-1)*framelength/per1+1:(i-1)*framelength/per1+k*framelength) =  zeros(1,k*framelength);   
         
                end 
            end 
         
        end 
    end 
end 
 
figure(3); 
%subplot(411),plot(r),title('r');axis([0, 40000, -10, 10]); 
%subplot(412),plot(r1),title('r1');axis([0, 40000, -10, 10]); 
%subplot(413),plot(echo),title('echo');axis([0, 40000, -10, 10]); 
%subplot(414),plot(pro),title('filter');axis([0, 40000,-10, 10]); 
subplot(411),plot(r),title('r'); 
subplot(412),plot(r1),title('r1'); 
subplot(413),plot(echo),title('echo'); 
subplot(414),plot(pro),title('filter'); 
 
filter = 1000*pro'; 
auwrite(filter,8000,16,'linear','filter'); 
%auwrite(echo,8000,16,'linear','echo'); 
%format long; 
save filter.txt filter -ascii -double; 
save pro.txt pro -ascii -double; 
 
echo_new = 1000*echo; 
save echo_new.txt echo_new -ascii -double; 
 
%save filter.txt filter -ascii; 
%save filter.txt filter; 
 
%for i=1:length(pro) 
 %   filter(2*i-1) = rem(pro(i),256); 
  %  filter(2*i) = fix(pro(i)/256); 
%end 
%save filter.dat filter -ascii; 
     
    %opt(2,i) = fix(find(xgxs(i,:)==opt(1,i)),number1*per);    
    %opt(2,i) = fix(find(xgxs(i,:)==opt(1,i))/(number1*per))-i;    
     
    %i -rem(find(xgxs(i,:)==max(xgxs(i,:))),number1*per); 
 
    %opt(2,8) = 8 - rem(find(xgxs(8,:)==opt(1,8)),number1*per); 
 %opt(1,8) = max(xgxs(8,:)); 
  %  opt(2,8) = rem(find(xgxs(8,:)==opt(1,8)),number1*per);  
  %   opt(1,16) = max(xgxs(16,:)); 
   % opt(2,16) = rem(find(xgxs(16,:)==opt(1,16)),number1*per);  
   % opt(1,25) = max(xgxs(25,:)); 
   % opt(2,25) = rem(find(xgxs(25,:)==opt(1,25)),number1*per);  
 
%%%%%[y,ny] = sigshift(x, nx, 2); 
%%%%%w = randn(1, length(y));  
%%%%%nw = ny; 
%%%%%[y, ny] = sigadd(y, ny, w, nw);