% ################################################################################## % ## Funktion: lburg.m; Burg-Algorithmus ## % ################################################################################## % % function [ARcoeff,g] = lburg(N,q,MA,AR[,NFFT,[,N_vor]]); % % Spektralschaetzung auf der Grundlage des Burg-Algorithmus' % Input-Argumente: % N : Laenge des Datenblockes % q : Grad des Praediktorfehlerfilters % AR,MA : Koeffizienten des ARMA-Modellfilters % [NFFT] : FFT-Laenge % [N_vor]: Anzahl Abtastwerte fuer eingschw. Zustand % Output-Argumente: % ARcoeff: Koeffizienten des Burg-AR-Modells (Zeilenvektor) % g : PARCOR-Koeffizienten function [ARcoeff,g] = lburg(N,q,MA,AR,NFFT,N_vor) if nargin<5, NFFT=2^10; N_vor=0; end; if nargin<6, N_vor=0; end; x = randn(1,N+N_vor); y_all= filter(MA,AR,x); y = y_all(N_vor+1:length(y_all)); % Initialisierung e = y; % Vorwaerts-Praediktorfehler b = y; % Rueckwaerts-Praediktorfehler % Burg-Algorithmus for ii = 1:q g(ii) = 2*e(2:N+1-ii)*b(1:N-ii)'/(e(2:N+1-ii)*e(2:N+1-ii)'+... b(1:N-ii)*b(1:N-ii)'); e2 = e(2:N+1-ii) - g(ii)*b(1:N-ii); b = b(1:N-ii)-conj(g(ii))*e(2:N+1-ii); e = e2; end; ARcoeff = [1 -g(1)]; % Levinson-Durbin-Algorithmus for i = 2:q ARcoeff = [ARcoeff 0]-fliplr(conj([ARcoeff 0]))*g(i); end % ##### EOF #####