Advertisement
aidanozo

Untitled

Nov 24th, 2024
433
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 2.09 KB | None | 0 0
  1. function [] = mcmmp_oe2(A, B, N, nr)
  2.  
  3. lambda = 1;
  4.  
  5. % Verificarea corectitudinii parametrilor de apel ai rutinei
  6. if(nargin < 4)
  7.     nr = 100;
  8. end
  9.  
  10. % Generare de date
  11. u = sign(randn(N, nr));
  12. e = randn(N, nr) * lambda^2;
  13. yi = filter (B,A, u);
  14. v = e;
  15. y = yi + v;
  16. y2 = e - y;
  17.  
  18. teta = zeros(4, nr);
  19.  
  20. % Aplicare metoda MCMMP
  21. for i=1:nr
  22.  
  23.     % Ry2
  24.     [ry2, k] = xcov(y2(:, i),'biased');
  25.     ry2 = ry2(k>=0);
  26.  
  27.     % Ru
  28.     [ru, k] = xcov(u(:, i),'biased');
  29.     ru = ru(k>=0);
  30.  
  31.     % Ryu
  32.     [ryu, k] = xcov(y(:, i), u(:,i), 'biased');
  33.     ryu = ryu(k>=1);
  34.  
  35.     % Ry2u
  36.     [ry2u, k] = xcov(y2(:, i), u(:,i), 'biased');
  37.     ry2u = ry2u(k>=0);
  38.  
  39.     % Ruy2
  40.     [ruy2, k] = xcov(u(:, i), y2(:,i), 'biased');
  41.     ruy2 = ruy2(k>=0);
  42.  
  43.     % Ryy2
  44.     [ryy2, k] = xcov(y(:, i), y2(:,i), 'biased');
  45.     ryy2 = ryy2(k>=-1);
  46.    
  47.     % Cacul matrice de covarianta a datelor (R)
  48.     R = [ry2(1) ry2(2) ry2u(1) ry2u(2);
  49.         ry2(2) ry2(1) ruy2(2) ry2u(1);
  50.         ruy2(1) ruy2(2) ru(1) ru(2);
  51.         ry2u(2) ruy2(1) ru(2) ru(1)];
  52.  
  53.     % Calcul vector de covarianta a datelor (r)
  54.     r = [ryy2(3);
  55.          ryy2(4);
  56.          ryu(1);
  57.          ryu(2)];
  58.  
  59.     % Estimare parametrii pentru realizarea curenta
  60.     t = R \ r;
  61.     teta(:, i) = t;
  62.    
  63.     % Estimare zgomot alb si dispersie
  64.     % La eroare avem matrice Toeplitz
  65.     eroare = y(:,i) - [[0; y2(1:(N-1),i)] [0; 0; y2(1:(N-2),i)] [0; u(1:(N-1),i)] [0; 0; u(1:(N-2), i)]]*t;
  66.     deviatiastandard(i, 1) = norm(eroare)/sqrt(N-size(teta,1));
  67.     dispersia(i,1) = deviatiastandard(i)^2;
  68. end
  69.  
  70. % Calcul medie parametrii estimati
  71. a1_m = mean(teta(1,:));
  72. a2_m = mean(teta(2,:));
  73. b1_m = mean(teta(3,:));
  74. b2_m = mean(teta(4,:));
  75.  
  76. % Afisare grafic
  77. figure
  78. plot(dispersia)
  79. hold on
  80. plot(zeros(nr, 1) + lambda^2);
  81. hold off
  82. title('Model OE[2, 2]');
  83. xlabel('Numarul realizarii');
  84. ylabel('Varianta');
  85. legend('zgomot estimat', 'zgomot real');
  86. text(2, 1.2, ['Parametrii adevarati a2 a3 b2 b3: ', sprintf('%9.4f',[A(2) A(3) B(2) B(3)])]);
  87. text(2, 0.8, ['Parametrii estimati a1m a2m b1m b2m:', sprintf('%9.4f',[a1_m a2_m b1_m b2_m])]);
  88.  
  89. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement