资源简介
webrtc中的AEC算法的matlab解释和转码,我在别人的基础上完善了一下。注意附带的两个pcm数据是浮点+大端
代码片段和文件信息
% Partitioned block frequency domain adaptive filtering NLMS and
% standard time-domain sample-based NLMS
%near is micphone captured signal
fid=fopen(‘near.pcm‘ ‘rb‘); % Load far end
ssin=fread(fidinf‘float32‘);
fclose(fid);
%far is speaker played music
fid=fopen(‘far.pcm‘ ‘rb‘); % Load fnear end
rrin=fread(fidinf‘float32‘);
fclose(fid);
rand(‘state‘13);
fs=16000;
mult=fs/8000;
if fs == 8000
cohRange = 2:3;
elseif fs==16000
cohRange = 2;
end
% Flags
NLPon=1; % NLP on
CNon=0; % Comfort noise on
PLTon=0; % Plotting on
M = 16; % Number of partitions
N = 64; % Partition length
L = M*N; % Filter length
if fs == 8000
mufb = 0.6;
else
mufb = 0.8;
end
VADtd=48;
alp = 0.15; % Power estimation factor
alc = 0.1; % Coherence estimation factor
beta = 0.9; % Plotting factor
%% Changed a little %%
step = 0.1875;%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);
else
echoBandRange = ceil(60*2/fs*N):floor(1500*2/fs*N);
end
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(time domain) NLMS
WFb=zeros(N+1M); % Block-based FD(frequency domain) 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);
hnl = zeros(N+1 1);
overdrive = ones(1 N+1);
xfwm=zeros(N+1M);
dfm=zeros(N+1M);
WFbD=ones(N+11);
fbSupp = 0;
hnlLocalMin = 1;
cohxdLocalMin = 1;
hnlLocalMinV=zeros(Nb+11);
cohxdLocalMinV=zeros(Nb+11);
hnlMinV=zeros(Nb+11);
dkEnV=zeros(Nb+11);
ekEnV=zeros(Nb+11);
ovrd = 2;
ovrdPos = floor((N+1)/4);
ovrdSm = 2;
hnlMin = 1;
minCtr = 0;
SeMin = 0;
SdMin = 0;
SeLocalAvg = 0;
SeMinSm = 0;
divergeFact = 1;
dIdx = 1;
hnlMinCtr = 0;
hnlNewMin = 0;
divergeState = 0;
Sy=ones(N+11);
Sym=1e7*ones(N+11);
wins=[0;sqrt(hanning(2*N-1))];
ubufn=zeros(2*N1);
ebuf=zeros(2*N1);
ebuf2=zeros(2*N1);
ebuf4=zeros(2*N1);
mbuf
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 9632000 2018-04-10 01:57 webrtc_aec\far.pcm
文件 9632000 2018-04-10 01:57 webrtc_aec\near.pcm
文件 26468 2018-04-10 01:57 webrtc_aec\webrtc_aec.m
目录 0 2018-10-12 16:27 webrtc_aec
----------- --------- ---------- ----- ----
19290468 4
评论
共有 条评论