RLS自适应滤波与Matlab仿真

@RLS自适应滤波与Matlab仿真

一、RLS自适应滤波模型

  假设d(n)为参考信号,k(n)为增益向量,e(n)为先验估计误差,w(n)为滤波器抽头系数,y(n)为RLS滤波后输出信号。

RLS采用指数加权的最小二乘法,其代价函数为指数加权的误差平方J(n)=∑i=0nδn−i∣e(n)∣2J(n) =\sum_{i=0}^{n}\delta^{n-i}|e(n)|^2J(n)=i=0nδnie(n)2 误差计算公式:e(n)=d(n)−y(n)e(n) = d(n) - y(n)e(n)=d(n)y(n)
权值更新公式:w(n+1)=w(n)+k(n)e(n)w(n+1) = w(n)+k(n)e(n)w(n+1)=w(n)+k(n)e(n)
RLS滤波模型如下图所示:
在这里插入图片描述

RLS滤波模型

算法步骤:
a.估计当前值:y(n)=w∗XN′;y(n) = w*XN';y(n)=wXN;
b.估计误差:e(n)=s(n)−y(n);e(n) = s(n) - y(n);e(n)=s(n)y(n);
c.计算增益:k=p∗XN/(step+XN′∗p∗XN);k = p*XN/(step + XN'*p*XN);k=pXN/(step+XNpXN);
d.更新权值:w=w+k∗conj(e(n));w = w + k*conj(e(n));w=w+kconj(e(n));
e.更新协方差矩阵:p=(1/step)∗(1−k(n)∗u(n))∗p;p = (1/step)*(1-k(n)*u(n))*p;p=(1/step)(1k(n)u(n))p;

二、matlab程序

1.代码

%--------------Function:Adaptive filter--------------------------
%--------------Remark: RLS Method -------------------------------
%--------------Data:2024.11.13----------------------------------
%--------------Author:Clemence----------------------------------
%--------------Reference:---------------------------------------



clc;
clear all;
close all;

g = 100;% Simulation Count
N=1024;% Sample Points
k=128;% Filter Coefficient Number
pp = zeros(g,N-k);% Error Memory

%-------------------------------Signal Paras--------------------------
f = 24e6;       % Signal Frequency
phase = 0;      % Initial Phase
a = 1;          % Amplitude

%------------------------------Sample Paras----------------------------
Fs = 100e6;     % Sample Frequency
ts = 1/Fs;      % Sample Interval
t = 0:ts:(N-1)*ts;      % Sample Time

s= a*cos(2*pi*f*t + phase); % Signal
 
%------------------------------RLS Paras-------------------------------
delta = 0.001;
step = 0.98;

for q = 1:g
   
    xn = awgn(s,10);
    %---Initial-----------------
    y=zeros(1,N);  % Output Signal y
    y(1:k)=xn(1:k); % k
    w=zeros(1,k);% Filter Coefficient
    e=zeros(1,N);% Error
    p = (1/delta)*eye(k); %Covariance Matrix

    %-----RLS---------------------
    for i=k+1:N
%         XN=xn((i-k+1):(i));
        XN=xn(i:-1:i-k+1);
        y(i)=w*XN';% Estimate y
        e(i)=s(i)-y(i);% Estimate Error
        v = p*XN';
        kk = (1/step)*v/(1+(1/step)*XN*v);% Calculate Gain
        w=w+kk'*conj(e(i));% Update Weight
        p = (1/step)*(eye(k)-kk*XN)*p;% Update Covariance Matrix
    end
    pp(q,:) = e(k+1:N).^2;
    
end

for b = 1:N-k
    bi(b) = sum(pp(:,b))/g;% Calculate Average Error
end
figure;% Output Signal -y
plot(y);

t=1:N-k;
figure(2);% Error Curve
plot(t,bi,'r');
title("Mean Square Error Curve");
hold on    

2.仿真结果

在这里插入图片描述

RLS均方误差曲线

三、结果分析

  从仿真结果可以看出RLS的收敛速度较快,滤波器系数更新时计算量较大,收敛速度的提升是以计算速度为代价的。因此,实际应用中,可根据收敛后误差允许范围,合理地选择RLS或者LMS自适应滤波器

四、参考资料

https://zhuanlan.zhihu.com/p/256998244

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值