Files
matlab/common/lywex.m
T
jens b31f3e7435 - added
git-svn-id: http://moon:8086/svn/matlab/trunk@153 801c6759-fa7c-4059-a304-17956f83a07c
2021-03-22 20:28:22 +00:00

43 lines
1.6 KiB
Matlab
Executable File

% ##################################################################################
% ## Funktion: lywex.m; AR-(p)-Approximation eines ARMA-Modelles nach Yule-Walker
% ##################################################################################
%
% function [ARcoeff] = lywex(MA,AR,p[,NFFT])
%
% Berechnung der Koeffizienten eines AR-Modelles aus den exakten
% Autokorrelationskoeffizienten
% Input-Argumente:
% MA,AR : Parameter des ARMA-Modells
% p : Grad des zu bestimmenden AR-Modells
% [NFFT] : FFT-Laenge
% Output-Argument:
% ARcoeff : Koeffizienten des Yule-Walker-AR-Modells (Zeilenvektor)
% Sxx_ar : geschaetztes AR-Betragspektrum
% Sxx_arma : wahres LDS des ARMA-Modells
function [Sxx_ar, Sxx_arma, ARcoeff] = lywex(MA,AR,p,NFFT)
if nargin<4, NFFT = 2^10; end;
delta = [1 zeros(1,NFFT-1)];
h_arma = filter(MA,AR,delta);
H_arma = fft(h_arma);
Sxx_arma = abs(H_arma).^2; % LDS des ARMA-Modells
% Wahre AKF des ARMA-Modells:
r0_arma = h_arma*h_arma'; % rxx(0)
for ii = 1:p % rxx(1)..rxx(p)
r_arma(ii) = [zeros(1,ii) h_arma]*[h_arma zeros(1,ii)]';
end
R_arma = toeplitz([r0_arma r_arma(1:length(r_arma)-1)]);
ARcoeff = -inv(R_arma)*r_arma';
ARcoeff = [1 ARcoeff.'];
h_ar = filter(1, ARcoeff, delta);
H_ar = fft(h_ar);
if p == 0
sigmak2 = 1;
else
sigmak2 = R_arma(1,1)-r_arma*inv(R_arma)*r_arma';
end
Sxx_ar = sigmak2 * abs(H_ar).^2; %geschaetztes AR-Betragspektrum
% ##### EOF #####