📄 vssnlms_1.m
字号:
function [out h mu] = vsslms_1(refr,echo,order,W,mu_max,mu_opt,lambda,beta)
%根据一段误差信号(输出)能量的平均
%lambda 系数遗忘因子
%beta 步长调整系数
%lambda = 0.99; %遗忘因子
%lambda_p = 0.9; %功率遗忘因子
%beta = 0.001;
mu(1) = mu_max;
N = length(refr);
xn = zeros(1,order);
xe = zeros(1,order);
pow_e = 0; %误差信号功率
%pow_x = 0; %输入信号功率
% 变步长nlms 算法
for i = 1 : N
xn(2:order) = xn(1:order-1);
xn(1) = refr(i);
xx= xn*xn';
normX = xx + 0.00001;
y=xn*W';
e(i)=echo(i)-y; %echo is dn
xe(2:order) = xe(1:order-1);
xe(1) = e(i);
pow_e = sum(abs(xe.^2))/order;
% pow_e = (1-lambda_p)*pow_e + lambda_p*abs(e(i)^2);
% pow_x = (1-lambda_p)*pow_x + lambda_p*abs(echo(i)^2);
mu(i+1)=lambda*mu(i)+beta*pow_e;
if mu(i+1)>=mu_max
mu(i+1)=mu_max;
else
mu(i+1) = mu_opt;
end;
W = W + mu(i)/normX*conj(e(i))*xn; % update filter coefficient vector
end
out = e;
h = fliplr(W);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -