• 大小: 28KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-14
  • 语言: Matlab
  • 标签: matlab  webrtc  fullaec  aec  

资源简介

webrtc中的回声消除模块,matlab版本,亲测可用,是做回声消除(AEC)的好学习代码

资源截图

代码片段和文件信息

% Partitioned block frequency domain adaptive filtering NLMS and 
% standard time-domain sample-based NLMS 
%fid=fopen(‘aecFar-samsung.pcm‘ ‘rb‘); % Load far end
fid=fopen(‘aecFar.pcm‘ ‘rb‘); % Load far end
%fid=fopen(farFile ‘rb‘); % Load far end
rrin=fread(fidinf‘int16‘);
fclose(fid); 
%rrin=loadsl(‘data/far_me2.pcm‘); % Load far end
%fid=fopen(‘aecNear-samsung.pcm‘ ‘rb‘); % Load near end
fid=fopen(‘aecNear.pcm‘ ‘rb‘); % Load near end
%fid=fopen(nearFile ‘rb‘); % Load near end
ssin=fread(fidinf‘int16‘);
%ssin = [zeros(10241) ; ssin(1:end-1024)];

fclose(fid);
rand(‘state‘13);
fs=16000;
mult=fs/8000;
%rrin=rrin(fs*0+1:round(fs*120));
%ssin=ssin(fs*0+1:round(fs*120));
if fs == 8000
cohRange = 2:3;
elseif fs==16000
cohRange = 2;
end

% Flags
NLPon=1;  % NLP
CNon=1; % Comfort noise
PLTon=1;  % Plotting

M = 16; % Number of partitions
N = 64; % Partition length
L = M*N; % Filter length 
if fs == 8000
    mufb = 0.6;
else
    mufb = 0.5;  
end
%mufb=1;  
VADtd=48;
alp = 0.1; % Power estimation factor alc = 0.1; % Coherence estimation factor
beta = 0.9; % Plotting factor 
%% Changed a little %%
step = 0.3;%0.1875; % Downward step size 
%%
if fs == 8000
    threshold=2e-6;  % DTrob threshold
else
    %threshold=0.7e-6;
    threshold=1.5e-6; end

if fs == 8000
    echoBandRange = ceil(300*2/fs*N):floor(1800*2/fs*N);
    %echoBandRange = ceil(1500*2/fs*N):floor(2500*2/fs*N);
else
    echoBandRange = ceil(300*2/fs*N):floor(1800*2/fs*N);
    %echoBandRange = ceil(300*2/fs*N):floor(1800*2/fs*N);
end
%echoBandRange = ceil(1600*2/fs*N):floor(1900*2/fs*N);
%echoBandRange = ceil(2000*2/fs*N):floor(4000*2/fs*N);
suppState = 1;
transCtr = 0;

Nt=1;
vt=1;

ramp = 1.0003; % Upward ramp
rampd = 0.999; % Downward ramp
cvt = 20; % Subband VAD threshold;
nnthres = 20; % Noise threshold 

shh=logspace(-1.3-2.2N+1)‘;
sh=[shh;flipud(shh(2:end-1))]; % Suppression profile

len=length(ssin);
w=zeros(L1); % Sample-based TD NLMS 
WFb=zeros(N+1M); % Block-based FD NLMS
WFbOld=zeros(N+1M); % Block-based FD NLMS
YFb=zeros(N+1M);
erfb=zeros(len1);
erfb3=zeros(len1);

ercn=zeros(len1);
zm=zeros(N1);
XFm=zeros(N+1M);
YFm=zeros(N+1M);
pn0=10*ones(N+11);
pn=zeros(N+11);
NN=len;
Nb=floor(NN/N)-M;
erifb=zeros(Nb+11)+0.1;
erifb3=zeros(Nb+11)+0.1;
ericn=zeros(Nb+11)+0.1;
dri=zeros(Nb+11)+0.1;
start=1;
xo=zeros(N1);
do=xo;
eo=xo;

echoBands=zeros(Nb+11);
cohxdAvg=zeros(Nb+11);
cohxdSlow=zeros(Nb+1N+1);
cohedSlow=zeros(Nb+1N+1);
%overdriveM=zeros(Nb+1N+1);
cohxdFastAvg=zeros(Nb+11);
cohxdAvgBad=zeros(Nb+11);
cohedAvg=zeros(Nb+11);
cohedFastAvg=zeros(Nb+11);
hnledAvg=zeros(Nb+11);
hnlxdAvg=zeros(Nb+11);
ovrdV=zeros(Nb+11);
dIdxV=zeros(Nb+11);
SLxV=zeros(Nb+11);
hnlSortQV=zeros(Nb+11);
hnlPrefAvgV=zeros(Nb+11);
mutInfAvg=zeros(Nb+11);
%overdrive=zeros(Nb+11);
hnled = zeros(N+1 1);
weight=zeros(N+11);
hnlMax = zeros(N+1 1)

评论

共有 条评论