Advertisement
aidanozo

Untitled

Nov 4th, 2024
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 5.07 KB | None | 0 0
  1. load('data_ASTANK2.mat');
  2. y1=Did.y(:,1);
  3. y2=Did.y(:,2);
  4. u1=Did.u(:,1);
  5. u2=Did.u(:,2);
  6.  
  7. flip_u1=flip(u1);
  8. flip_u2=flip(u2);
  9. flip_y1=flip(y1);
  10. flip_y2=flip(y2);
  11.  
  12. D1 = iddata(Did.y(:,1), [Did.u(:,1) Did.u(:,2)]);
  13. D2 = iddata(Did.y(:,2), [Did.u(:,1) Did.u(:,2)]);
  14.  
  15. y1_norm = norm(detrend(Did.y(:,1), 'constant'));
  16. y2_norm = norm(detrend(Did.y(:,2), 'constant'));
  17.  
  18. index1 = randi([1 30],20,3);
  19. index2 = randi([1 30],20,3);
  20.  
  21. index1ARMA = randi([50 90],10,2);
  22. index2ARMA = randi([50 90],10,2);
  23.  
  24. M1 = cell(20, 1);
  25. M2 = cell(20, 1);
  26.  
  27. M1ARMA = cell(20, 1);
  28. M2ARMA = cell(20, 1);
  29.  
  30. v1=cell(20,1);
  31. v2=cell(20,1);
  32.  
  33. e1=cell(10,1);
  34. e2=cell(10,1);
  35.  
  36. SNR1=zeros(20,1);
  37. SNR2=zeros(20,1);
  38.  
  39. SNR1ARMA=zeros(10,1);
  40. SNR2ARMA=zeros(10,1);
  41.  
  42. ys1=cell(20,1);
  43. ys2=cell(20,1);
  44.  
  45. ys1ARMA=cell(20,1);
  46. ys2ARMA=cell(20,1);
  47.  
  48.  
  49.  
  50.  
  51. for i = 1 : 20
  52.     disp(i)
  53.    try
  54.        M1{i} = armax(D1, [index1(i, 1) [index1(i, 2) index1(i, 3)] 0 [1 1]]);
  55.    catch
  56.        M1{i}=[]
  57.    end
  58.  
  59.    try
  60.       M2{i} = armax(D2, [index2(i, 1) [index2(i, 2) index2(i, 3)] 0 [1 1]]);
  61.    catch
  62.        M2{i}=[]
  63.    end
  64.  
  65.    max1 = max(index1(i,:));
  66.    max2 = max(index2(i,:));
  67.    ys1{i} = y1(1:max1);
  68.    ys2{i} = y2(1:max2);
  69.    
  70.    a_m1=M1{i}.a(2:end);
  71.    a_m2=M2{i}.a(2:end);
  72.  
  73.    b1_m1=M1{i}.b{1}(2:end);
  74.    b2_m1=M1{i}.b{2}(2:end);
  75.  
  76.    b1_m2=M2{i}.b{1}(2:end);
  77.    b2_m2=M2{i}.b{2}(2:end);
  78.  
  79.    if(isempty(M1{i}))
  80.        ys1{i}=[];
  81.    else
  82.         ys=ys1{i};
  83.         for j = (max1 +1) : size(y1, 1)
  84.          % v1{i}=y1-[y1_ARX{i};zeros(size(y1,1)-size(y1_ARX{i},1),1)];
  85.          %nu de la 1
  86.         % ys=b1_m1*flip_u1(1:size(b1_m1,2))+b2_m1*flip_u2(1:size(b2_m1,2))-(a_m1*flip_y1(1:size(a_m1,2)))
  87.          %yst=b1_m1*flip_u1((j-size(b1_m1,2)):(j-1))+b2_m1*flip_u2((j-size(b2_m1,2)):(j-1))-a_m1*ys((j-1):-1:(j-size(a_m1,2)))
  88.              yst=b1_m1*flip(u1((j-size(b1_m1,2)):(j-1)))+b2_m1*flip(u2((j-size(b2_m1,2)):(j-1)))-a_m1*ys((j-1):-1:(j-size(a_m1,2)));
  89.          %yst=b1_m1*u1(j-1:-1:j-length(b1_m1))+b2_m1*u2(j-1:-1:j-length(b2_m1))-a_m1*ys((j-1):-1:(j-size(a_m1,2)));
  90.              ys=[ys;yst];
  91.         end
  92.         ys1{i}=ys;
  93.     end
  94.     v1{i}=y1-ys1{i};
  95.  
  96. % figure
  97. % plot(y1);
  98. % hold on
  99. % plot (ys);
  100. %pause
  101.  
  102.  
  103.     if(isempty(M2{i}))
  104.         ys2{i}=[];
  105.     else
  106.         ys=ys2{i};
  107.         for j = (max2 +1) : size(y1, 1)
  108.             yst=b1_m2*flip(u1((j-size(b1_m2,2)):(j-1)))+b2_m2*flip(u2((j-size(b2_m2,2)):(j-1)))-a_m2*ys((j-1):-1:(j-size(a_m2,2)));
  109.             ys=[ys;yst];
  110.         end
  111.         ys2{i}=ys;
  112.     end
  113.     v2{i}=y2-ys2{i};
  114.  
  115. end
  116.  
  117.  
  118.  
  119.  
  120. for i=1:20
  121.  
  122.  
  123.     if isempty(ys1{i})
  124.         SNR1(i)=0;
  125.     else
  126.         SNR1(i)=20*log(y1_norm/norm(v1{i}));
  127.        
  128.     end
  129.     if (SNR1(i)<0 || isnan(SNR1(i)))
  130.          SNR1(i)=0;
  131.     end
  132.  
  133.     if isempty(ys2{i})
  134.         SNR2(i)=0;
  135.     else
  136.         SNR2(i)=20*log(y2_norm/norm(v2{i}));
  137.        
  138.     end
  139.     if (SNR2(i)<0 || isnan(SNR2(i)))
  140.          SNR2(i)=0;
  141.     end
  142.    
  143.  
  144.     [MSnr1,poz1ARX]=max(SNR1);
  145.     [MSnr2,poz2ARX]=max(SNR2);
  146.  
  147.     D1ARMA=iddata(v1{poz1ARX});
  148.     D2ARMA=iddata(v2{poz2ARX});
  149.  
  150.     vStat1_norm=norm(detrend(v1{poz1ARX}, 'constant'));
  151.     vStat2_norm=norm(detrend(v2{poz2ARX}, 'constant'));
  152. end
  153.  
  154.  
  155.  
  156.  
  157.  
  158. for i = 1 : 10
  159.     disp(i)
  160.    try
  161.        M1ARMA{i} = armax(D1ARMA, [index1ARMA(i, 1) index1ARMA(i, 2)]);
  162.    catch
  163.        M1ARMA{i}=[];
  164.    end
  165.  
  166.    try
  167.         M2ARMA{i} = armax(D2ARMA, [index2ARMA(i, 1) index2ARMA(i, 2)]);
  168.    catch
  169.         M2ARMA{i}=[];
  170.    end
  171.    
  172.    if isempty(M1ARMA{i})
  173.         ys1ARMA{i}=[];
  174.    else
  175.         ys1ARMA{i}=predict(M1ARMA{i}, D1ARMA);
  176.         e1{i}=v1{poz1ARX}-ys1ARMA{i}.y;
  177.    end
  178.  
  179.    if isempty(M2ARMA{i})
  180.         ys2ARMA{i}=[];
  181.    else
  182.         ys2ARMA{i}=predict(M2ARMA{i}, D2ARMA);
  183.         e2{i}=v2{poz2ARX}-ys2ARMA{i}.y;
  184.    end
  185.    
  186.    
  187. end
  188.  
  189.  
  190.  
  191.  
  192.  
  193. for i=1:10
  194.  
  195.  
  196.     if isempty(ys1ARMA{i})
  197.         SNR1ARMA(i)=0;
  198.     else
  199.         SNR1ARMA(i)=20*log(vStat1_norm/norm(e1{i}));
  200.        
  201.     end
  202.     if (SNR1ARMA(i)<0 || isnan(SNR1ARMA(i)))
  203.          SNR1ARMA(i)=0;
  204.     end
  205.  
  206.     if isempty(ys2ARMA{i})
  207.         SNR2ARMA(i)=0;
  208.     else
  209.         SNR2ARMA(i)=20*log(vStat2_norm/norm(e2{i}));
  210.        
  211.     end
  212.     if ( isnan(SNR2ARMA(i)))
  213.          SNR2ARMA(i)=0;
  214.     end
  215.    
  216.    
  217.  
  218.     [MSnr1ARMA,poz1ARMA]=max(SNR1ARMA);
  219.     [MSnr2ARMA,poz2ARMA]=max(SNR2ARMA);
  220.  
  221.     Yfinal1=ys1{poz1ARX}+ys1ARMA{poz1ARMA}.y;
  222.     Yfinal2=ys2{poz2ARX}+ys2ARMA{poz2ARMA}.y;
  223. end
  224.  
  225.  
  226.  
  227.  
  228. plot(ys1{poz1ARX})
  229. hold on
  230. plot(y1)
  231. legend('ARX1','y1');
  232. title('Y1ARX vs y1');
  233. text(500,10.2,"SNR="+num2str(SNR1(poz1ARX)))
  234. figure
  235.  
  236. plot(ys2{poz2ARX})
  237. hold on
  238. plot(y2)
  239. title('Y2ARX  vs y2');
  240. legend('ARX2','y2');
  241. text(500,10,"SNR="+num2str(SNR2(poz2ARX)))
  242. figure
  243.  
  244.  
  245. plot(Yfinal1)
  246. hold on
  247. plot(y1)
  248. legend('Yfinal1','y1');
  249. title('Y1ARX+V1ARMA vs y1');
  250. figure
  251.  
  252.  
  253. plot(Yfinal2)
  254. hold on
  255. plot(y2)
  256. legend('Yfinal2','y2');
  257. title('Y2ARX+V2ARMA vs y2');
  258. figure
  259.  
  260.  
  261. plot(e1{poz1ARMA})
  262. title('eps1');
  263. text(500,-0.2,"λe1^2="+num2str(norm(e1{poz1ARMA})))
  264. figure
  265.  
  266. plot(e2{poz2ARMA})
  267. title('eps2');
  268. text(500,-0.2,"λe2^2="+num2str(norm(e2{poz2ARMA})))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement