Files
matlab/common/buch/lburg.m
T
2022-06-30 13:32:40 +02:00

44 lines
1.4 KiB
Matlab
Executable File

% ##################################################################################
% ## 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 #####