【Matlab】使用LMS算法估计时间延迟

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)为:

两个图最大值对应的位置为时间延迟。

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值