pulse2a.sce 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. xdel(winsid())
  2. clear;
  3. t = linspace(-5,20,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+offset;
  50. // Lägg på lite av nästa kurva, en kopia av dena kurvan
  51. y = [y y(1:2000)];
  52. t = [t linspace(25,25*(1+2/5), 2000)];
  53. //Generera vertikala linjer
  54. xpts = [1 1];
  55. //plot(xpts*0, ypts, '-black'); // Vertikalt streck på x =
  56. ypts = [(0.1*magnitude+offset) max(y)*1.5];
  57. plot(xpts*t(x10r), ypts, '-'); // 10% rise
  58. plot(xpts*t(x10f), ypts, '-'); // 10% fall
  59. plot(xpts*t(x10r+5000), ypts, '-'); // second 10% rise
  60. ypts = [(0.9*magnitude+offset) max(y)*1.25];
  61. plot(xpts*t(x90r), ypts, '-'); // 90% rise
  62. // Generera horisontella linjer
  63. // Pulsen
  64. plot(t, y, "black");
  65. p = get("hdl");
  66. p = p.children;
  67. p.thickness = 3;
  68. // max och min horisontella
  69. hline = ones(1,length(t));
  70. plot(t,hline.*max(y), '--');
  71. plot(t,hline.*min(y), '--');
  72. plot(t,hline.*0, '-black');
  73. // 10 och 90% horizontella
  74. tshort = t(x10r-150:length(t))
  75. hline = ones(1,length(tshort));
  76. plot(tshort,hline.*y(x10r), '-');
  77. tshort = t(x10r-150:x90r)
  78. hline = ones(1,length(tshort));
  79. plot(tshort,hline.*y(x90r), '-');
  80. // titletxt = ['$y = k(e^{-\alpha t} - e^{-\beta t})$' ; strcat(['$k=', string(k), ', \alpha=', string(a), ', \beta=', string(b), '$']) ];
  81. //titletxt = '$u(t) = k(e^{-\alpha t} - e^{-\beta t})$';
  82. //title(titletxt , 'fontsize', 8);
  83. //xlabel('t (s)', 'fontsize', 7);
  84. //ylabel('U (V)', 'fontsize', 7, 'rotation', 0);
  85. a = get("current_axes");
  86. //a.axes_visible = "off";
  87. // Rita axlarna i 0
  88. //a.x_location = "origin";
  89. //a.y_location = "origin";
  90. // Bestäm viewport och ta bort inramning
  91. a.data_bounds = [min(t),0;max(t),200];
  92. a.box = "off";
  93. // Fula pilar (nästan) på axlarna
  94. //b = a.data_bounds
  95. //xstring(b(1),b(4),"↑")
  96. //set(gce(), "clip_state","off", "text_box_mode","centered", "font_size",4)
  97. //
  98. //xstring(b(2),b(3),"→")
  99. //set(gce(), "clip_state","off", "text_box_mode","centered", "font_size",4)
  100. f=get("current_figure")
  101. f.figure_size=f.figure_size*1.3 // Råkade bli lagom storlek