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

📄 dtalk.m

📁 结合回声消除和语音增强方法的double talk算法
💻 M
字号:
clc;
clear;

%Filter 1 NEW
%iterations=77390; %DTALK123
%iterations=89500; %DTALKBACK
%iterations=80000; %DTALKPINK
%iterations=80100; %DTALKMUSIC
%iterations=96940; %DTALKMUSICF45
iterations=75350; %DTALKPINKF45

%Filter 2 OLD
%iterations=74320; %DTALK123F2
%iterations=77300; %DTALKBACKF2
%iterations=70000; %DTALKPINKF2
%iterations=76780; %DTALKMUSICF2

%whitencoeff=0.95;
whitencoeff=0;

ALPHA=0.005;

oref=0;
omic=0;

hangover=200;

%Read in the input file 
%Filter1
%input_signal_sim = wavread('dtalk123.wav'); 
%input_signal_sim = wavread('dtalkback.wav'); 
%input_signal_sim = wavread('dtalkpink.wav'); 
%input_signal_sim = wavread('dtalkmusic.wav');
%input_signal_sim = wavread('dtalkmusicf45.wav'); 
input_signal_sim = wavread('dtalkpinkf45.wav'); 

%Filter2
%input_signal_sim = wavread('dtalk123f2.wav'); 
%input_signal_sim = wavread('dtalkbackf2.wav'); 
%input_signal_sim = wavread('dtalkpinkf2.wav'); 
%input_signal_sim = wavread('dtalkmusicf2.wav'); 

amic_signal = input_signal_sim(:,1)';
aref_signal = input_signal_sim(:,2)';

%aref = zeros(iterations+1);
%amic = zeros(iterations+1);
%aratio = zeros(iterations+1);
%lthreo = zeros(iterations+1);

aref(1)=1;
amic(1)=1;
lthreo(1)=0;

fhangover=0;
cntover=0;

% Loop for number of iterations specified in command line. 
for i=1:iterations
    i
    absref=abs(aref_signal(i)-whitencoeff*oref);
    oref=aref_signal(i);
    aref(i+1)=aref(i)+ALPHA*(absref-aref(i));
    
    absmic=abs(amic_signal(i)-whitencoeff*omic);
    omic=amic_signal(i);
    amic(i+1)=amic(i)+ALPHA*(absmic-amic(i));
    
    aratio(i+1)=amic(i+1)/aref(i+1);
    lthreo(i+1)=lthreo(i)+(1/22050)*(aratio(i+1)-lthreo(i));   
    
    if (aratio(i+1)>(lthreo(i+1)*1.1))
        fdoubletalk(i+1)=1;        
        fhangover=1;
        cntover=0;
    else    
        fdoubletalk(i+1)=0;
    end
    
    if (fhangover==1)
        cntover=cntover+1;
        fdoubletalk(i+1)=1;
    end
    
    if (cntover>=hangover)
       fdoubletalk(i+1)=0;        
       fhangover=0;
       cntover=0; 
    end
    
end

%Display the Result
figure(1);
hold on;
title('aref');
xlabel('Iterations');
timex=[1:iterations];
%plot(timex,aref([2:iterations+1]),'b');
%plot(timex,amic([2:iterations+1]),'r');
plot(timex,20*log10(aref([2:iterations+1])),'b');
plot(timex,20*log10(amic([2:iterations+1])),'r');
%axis([1 inf 0 0.1]);
axis([1 inf -70 -10]);
grid;

%figure(2);
%hold on;
%title('amic');
%xlabel('Iterations');
%timex=[1:iterations];
%plot(timex,amic([2:iterations+1]),'b');

figure(3);
hold on;
title('aratio vs lthreo');
xlabel('Iterations');
timex=[1:iterations];
%plot(timex,aratio([2:iterations+1]),'b');
%plot(timex,lthreo([2:iterations+1])*1.1,'r');
plot(timex,20*log10(aratio([2:iterations+1])),'b');
plot(timex,20*log10(lthreo([2:iterations+1])*1.1),'r');
plot(timex,fdoubletalk([2:iterations+1]),'g');
%axis([1 inf -0.01 4.0]);
axis([1 inf -30 30]);
grid;

⌨️ 快捷键说明

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