44 lines
1.4 KiB
Matlab
Executable File
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 #####
|