pulse1.sce 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. xdel(winsid())
  2. clear;
  3. t = linspace(-5,25,5000);
  4. a = 0.4;
  5. b = 0.45;
  6. k = 1;
  7. magnitude = 100;
  8. offset = 20
  9. // Generera självaste pulsformen
  10. y = k*(exp(-a*t) - exp(-b*t) );
  11. // Fyll på med lite platt mark före t=0
  12. y(y<0) = 0;
  13. // Normalisera till 1 och multiplicera med magnituden
  14. y = y/max(y)*magnitude;
  15. // Hitta index för första passagen av 10%
  16. x10r = 0;
  17. for i = [1:length(y)]
  18. if(y(i) > 0.1*magnitude)
  19. if((y(i)-0.1*magnitude) < (0.1*magnitude-y(x10r)))
  20. x10r = i;
  21. end;
  22. break;
  23. end;
  24. x10r = i;
  25. end
  26. // Hitta index för första passagen av 90%
  27. x90r = 0;
  28. for i = [1:length(y)]
  29. if(y(i) > 0.9*magnitude)
  30. if((y(i)-0.9*magnitude) < (0.9*magnitude-y(x90r)))
  31. x90r = i;
  32. end;
  33. break;
  34. end;
  35. x90r = i;
  36. end
  37. // Hitta index för första passagen av 10%
  38. x10f = 0;
  39. for i = [length(y):-1:1]
  40. if(y(i) > 0.1*magnitude)
  41. if((y(i)-0.1*magnitude) < (0.1*magnitude-y(x10f)))
  42. x10f = i;
  43. end;
  44. break;
  45. end;
  46. x10f = i;
  47. end
  48. // Lägg på ett offset
  49. y = y.*-1;
  50. y(1:350) = offset;
  51. y(length(y)-500:length(y)) = offset;
  52. // Lägg på lite av nästa kurva, en kopia av dena kurvan
  53. y = [y y(1:2000)];
  54. t = [t linspace(25,25*(1+2/5), 2000)];
  55. //Generera vertikala linjer
  56. xpts = [1 1];
  57. //plot(xpts*0, ypts, '-black'); // Vertikalt streck på x =
  58. ypts = [(-0.1*magnitude) min(y)*1.5];
  59. plot(xpts*t(x10r),ypts, '-'); // Rise 10%
  60. plot(xpts*t(x10r+5000),ypts, '-'); // Second rise 10%
  61. plot(xpts*t(x10f), ypts, '-'); // Fall 10%
  62. ypts = [(-0.9*magnitude) min(y)*1.25];
  63. plot(xpts*t(x90r), ypts, '-'); // Rise 90%
  64. ypts = [offset offset*4];
  65. plot(xpts*t(350), ypts, '-'); // Supply off
  66. plot(xpts*t(4500), ypts, '-'); // Supply on
  67. ypts = [0 offset*2.5];
  68. plot(xpts*0, ypts, '-'); // Pulse start (zero)
  69. // Generera horisontella linjer
  70. // Pulsen
  71. plot(t, y, "black");
  72. p = get("hdl");
  73. p = p.children;
  74. p.thickness = 3;
  75. // max och min horisontella
  76. hline = ones(1,length(t));
  77. plot(t,hline.*max(y), '--');
  78. plot(t,hline.*min(y), '--');
  79. plot(t,hline.*0, '-black');
  80. // 10 och 90% horizontella
  81. tshort = t(x10r-150:length(t))
  82. hline = ones(1,length(tshort));
  83. plot(tshort,hline.*y(x10r), '-');
  84. tshort = t(x10r-150:x90r)
  85. hline = ones(1,length(tshort));
  86. plot(tshort,hline.*y(x90r), '-');
  87. // titletxt = ['$y = k(e^{-\alpha t} - e^{-\beta t})$' ; strcat(['$k=', string(k), ', \alpha=', string(a), ', \beta=', string(b), '$']) ];
  88. //titletxt = '$u(t) = k(e^{-\alpha t} - e^{-\beta t})$';
  89. //title(titletxt , 'fontsize', 8);
  90. //xlabel('t (s)', 'fontsize', 7);
  91. //ylabel('U (V)', 'fontsize', 7, 'rotation', 0);
  92. a = get("current_axes");
  93. //a.axes_visible = "off";
  94. a.axes_visible(1) = "off"; // Turn off X-axxis
  95. // Rita axlarna i 0
  96. //a.x_location = "origin";
  97. //a.y_location = "origin";
  98. // Bestäm viewport och ta bort inramning
  99. a.data_bounds = [min(t),-magnitude*1.6;max(t),magnitude];
  100. a.box = "off";
  101. // Fula pilar (nästan) på axlarna
  102. //b = a.data_bounds
  103. //xstring(b(1),b(4),"↑")
  104. //set(gce(), "clip_state","off", "text_box_mode","centered", "font_size",4)
  105. //
  106. //xstring(b(2),b(3),"→")
  107. //set(gce(), "clip_state","off", "text_box_mode","centered", "font_size",4)
  108. f=get("current_figure")
  109. f.figure_size=f.figure_size*1.3 // Råkade bli lagom storlek