赞
踩
LMS算法程序:
function [yn,W,en]=LMS(xn,dn,M,mu,itr)
% LMS(Least Mean Squre)算法
% 输入参数:
% xn 输入的信号序列 (列向量)
% dn 所期望的响应序列 (列向量)
% M 滤波器的阶数 (标量)
% mu 收敛因子(步长) (标量) 要求大于0,小于xn的相关矩阵最大特征值的倒数
% itr 迭代次数 (标量) 默认为xn的长度,M<itr<length(xn)
% 输出参数:
% W 滤波器的权值矩阵 (矩阵)
% 大小为M x itr,
% en 误差序列(itr x 1) (列向量)
% yn 实际输出序列 (列向量)
% 参数个数必须为4个或5个
if nargin == 4 % 4个时递归迭代的次数为xn的长度
itr = length(xn);
elseif nargin == 5 % 5个时满足M<itr<length(xn)
if itr>length(xn) | itr<M
error('迭代次数过大或过小!');
end
else
error('请检查输入参数的个数!');
end
% 初始化参数
en = zeros(itr,1); % 误差序列,en(k)表示第k次迭代时预期输出与实际输入的误差
W = zeros(M,itr); % 每一行代表一个加权参量,每一列代表-次迭代,初始为0
% 迭代计算
for k = M:itr % 第k次迭代
x = xn(k:-1:k-M+1); % 滤波器M个抽头的输入
y = W(:,k-1).' .* x; % 滤波器的输出
%dn=dn.';
%size(dn)
%size(y) %1 100
en=en.'; % 1 100
en(k) = dn(k) - y(k) ; % !!!第k次迭代的误差 en(k) = dn(k) - y
en=en.'; % 100 1
% 滤波器权值计算的迭代式
%size(x)%1 100
x=x.';
W(:,k) = W(:,k-1) + 2*mu*en(k)*x;%w 100 1
end
% 求最优时滤波器的输出序列
yn = inf * ones(size(xn));
for k = M:length(xn)
x = xn(k:-1:k-M+1);
size(yn)% 1 100
yn=yn.';% 100 1
x=x.';
yn = W(:,end).'.* x;% 100 100 * 100 1 =100 1%%%%%yn(k) = W(:,end).'.* x;
yn=yn.';%转置恢复
end
使用LMS算法估计时间延迟:
alpha = 0.8
t = 0:1999
xs1 = 10*cos(t);
xs2 = alpha*10*cos((t+7));
dt = 1
T = dt
%产生随机噪声信号
xn1 = randn(1,2000);%产生一个1×200大小的噪声信号
xn2 = randn(1,2000);%产生一个1×200大小的噪声信号
x1 = xs1 + xn1
x2 = xs2 + xn2
x1 = x1'
x2 = x2'
%x1作为输入信号,x2作为理想信号
xn = x1
dn = x2
%求收敛常数
mu = 0.25*(1/trace(xn*xn.'));
M = 15
figure(1)
[yn,W,en]=LMS(xn,dn,M,mu)
a = W(:,end)
[max_a,index]=max(a,[],1)
figure(1)
plot(W(:,end))
W(:,end)权函数最大值的位置对应时间延迟,figure(1)为:
使用互相关函数估计时间延迟:
figure(2)
[c,lags] = xcorr(x1,x2)
plot(lags*T,c)
figure(2)为:
两个图最大值对应的位置为时间延迟。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。