📄 rls.m
字号:
clear;
clc;
randn('seed', 0) ;
rand('seed', 0) ;
NoOfData = 1785 ;
Order =40 ;
Lambda = 0.98;
Delta = 0.001 ;
x =randn(NoOfData,1);
t=0:((4*pi)/1784):4*pi;
x=x+(sin(t))';
h =rand(Order, 1);
% d=sin(t);
d = filter(h, 1, x);
P = Delta*eye (Order, Order);
w = zeros ( Order, 1 ) ;
for n = Order : NoOfData ;
u = x(n:-1:n-Order+1) ;
% k=Lambda^(-1).*P*u./(1+Lambda^(-1).*u'*P*u);
% e(n)=d(n)-w'*u;
% w=w+k.*conj(e(n));
% P=Lambda^(-1).*P-Lambda^(-1).*k*u'*P;
% y(n)=w'*u;
% e1(n)=d(n)-w'*u;
% end;
%
% figure;
% plot(y);
pi_ = u' * P ;
k = Lambda + pi_ * u ;
K = pi_'/k; %RLS增益矢量
e(n) = d(n) - w' * u ; %计算前验估计误差
w = w + K * e(n) ; %更新权系数矢量
y(n)=w'*u; %输出信号
PPrime = K * pi_ ;
P = ( P - PPrime ) / Lambda ; %递推系数逆矩阵
w_err(n) = norm(h - w) ;
end ;
e
xn=fft(x)
yn=fft(y)
figure;
subplot(211),plot(x);ylabel('带噪声的输入');
subplot(212),plot(y);ylabel('滤波器输出');
figure;
subplot(211),plot(x);ylabel('带噪声的输入');
subplot(212),plot(e);ylabel('输出误差');
figure
subplot(211);
plot(abs(xn));
ylabel('输入');
subplot(212);
plot(abs(yn));
ylabel('输出');
title('FFT频谱分析图')
% figure ;
% plot(20*log10(abs(e))) ;
% title('Learning Curve') ;
% xlabel('Iteration Number') ;
% ylabel('Output Estimation Error in dB') ;
%
% figure ;
% semilogy(w_err) ;
% title('Weight Estimation Error') ;
% xlabel('Iteration Number') ;
% ylabel('Weight Error in dB') ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -