RLS递归最小二2乘法自适应滤波器代码实现

1.基本原理

步骤如下,根据公式很容易写出代码;

(1)求误差;

(2)求增益;

(3)求互相关矩阵;

(4)求输出;
e ( n ) = d ( n ) − y ( n ) g ‾ ( n ) = λ − 1 P ( n − 1 ) x ( n ) α ( n ) = 1 + g ‾ T ( n ) x ( n ) g ( n ) = g ‾ ( n ) α ( n ) w ( n ) = w ( n − 1 ) + g ( n ) e ( n ) P ( n ) = λ − 1 P ( n − 1 ) − g ( n ) g ‾ T ( n ) y ( n ) = x ( n ) w T \begin{aligned} &e(n)=d(n)-y(n)\\ &\pmb{\overline{g}}(n)=\lambda^{-1}\pmb{P}(n-1)\pmb{x}(n) \\ &\alpha (n) = 1 + \pmb{\overline{g}}^T(n)\pmb{x}(n)\\ &\pmb{g}(n) = \frac{\pmb{\overline{g}}(n)}{\alpha (n)}\\ &\pmb{w}(n)=w(n-1)+ \pmb{g}(n)e(n)\\ &\pmb{P}(n)=\lambda^{-1}\pmb{P}(n-1)-\pmb{g}(n)\pmb{\overline{g}}^T(n)\\ &y(n)=\pmb{x}(n)\pmb{w}^T\\ \end{aligned} e(n)=d(n)y(n)gg(n)=λ1PP(n1)xx(n)α(n)=1+ggT(n)xx(n)gg(n)=α(n)gg(n)ww(n)=w(n1)+gg(n)e(n)PP(n)=λ1PP(n1)gg(n)ggT(n)y(n)=xx(n)wwT

2.代码实现

clear;close;
% 初始化
N = 1000; % 采样数
Fs = 500; % 采样频率
n = 0 : N-1;
t = n / Fs;
d = (sin(2 * pi * 3 * t))'; % 纯净信号,作为参考信号;
noise = (0.5 * randn(1, length(t)))'; % 噪声;
x = d + noise; % 加如性噪声;
order_n = 10; % 滤波器的阶数;
w = (zeros(1, order_n))'; % 权重系数初始化0
x_len = length(x); 
p = 0.1 * eye(order_n, order_n); % 初始化互相关向量单位矩阵
a = 0.1;
y = (zeros(1, x_len))'; % 输出向量
e = (zeros(1, x_len))'; % 误差向量

%RLS自适应迭代
lambda_inverse = 1 / a;
for n = order_n : x_len
    x1 = x(n - order_n + 1 : 1 : n);
    g_overline_n = lambda_inverse * p * x1; %计算g_overline
    g_overline_n_1 = lambda_inverse * x1' * p; %计算g_overline
    alpha_n = 1 + g_overline_n' * x1; % 计算alpha
    g_n = g_overline_n / alpha_n; % 计算增益
    e(n) = d(n) - w' * x1; % 计算误差
    w = w + g_n * e(n);
    p = lambda_inverse * p - lambda_inverse * g_n * x1' * p;
    %p = lambda_inverse * p - g_n * g_overline_n';
    y(n) = w' * x1;
end

%画图
figure(1);
subplot(311);plot(t, x);axis([0 1 -5 5]);xlabel('时间');ylabel('s幅度');
hold on

subplot(312);plot(t, d);axis([0 1 -5 5]);xlabel('时间');ylabel('x幅度');
hold on


subplot(313);plot(t, y);axis([0 1 -5 5]);xlabel('时间');ylabel('e幅度');

在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KPer_Yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值