Autoregresja AR(2), przykład obliczeń w języku Matlab/Octave.

#!/usr/bin/octave
% parametry AR(2)
fi = [0.75 -0.5];
%
G = 1./roots([-fi(2) -fi(1) 1]);
% czy to jest proces stacjonarny?
if (
  abs(G)<1 
  && fi(1)+fi(2) < 1 
  && fi(2)+fi(1) < 1
  && -1 < fi(2) 
  && fi(2) < 1
  )
  printf "proces stacjonarny\n"
end
% funkcje autokorelacji
ro(1)=1;
ro(2)=fi(1)/(1-fi(2));
for i =3:19
  ro(i)=fi(1)*ro(i-1)+fi(2)*ro(i-2);
end
% liczba próbek
t = [0:200];
% biały szum
a = randn(1,length(t));
% wartości procesu
z(1:2) = a(1:2);
for i = 3:length(t)
  z (i) = fi(1) * z(i-1) + fi(2)*z(i-2)+a(i);
end
sigma = sqrt(1/(1-dot(ro(2:3),fi(1:2))));
f0 = abs(atan2(imag(G(1)),real(G(1)))/(2*pi));
T  = 1/f0;
d = abs(G(1));
F = atan2( (1+d^2)*tan(2*pi*f0) , 1-d^2);
for i =1:length(ro)
  ro2(i) =              \
  sign(fi(1))           \
  * (d^(i-1) / sin (F)) \
  * (sin(2*pi*f0*(i-1) + F)) ;
end
if(ro-ro2>3*eps) exit end
% czas relaksacji
tau = (-log(d))^(-1)
f=0:0.01:0.5;
pzz=2./(1+fi(1)^2+fi(2)^2-2*fi(1)*(1-fi(2))* cos(2*pi*f)-2*fi(2)*cos(4*pi*f));
% szereg czasowy
subplot(3,1,1)
plot(t,z)
% autokorelacje
subplot(3,1,2)
bar(0:length(ro)-1,ro)
axis([-0.5 length(ro)], "xaxis")
% gęstość widmowa
subplot(3,1,3)
plot(f,pzz)
% pause
print -dsvg "ar.svg"