% 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