資源簡介
一個(gè)實(shí)現(xiàn)nlms算法的matlab程序,可以作為聲音信號(hào),回聲消除方面的擴(kuò)展應(yīng)用
代碼片段和文件信息
%NLMS算法
%讀取聲音文件
[sourceUufsubits]=wavread(‘sourceU.wav‘);??%遠(yuǎn)端傳來的語音
[sourceDdfsdbits]=wavread(‘sourceD.wav‘);?????%近端麥克風(fēng)采集的語音
[unumn]=size(sourceU);??????????????????????%sourceU.wav有unum個(gè)采樣點(diǎn)
[dnumn]=size(sourceD);??????????????????????%sourceD.wav有dnum個(gè)采樣點(diǎn)
tic??????
M?=?100;%每塊M個(gè)采樣點(diǎn)?%濾波器的長度
k=1;????%當(dāng)前是第幾個(gè)采樣點(diǎn)
r=0.999;?
delaynum?=?0;
W=zeros(M1);????%抽頭系數(shù)M*1矩陣
W2=zeros(M1);
U=zeros(M1);????%存儲(chǔ)遠(yuǎn)端信號(hào)的M*1矩陣
D=zeros(M1);????%存儲(chǔ)麥克風(fēng)信號(hào)的M*1矩陣
E=zeros(M1);
ef=zeros(dnum1);
powerD?=?0;???%用來表示M個(gè)麥克風(fēng)聲音采樣點(diǎn)的總能量
powerU?=?0;???%用來表示M個(gè)遠(yuǎn)端聲音采樣點(diǎn)的總能量
powerE?=?0;
EpowerD=0;
EpowerU=0;????%歸一化后的能量均值
EpowerE=M*M;
u_max?=?0.5;????%表示出現(xiàn)的最大的u值
d_max?=?0.5;????%表示出現(xiàn)的最大的u值
double=0;
T0?=?0.3;???%?判斷是否雙端對(duì)話的相關(guān)性,小于說明是雙端對(duì)話中
T1?=?0.0001;%?判斷有沒有遠(yuǎn)端語音的門限值,大于說明有遠(yuǎn)端語音
T2?=?0.0001;
T3=0.0001;%發(fā)散閾值
%循環(huán)處理,直到完成
while?1
????if?k?>unum
????????break;
????end
????if?k?>dnum
????????break;
????end
????u=sourceU(k);??????%讀入第k個(gè)sourceU的采樣點(diǎn)
????pu?=u*u;
????if?pu?>?u_max
????????u_max=pu;????%更新最大的u值
????end
????%更新U向量
????ut=U(1:M-1);
????u_front=U(M);???%保存將要移去的值
????U(2:M)=ut;
????U(1)=u;
????d=sourceD(k);%讀入第k個(gè)sourceD的采樣點(diǎn)
????pd=d*d;
????if?pd?>?d_max
????????d_max=pd;
????end
????%更新D向量
????dt=D(1:M-1);?
????d_front=D(M);????%保存將要移去的值
????D(2:M)=dt;?????
????D(1)=d;
????e?=?d?-?W‘*U;
????%更新E向量
????et=E(1:M-1);?
????e_front?=?abs(E(M));??%保存將要移去的值
????E(2:M)=et;?????
????E(1)=e;
????ef(k)=e;
????pe=e*e;
????%計(jì)算E、D、U向量的能量
????powerD?=?powerD-(d_front*d_front)+pd;
????powerU?=?p
評(píng)論
共有 條評(píng)論