2 pièce(s) jointe(s)
Filtre formeur et Estimation de l'évolution du cours d'un actif financier (LS moindres carres)
Bonjour,
Dans le cadre d'un projet de traitement numérique du signal j'ai un échantillon X décomposé comme tel : X(n)=Y(n)+a+b*n
à l'aide des moindres carrés j'estime a et b puis j'ai mon signal d'erreur Y
Il a une moyenne proche de zéro (content :)) mais une autocovariance très différente de celle d'un bruit blanc.(pas content :()
Etape suivante je détermine un filtre formeur de type AR d'ordre 2 qui représente au mieux Y (je détermine mes coefficients de l'AR avec YuleWalker)
Et j'ai mon Y estimé par le filtre formeur. Quand je plot Y et Y estimé j'ai une sorte de décalage (cf photo zoom.png)
je suis certain à 100% du code de ma fonction yulewalker(testé et re-testé avec différente valeurs connues. Elle est jointe).
Avec un échantillon X lambda je me serais dit pourquoi pas mais celui utilisé est généré à partir d'un AR 2 donc ça devrait coller parfaitement....
Il doit y avoir un soucis dans mon filtre formeur mais je m'y arrache les cheveux depuis 2 semaines.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| X=importdata('datanew.xls');
T=length(X)
D1=ones(T,1);
D2=[1:T]';
D=[D1,D2];
B=D'*D;
teta=inv(B)*D'*X
%Ploter le graphe de X et
%la droite dont les coefficients sont dans téta
%ERREUR
for i=1:T
Y(i)=X(i)-teta(1)-teta(2)*i ;
end
moy=mean(Y)
Y=Y-moy
m=sum(Y)/length(Y);
autocor=vautocov(Y)/var(Y);
% Genereration normale
a=yulewalker(autocor,2);
epsilon=randn(1,T+1);
epsilon=sqrt(a(1))*epsilon;
% Filtre formeur
Ychap(1)=-a(1)*Y(1);
N=length(a)
for n=2:T+1
Ychap(n)=0;
for p=2:N
if p<=n
Ychap(n)=Ychap(n)-a(p)*Y(n-p+1);
end
end
end
Ychap=Ychap+epsilon+moy;
hold on
plot(Y,'r')
plot(Ychap)
hold off |
Je serais ravis d'avoir un avis extérieur !
Merci !