• 大小: 12.33MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-07-28
  • 语言: Matlab
  • 标签: webrtc  aec  

资源简介

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


评论

共有 条评论