pulse shape.sce 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. xdel(winsid())
  2. clear;
  3. t = linspace(-2,20,2000);
  4. a = 0.4;
  5. b = 0.45;
  6. k = 1;
  7. magnitude = 100;
  8. offset = 24
  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. //Generera vertikala linjer
  51. xpts = [1 1];
  52. ypts = [-100 max(y)*2];
  53. //plot(xpts*0, ypts, '-black'); // Vertikalt streck på x =
  54. plot(xpts*t(x10r), ypts, ':');
  55. plot(xpts*t(x90r), ypts, ':');
  56. plot(xpts*t(x10f), ypts, '-.');
  57. // Generera horisontella linjer
  58. plot(t, y, "black");
  59. hline = ones(1,length(y));
  60. plot(t,hline.*y(x10r), ':');
  61. p = get("hdl");
  62. p = p.children;
  63. p.line_style = 7;
  64. plot(t,hline.*y(x90r), ':');
  65. // titletxt = ['$y = k(e^{-\alpha t} - e^{-\beta t})$' ; strcat(['$k=', string(k), ', \alpha=', string(a), ', \beta=', string(b), '$']) ];
  66. //titletxt = '$u(t) = k(e^{-\alpha t} - e^{-\beta t})$';
  67. //title(titletxt , 'fontsize', 8);
  68. //xlabel('t (s)', 'fontsize', 7);
  69. //ylabel('U (V)', 'fontsize', 7, 'rotation', 0);
  70. a = get("current_axes");
  71. //a.axes_visible = "off";
  72. // Rita axlarna i 0
  73. //a.x_location = "origin";
  74. //a.y_location = "origin";
  75. a.data_bounds = [min(t),-0.02;max(t),200];