資源簡介
基于NLMS和LMS算法,用matlab實現了 對語音信號中的回聲進行消除,完成了課程設計,其中NLMS的效果要優于LMS的效果.
代碼片段和文件信息
clear?all
close?all
clc
hold?off????
sysorder=50;?%抽頭數
[inpsr]=audioread(‘recordlms_new.wav‘);???????%輸入
inp=inp(:);
inp(225718:)?=?0;
[dsr]?=??audioread(‘record01.wav‘);
d=d(:);
d(225718:)?=?0;
totallength=size(d1);?????????????????%步長
N=length(inp);
%k=0:1382493;
k=0:225717;
?
%算法開始
w=zeros(sysorder1);???????????????????%初始化
w1=zeros(sysorder1);??????????????????%初始化
error=zeros(N1);??????????????????%初始化
EE=zeros(N1);
Loop=15000;
???
for?n=sysorder:N
????u=inp(n:-1:n-sysorder+1);??????????%u的矩陣
????%u=inp(n-sysorder+1:n);?
????%NLMS算法
????y(n)=w‘*u;?????????????????????????%系統輸出
????r(n)=u‘*u;?????????????????????????%自相關矩陣
????e(n)=d(n)-y(n);????????????????????%誤差
????srr(n)=10*log10(d(n)/(inp(n)-d(n)));
????srr1(n)=10*log10(d(n)/(y(n)-d(n)));
????%e(n)=inp(n)-y(n);?????????????????%誤差????????
????fai=1e-10;?????????????????????????%修正參數,防止r(n)過小導致步長值太大
????if?n<2000
????????mu=0.32;
????else
????????mu=0.15;
????end
????w=0.8*w+mu*u*e(n)/(r(n)+fai);??????%NLMS迭代方程
????error(n)=error(n)+e(n)^2;
???
????%LMS算法
????y1(n)=w1‘*u;
????e1(n)=d(n)-y1(n);
????w1=0.8*w1+0.1*u*e1(n
評論
共有 條評論