@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=0∑nδn−i∣e(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滤波模型如下图所示:

算法步骤:
a.估计当前值:y(n)=w∗XN′;y(n) = w*XN';y(n)=w∗XN′;
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=p∗XN/(step+XN′∗p∗XN);
d.更新权值:w=w+k∗conj(e(n));w = w + k*conj(e(n));w=w+k∗conj(e(n));
e.更新协方差矩阵:p=(1/step)∗(1−k(n)∗u(n))∗p;p = (1/step)*(1-k(n)*u(n))*p;p=(1/step)∗(1−k(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或者LMS自适应滤波器
四、参考资料
https://zhuanlan.zhihu.com/p/256998244

1万+

被折叠的 条评论
为什么被折叠?



