📄 rls0.m
字号:
% RLS算法
randn('seed', 0) ;
rand('seed', 0) ;
NoOfData = 8000 ; % Set no of data points used for training
Order = 32 ; % 自适应滤波权数
Lambda = 0.98 ; % 遗忘因子
Delta = 0.001 ; % 相关矩阵R的初始化
pi=3.14;
Fs=0.01;
%for n=1:NoOfData;
%x(n)=100*sin(2*pi*Fs*n);
%h=[0.1,0.2,0.3,0.4,
% 0.5,0.6,0.7,0.8,
% 0.9,1.0,1.1,1.2,
%1.3,1.4,1.5,1.6,
%1.6,1.5,1.4,1.3,
%1.2,1.1,1.0,0.9,
%0.8,0.7,0.6,0.5,
%0.4,0.3,0.2,0.1];
x = randn(NoOfData, 1) ;%高斯随机系列
h = rand(Order, 1) ; % 系统随机抽样
d = filter(h, 1, x) ; % 期望输出
%d=sin(2*pi*Fs*(n-16));
%Initialize RLS
P = Delta * eye ( Order, Order ) ;
w = zeros ( Order, 1 ) ;
% RLS Adaptation
for n = Order : NoOfData ;
u = x(n:-1:n-Order+1) ;
pi_ = u' * P ;
k = Lambda + pi_ * u ;
K = pi_'/k;
e(n) = d(n) - w' * u ;
w = w + K * e(n) ;
PPrime = K * pi_ ;
P = ( P - PPrime ) / Lambda ;
w_err(n) = norm(h - w) ;
end ;
% 作图表示结果
figure ;
plot(20*log10(abs(e))) ;%| e |的误差曲线
title('学习曲线') ;
xlabel('迭代次数') ;
ylabel('输出误差估计') ;
figure ;
semilogy(w_err) ;%作实际估计误差图
title('矢量估计误差') ;
xlabel('迭代次数') ;
ylabel('误差权矢量') ;
figure;
plot(x,'red');
title('输入信号') ;
xlabel('n') ;
ylabel('x(n)') ;%|w|的曲线
figure;
plot(d,'red');
title('参考信号') ;
xlabel('n') ;
ylabel('d(n)') ;%应该得到的曲线
figure ;
plot(w,'red') ;
title('权收敛过程') ;
xlabel('n') ;
ylabel('滤波系数') ;%|w|的曲线
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -