- refactored

This commit is contained in:
2022-06-30 13:32:40 +02:00
parent 77cd5261b1
commit 776932e5d1
144 changed files with 0 additions and 38 deletions
+55
View File
@@ -0,0 +1,55 @@
% RLS-Algorithmus
% ---------------
% function [dd,e,wf,fpo] = rls(x,d,N,mu,rho,wi)
%
% Parameter:
% x : Eingangssignal
% d : erwünschtes Signal (Referenzsignal)
% N : Filterordnung
% mu : konstante Schrittweite
% rho : Vergessensfaktor
% wi : Startwerte der Filterkoeffizienten im Zeitbereich
%
% Rückgabewerte:
% dd : Schätzung d' des Referenzsignals d aus x
% e : Fehler d - d'
% wf : Filterkoeffizienten am Ende der Adaption im Zeitbereich
% fpo : Anzahl der benötigten Floating-Point Operationen
% -------------------------------------------------------------------------
% Datum : 27.3.2002
% Autor : Jens Ahrensfeld
% Thema : Diplomarbeit
% Datei : rls.m
%
% -------------------------------------------------------------------------
function [dd,e,wf,fpo] = rls(x,d,N,mu,rho,wi)
% -------------------------------------------------------------------------
% Initialisierung RLS
% -------------------------------------------------------------------------
wf = wi;
dd = zeros(length(x),1);
e = zeros(length(x),1);
eta = 1000000;
R_ = eta * eye(N); % inverse Autokorrelationsmatrix R
flops(0);
% -------------------------------------------------------------------------
% RLS Adaptation
% -------------------------------------------------------------------------
for n = N : length(x)
xs = x(n:-1:n-N+1); % Eingangsvektor
dd(n) = xs' * wf; % Filterung
e(n) = d(n) - dd(n); % a priori-Fehler
z = R_ * xs; % gefilterter Datenvektor z
vn = 1/(rho + xs'*z); % Normierungskonstante
zn = vn*z; % Normierung
wf = wf + mu*e(n)*zn; % Aktualisierung der Filterkoeffizienten
R_ = 1/rho * (R_ - zn*xs'*R_); % Aktualisierung der inversen
% Autokorrelationsmatrix R
end ;
fpo = flops;
% -------------------------------------------------------------------------
% Ende rls.m
+60
View File
@@ -0,0 +1,60 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% RLS Algorithm %
% %
% Written By: Sundar Sankaran and A. A. (Louis) Beex %
% DSP Research Laboratory %
% Dept. of Electrical and Comp. Engg %
% Virginia Tech %
% Blacksburg VA 24061-0111 %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
randn('seed', 0) ;
rand('seed', 0) ;
NoOfData = 8000 ; % Set no of data points used for training
Order = 32 ; % Set the adaptive filter order
Lambda = 0.98 ; % Set the forgetting factor
Delta = 0.001 ; % R initialized to Delta*I
x = randn(NoOfData, 1) ;% Input assumed to be white
h = rand(Order, 1) ; % System picked randomly
d = filter(h, 1, x) ; % Generate output (desired signal)
% 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 ;
% Plot results
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') ;
+71
View File
@@ -0,0 +1,71 @@
%===================================================================
%-------------------------------------------------------------------
%
% Adaptive Filter
%
% Simulationen
%
% [E,W,w,inv_R]=rls(N,X,D,w_start,rho)
%
% RLS-Algorithmus
%
% E = Fehlersignal E[.]
% W = Filterkoeffizienten im zeitlichen Verlauf
% w = Filterkoeffizienten am Ende der Adaption
% inv_R = Inverse deterministische Korrelationsmatrix
% nach Adaptionsende
% N = Anz. Filterkoeffizienten = Filterordnung+1
% X = Filtereingang X[.]
% D = erwuenschtes Signal D[.]
% w_start = Startwerte Filterkoeffizienten
% rho = Vergessensfaktor
%
%-------------------------------------------------------------------
%
% author: Markus Hofbauer
% ISI, ETH Zuerich (Switzerland)
%
% created: 7/2000
%
%
%-------------------------------------------------------------------
%
% File : rls.m
%
% Startfile: simX.m
%
%-------------------------------------------------------------------
%===================================================================
function [E,W,w,inv_R]=rls(N,X,D,w_start,rho)
p0=1000000; % Initialisierung von
inv_R=p0*eye(N); % inv_R
adaptlen=length(X);
w= w_start;
W=zeros(N,adaptlen);
E=zeros(adaptlen,1);
%-------------------------------------------------------------------
% RLS Update Loop
%-------------------------------------------------------------------
for i=N:adaptlen
W(:,i)=w;
x = X(i:-1:i-N+1); % Eingangsvektor (x[k],x[k-1],..,x[k-N+1])
y=x'*w; % Filterausgang
e=D(i)-y; % Fehler
c=1/(rho+x'*inv_R*x);
inv_R=1/rho*(inv_R-c*inv_R*x*x'*inv_R); % Aufdatierung von inv_R
w=w+inv_R*e*x; % Aufdatierung von w
E(i)=e;
end;