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.
Je serais ravis d'avoir un avis extérieur !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Merci !
Partager