Advertisement
Guest User

Untitled

a guest
Sep 24th, 2015
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 20.04 KB | None | 0 0
  1. print("*** LOADING SAS.nas ... ***");
  2. ################################################################################
  3. #
  4. # m2005-5's STABILITY AUGMENTATION SYSTEM
  5. #
  6. ################################################################################
  7.  
  8. var t_increment = 0.0075;
  9. var p_lo_speed = 300;
  10. var p_lo_speed_sqr = p_lo_speed * p_lo_speed;
  11. var p_vlo_speed = 160;
  12. var gear_lo_speed = 15;
  13. var gear_lo_speed_sqr = gear_lo_speed * gear_lo_speed;
  14. var roll_lo_speed = 450;
  15. var roll_lo_speed_sqr = roll_lo_speed * roll_lo_speed;
  16. var p_kp = -0.05;
  17. var e_smooth_factor = 0.1;
  18. var r_smooth_factor = 0.2;
  19. var p_max = 0.2;
  20. var p_min = -0.2;
  21. var max_e = 1;
  22. var min_e = 0.55;
  23. var maxG = 8.5 ; # mirage 2000 max everyday 9G; overload 11G and 12G will damage the aircraft
  24. var minG = -3; # -3.5
  25. var maxAoa = 20;
  26. var minAoa =-5;
  27. var maxRoll =290; # in degre/sec
  28. var last_e_tab = [1,1,1,1,1,1,1,1,1,1,1];
  29. var last_a_tab = [1,1,1];
  30. var tabG = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];
  31.  
  32. #Values around 300 kts for Gload leading the pitch
  33. var Gpos = [9.89,9.89,9.89,9.89,9.89,9.89,9.89,9.89,9.89,9.89];
  34. var Gneg = [-3.16,-3.16,-3.16,-3.16,-3.16,-3.16,-3.16,-3.16,-3.16,-3.16];
  35. var last_e_tabGpos = [-0.85,-0.85,-0.85,-0.85,-0.85,-0.85,-0.85,-0.85,-0.85,-0.85];
  36. var last_e_tabGneg = [0.15,0.15,0.15,0.15,0.15,0.15,0.15,0.15,0.15,0.15];
  37.  
  38. #Values for aoa leading the pitch
  39. var aoapos = [1,1,1,1,1,1,1,1,1,1,1,1,1,1];
  40. var aoaneg = [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1];
  41. var last_e_tabaoapos = [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1];
  42. var last_e_tabaoaneg = [1,1,1,1,1,1,1,1,1,1,1,1,1,1];
  43.  
  44. #Value for the roll
  45. var last_roll_rate = [1,1,1,1,1,1,1,1];
  46. var last_a_tab = [1,1,1,1,1,1,1,1];
  47.  
  48.  
  49.  
  50.  
  51. # Orientation and velocities
  52. var RollRate = props.globals.getNode("orientation/roll-rate-degps");
  53. var PitchRate = props.globals.getNode("orientation/pitch-rate-degps", 1);
  54. var YawRate = props.globals.getNode("orientation/yaw-rate-degps", 1);
  55. var AirSpeed = props.globals.getNode("velocities/airspeed-kt");
  56. var GroundSpeed = props.globals.getNode("velocities/groundspeed-kt");
  57. var mach = props.globals.getNode("velocities/mach");
  58. var slideDeg = props.globals.getNode("orientation/side-slip-deg");
  59.  
  60. # SAS and Autopilot Controls
  61. var SasPitchOn = props.globals.getNode("controls/SAS/pitch");
  62. var SasRollOn = props.globals.getNode("controls/SAS/roll");
  63. var SasYawOn = props.globals.getNode("controls/SAS/yaw");
  64.  
  65. var DeadZPitch = props.globals.getNode("controls/SAS/dead-zone-pitch");
  66. var DeadZRoll = props.globals.getNode("controls/SAS/dead-zone-roll");
  67.  
  68. # Autopilot Locks
  69. var ap_alt_lock = props.globals.getNode("autopilot/locks/altitude");
  70. var ap_hdg_lock = props.globals.getNode("autopilot/locks/heading");
  71.  
  72. # Inputs
  73. var RawElev = props.globals.getNode("controls/flight/elevator");
  74. var RawAileron = props.globals.getNode("controls/flight/aileron");
  75. var RawRudder = props.globals.getNode("controls/flight/rudder");
  76. var AileronTrim = props.globals.getNode("controls/flight/aileron-trim", 1);
  77. var ElevatorTrim = props.globals.getNode("controls/flight/elevator-trim", 1);
  78. var Dlc = props.globals.getNode("controls/flight/DLC", 1);
  79. var Flaps = props.globals.getNode("surface-positions/aux-flap-pos-norm", 1);
  80. var Brakes = props.globals.getNode("surface-positions/spoiler-pos-norm",1);
  81.  
  82. #var WSweep = props.globals.getNode("surface-positions/wing-pos-norm", 1);
  83.  
  84. # Outputs
  85. var SasRoll = props.globals.getNode("controls/flight/SAS-roll", 1);
  86. var SasPitch = props.globals.getNode("controls/flight/SAS-pitch", 1);
  87. var SasYaw = props.globals.getNode("controls/flight/SAS-yaw", 1);
  88. var SasGear = props.globals.getNode("controls/flight/SAS-gear", 1);
  89.  
  90. var airspeed = 0;
  91. var airspeed_sqr = 0;
  92. var last_e = 0;
  93. var last_p_var_err = 0;
  94. var p_input = 0;
  95. var last_p_bias = 0;
  96. var last_a = 0;
  97. var last_r = 0;
  98. var w_sweep = 0;
  99. # var e_trim = 0;
  100. var steering = 0;
  101. var dt_mva_vec = [0, 0, 0, 0, 0, 0, 0];
  102. var dt_Roll_vec = [0, 0, 0, 0, 0, 0, 0];
  103.  
  104. # wlevator Trim
  105. if(ElevatorTrim.getValue() != nil)
  106. {
  107. e_trim = ElevatorTrim.getValue();
  108. }
  109.  
  110. var trimUp = func()
  111. {
  112. e_trim += (airspeed < 120.0) ? t_increment : t_increment * 14400 / airspeed_sqr;
  113. if(e_trim > 1)
  114. {
  115. e_trim = 1;
  116. }
  117. ElevatorTrim.setValue(e_trim);
  118. }
  119.  
  120. var trimDown = func()
  121. {
  122. e_trim -= (airspeed < 120.0) ? t_increment : t_increment * 14400 / airspeed_sqr;
  123. if(e_trim < -1)
  124. {
  125. e_trim = -1;
  126. }
  127. ElevatorTrim.setValue(e_trim);
  128. }
  129.  
  130. # SAS initialisation
  131. var init_SAS = func()
  132. {
  133. var SAS_rudder = nil;
  134. var SAS_elevator = nil;
  135. var SAS_aileron = nil;
  136. }
  137.  
  138. # SAS double running avoidance
  139. var Update_SAS = func()
  140. {
  141. if(SAS_Loop_running == 0)
  142. {
  143. SAS_Loop_running = 1;
  144. computeSAS();
  145. }
  146. }
  147.  
  148. # Stability Augmentation System
  149. var computeSAS = func()
  150. {
  151. # Mirage 2000
  152. # I) Elevator :
  153. # 1) Few sensibility near stick neutral position <-traduce by square yaw
  154. # 2) Trim + elevator clipped -> at less than 80 % of stick :
  155. # (trim + elevator) have to be < 80%
  156. # 3) at speed > 300kts : the stick position is equals to a Gload. So the
  157. # stick drive the G.
  158. # 4) at low speed : (bellow 160 kt I suppose) the important is to
  159. # stabilize the aoa
  160. #
  161. # II) Roll
  162. # 1) Few sensibility near stick neutral position
  163. # 2) High Roll : Clipped to respect roll speed limitation
  164. # 3) Ponderation : elevator order & Gload to decrease roll speed at high
  165. # aoa and/or high Gload
  166. # 4) To the stick order is added trim order.the stabilisation is realized
  167. # in terme of angular speed roll
  168. #
  169. # III) Yaw axis
  170. # 1) limitation of yaw depend of the elevator
  171. # 2) This limitation is mesured by transveral acceleration
  172. # 3) Anti skid function : when "no yaw", and order is gived to the rudder
  173. # to keep transversal acceleratioon to 0
  174. # 4) When gears are out, yaw' order authority is increased in order to
  175. # cover crosswind landing
  176. #
  177. # IV) Slat
  178. # 1) Slats depend of the incidences
  179. # 2) start at aoa = 4 and are fully out at aoa = 10
  180. # 3) slat get in when gear are out (In emergency taht implid very low
  181. # speed landing, they can get out)
  182. # 4) open speed is : 2,6 sec from 0 to fullly open.
  183. # 5) if oil presure < 180 bars this time is 5.2 sec
  184. #
  185. # V) Gear
  186. # Special flightgear :
  187. # 1) depend of the yaw order
  188. # 2) The turn has to be very high for very low speed and have to decrease
  189. # a lot while take off acceeleration
  190.  
  191. var roll = RollRate.getValue();
  192. var roll_rad = roll * 0.017453293;
  193. airspeed = AirSpeed.getValue();
  194. airspeed_sqr = airspeed * airspeed;
  195. var raw_e = RawElev.getValue();
  196. var raw_a = RawAileron.getValue();
  197. var a_trim = AileronTrim.getValue();
  198. var alpha = getprop ("/orientation/alpha-deg");
  199. var gload = getprop ("/accelerations/pilot-g");
  200. var raw_r = RawRudder.getValue();
  201. var pitch_r = PitchRate.getValue();
  202. var myMach = mach.getValue();
  203. var myBrakes = Brakes.getValue();
  204. var refuelling = getprop ("/systems/refuel/contact");
  205. var gear = getprop ("/gear/gear/position-norm");
  206.  
  207. if(getprop("/autopilot/locks/AP-status") == "AP1")
  208. {
  209. SasPitch.setValue(raw_e);
  210. SasRoll.setValue(raw_a);
  211. SasYaw.setValue(raw_r);
  212. SasGear.setValue(raw_r);
  213.  
  214. # electrics commands are feeded by the hydraulique circuit #1
  215. }
  216. else
  217. {
  218. var oilpress = getprop("/systems/hydraulical/circuit1_press");
  219. if(oilpress < 190 )
  220. {
  221. raw_e = 1;
  222. raw_a =0;
  223. raw_r = 0;
  224. # airbrakes should here "Not work" coz not enough pressure
  225. }
  226. if(oilpress >190 and oilpress<200)
  227. {
  228. raw_e =0;
  229. # airbrakes should here "Not work" coz not enough pressure
  230. }
  231. if(oilpress >200 and oilpress<270)
  232. {
  233. last_e_tab = [last_e_tab[0],last_e_tab[0],last_e_tab[0],last_e_tab[0],last_e_tab[0],last_e_tab[0],last_e_tab[0],last_e_tab[0],last_e_tab[0],last_e_tab[0],last_e_tab[0]];
  234. # airbrakes should here "Not work" coz not enough pressure
  235. }
  236.  
  237. if(oilpress > 270)
  238. {
  239. last_e_tab = [last_e_tab[0]];
  240. # airbrakes should here "Not work" coz not enough pressure
  241. }
  242.  
  243. # Pitch Channel
  244. var pitch_rate = PitchRate.getValue();
  245. var yaw_rate = YawRate.getValue();
  246. var p_bias = 0;
  247. var smooth_e = raw_e;
  248. var dlc_trim = 0;
  249. var gain = 0;
  250.  
  251. ####################
  252.  
  253. #print("airspeed:" ~ airspeed ~ " raw_e:"~raw_e);
  254.  
  255. #Filtering neutral position
  256. raw_e = (raw_e > -0.03 and raw_e<0.03)?0:raw_e;
  257.  
  258. #Input p_input
  259. p_input = raw_e;
  260.  
  261. #Take only a third of the order if refuelling
  262. #p_input = (p_input !=0 and refuelling and abs(p_input)>0.30)? 0.30*abs(p_input)/p_input:p_input;
  263.  
  264. var Gfactor = 1;
  265. #Gpos Gneg last_e_tabGpos last_e_tabGneg
  266. if(airspeed >300){
  267. if(raw_e<0 ){
  268. #Tab G pos
  269. if(last_e<0 and gload>0){shiftTab(Gpos,gload);}
  270. Gpos[0] = averageTab(Gpos);
  271. gload = Gpos[0] ;
  272.  
  273. # Tab last_e_tabGpos
  274. if(last_e<0 and gload>0){shiftTab(last_e_tabGpos,last_e);}
  275. last_e_tabGpos[0] = averageTab(last_e_tabGpos);
  276. last_e = last_e_tabGpos[0] ;
  277.  
  278. #Calculate the G factor
  279. Gfactor = abs(last_e / gload);
  280.  
  281. }else{
  282. #print("Descent:");
  283. #Tab Gneg
  284. if(last_e>0 and gload<0){shiftTab(Gneg,gload);}
  285. Gneg[0] = averageTab(Gneg);
  286. gload = Gneg[0] ;
  287.  
  288. # Tab last_e_tabGpos
  289. if(last_e>0 and gload<0){shiftTab(last_e_tabGneg,last_e);}
  290. last_e_tabGneg[0] = averageTab(last_e_tabGneg);
  291. last_e = last_e_tabGneg[0] ;
  292.  
  293. #Calculate the G factor
  294. Gfactor = abs(last_e / gload);
  295. }
  296. }else{
  297.  
  298. #If speed < 300 kts then we square it
  299. p_input *=(p_input!=0)?p_input*abs(p_input)/p_input:1;
  300.  
  301. #aoapos aoaneg last_e_tabaoapos last_e_tabaoaneg
  302. if(raw_e<0 ){
  303. #Tab aoa pos
  304. if(last_e<0 and alpha>0){shiftTab(aoapos,alpha);}
  305. aoapos[0] = averageTab(aoapos);
  306. alpha = aoapos[0] ;
  307.  
  308. # Tab last_e_tabGpos
  309. if(last_e<0 and alpha>0){shiftTab(last_e_tabaoapos,last_e);}
  310. last_e_tabaoapos[0] = averageTab(last_e_tabaoapos);
  311. last_e = last_e_tabaoapos[0] ;
  312.  
  313. #Calculate the G factor
  314. Gfactor = abs(last_e / alpha);
  315.  
  316. }else{
  317. #print("Descent:");
  318. #Tab aoaneg
  319. if(last_e>0 and alpha<0){shiftTab(aoaneg,alpha);}
  320. aoaneg[0] = averageTab(aoaneg);
  321. alpha = aoaneg[0] ;
  322.  
  323. # Tab last_e_tabaoaneg
  324. if(last_e>0 and alpha<0){shiftTab(last_e_tabaoaneg,last_e);}
  325. last_e_tabaoaneg[0] = averageTab(last_e_tabaoaneg);
  326. last_e = last_e_tabaoaneg[0] ;
  327.  
  328. #Calculate the G factor
  329. Gfactor = abs(last_e / alpha);
  330. }
  331. }
  332. #Avoid strange thing that could lead to an oscillation
  333. Gfactor = (Gfactor<0.02)?0.02:Gfactor;
  334.  
  335.  
  336. #If airspeed > 300 Mach the stick drive the G at airspeed < 300 the stick drive the aoa
  337. if(raw_e<0 ){
  338.  
  339. #New new method :
  340. var IdealG = (airspeed >300) ? abs(p_input*maxG):abs(p_input*maxAoa);
  341. p_input = - IdealG *Gfactor;
  342.  
  343. #print("p_input:" ~ p_input ~ " gload:" ~ gload ~ " raw_e:" ~ raw_e ~" maxG:" ~ maxG ~" myMach:"~myMach ~ " IdealG:" ~raw_e *maxG ~" Gfactor:"~ Gfactor );
  344. }else{
  345.  
  346. #New new method :
  347. var IdealG =(airspeed >300) ?abs(p_input*minG):abs(p_input*minAoa);
  348. p_input = IdealG * Gfactor;
  349.  
  350. #print("p_input:" ~ p_input ~ " gload:" ~ gload ~ " raw_e:" ~ raw_e ~" minG:" ~ minG ~" myMach:"~myMach ~ " IdealG:" ~raw_e *minG ~" Gfactor:"~ Gfactor);
  351. }
  352.  
  353.  
  354. #Remove Calculation anomalies
  355. p_input = (p_input<0 and raw_e>0)?0:p_input;
  356. p_input = (p_input>0 and raw_e<0)?0:p_input;
  357. p_input = (p_input>1)?1:p_input;
  358. p_input = (p_input<-1)?-1:p_input;
  359.  
  360. #print("p_input:" ~ p_input);
  361.  
  362.  
  363. #Average : only for the latency
  364. shiftTab(last_e_tab,p_input);
  365. last_e_tab[0] = averageTab(last_e_tab);
  366. p_input =last_e_tab[0];
  367.  
  368.  
  369. #print("Moyenne p_input:" ~ p_input ~ " Futur G = p_input *gload / last_e :" ~ p_input *gload / last_e);
  370.  
  371. last_e = p_input;
  372. SasPitch.setValue(p_input);
  373. #####################
  374.  
  375. # SASpitch = p_input; # Used by adverse.nas
  376.  
  377. # Roll Channel
  378. var sas_roll = 0;
  379.  
  380. #Filtering neutral position
  381. raw_a = (raw_a > -0.03 and raw_a<0.03)?0:raw_a;
  382.  
  383. sas_roll = raw_a;
  384.  
  385. # input sas_roll an square it, while keeping its sign # Or Cube
  386. #sas_roll = (raw_a !=0)? (raw_a*raw_a)*abs(raw_a)/raw_a:0;
  387. sas_roll = raw_a*raw_a*raw_a;
  388.  
  389. #decrease sas_roll with pitch
  390. sas_roll = (sas_roll !=0) ? (abs(sas_roll)-abs(raw_e*0.60))*abs(sas_roll)/sas_roll:0;
  391.  
  392. #decrease sas_roll with airbrakes
  393. sas_roll = (sas_roll !=0) ? sas_roll * (1- (myBrakes*0.90)):0;
  394.  
  395. #decrease sas_roll with gear
  396. sas_roll = sas_roll * (1- (gear*0.50));
  397.  
  398. #Take only a third of the order if refuelling
  399. sas_roll = (sas_roll !=0 and refuelling and abs(sas_roll)>0.30)? 0.30*abs(sas_roll)/sas_roll:sas_roll;
  400.  
  401. #print("sas_roll before roll filter and after p_input filter:" ~ sas_roll);
  402.  
  403. #The goal is to add attenuation due to speed
  404. if(myMach >1.1)
  405. {
  406. sas_roll *= 1.1/ (myMach * myMach);
  407. }
  408. #######################
  409. #Roll factor Calculation
  410. #Tab last_roll_rate
  411. #print("Roll Average");
  412. if(last_a!=0 and roll !=0){shiftTab(last_roll_rate,abs(roll));}
  413. last_roll_rate[0] = averageTab(last_roll_rate);
  414. roll = last_roll_rate[0] ;
  415.  
  416.  
  417. # Tab last_a_tab
  418. #print("last_a_tab Average");
  419. if(last_a!=0 and roll !=0){shiftTab(last_a_tab,abs(last_a));}
  420. last_a_tab[0] = averageTab(last_a_tab);
  421. last_a = last_a_tab[0] ;
  422.  
  423. #Calculate the G factor
  424. var Rollfactor = abs(last_a / roll);
  425.  
  426. #Avoid strange thing that could lead to an oscillation
  427. #Rollfactor = (Rollfactor<0.02)?0.02:Rollfactor;
  428.  
  429. #New new method :
  430. var IdealRoll =sas_roll*maxRoll;
  431. #print(sas_roll);
  432.  
  433. sas_roll = IdealRoll *Rollfactor;
  434.  
  435. #print("sas_roll:" ~ sas_roll ~ " roll:" ~ roll ~" raw_a:" ~ raw_a ~" maxRoll:" ~ maxRoll ~ " IdealRoll="~ IdealRoll ~" RollFactor:"~Rollfactor);
  436.  
  437. sas_roll = (sas_roll<0 and raw_a>0)?0:sas_roll;
  438. sas_roll = (sas_roll>0 and raw_a<0)?0:sas_roll;
  439. sas_roll = (sas_roll>1)?1:sas_roll;
  440. sas_roll = (sas_roll<-1)?-1:sas_roll;
  441.  
  442.  
  443. #On fait la moyenne entre les sas_roll et les 6 autre dernier sas_roll
  444. #sas_roll = (moyenne + sas_roll)/size(last_a_tab);
  445. #last_a_tab[0] = sas_roll;
  446.  
  447. last_a = sas_roll;
  448. SasRoll.setValue(sas_roll);
  449.  
  450. #####################
  451. # Yaw Channel
  452. var smooth_r = raw_r;
  453. if(raw_r != 0)
  454. {
  455. smooth_r = last_r + ((raw_r - last_r) * r_smooth_factor);
  456. last_r = smooth_r;
  457. }
  458. SasYaw.setValue(smooth_r);
  459.  
  460. # Gear Channel
  461. # Appli Quadratic law from low speed
  462. # Actually, this is working in the good way with gear.
  463. # We should/could add an antiskid effect to prevent little slidding
  464. var gear_input = raw_r;
  465. if(airspeed > gear_lo_speed)
  466. {
  467. gear_input *= gear_lo_speed_sqr / airspeed_sqr;
  468. }
  469. SasGear.setValue(gear_input);
  470. }
  471. # To calculate the best slats position
  472. if(getprop("/controls/gear/gear-down") == 0)
  473. {
  474. var slats = 0;
  475. if(alpha >= 2)
  476. {
  477. var gload = getprop("/accelerations/pilot-g");
  478. if(gload < 9)
  479. {
  480. var slats = (alpha - 3) / 6;
  481. }
  482. }
  483. setprop("/controls/flight/flaps", slats);
  484. }
  485.  
  486. # GAZ
  487. # Should be on the engine part !
  488. # finally nope : The engine have a computer driven throttle
  489. # Could be changed here without touching yasim props
  490.  
  491. var reheatlimit =85;
  492. var reheat = (getprop("/controls/engines/engine[0]/n1")>= reheatlimit)? (getprop("/controls/engines/engine[0]/n1")-reheatlimit)/(100-reheatlimit):0;
  493. setprop("/controls/engines/engine[0]/reheat", reheat);
  494.  
  495. # @TODO : Stall warning ! should be in instruments
  496. var stallwarning = "0";
  497. if(getprop("/gear/gear[2]/wow") == 0)
  498. {
  499. # STALL ALERT !
  500. if(alpha >= 29)
  501. {
  502. stallwarning = "2";
  503. }
  504. elsif(airspeed < 100)
  505. {
  506. stallwarning = "2";
  507. }
  508. # STALL WARNING
  509. elsif(alpha >= 20)
  510. {
  511. stallwarning = "1";
  512. }
  513. elsif(airspeed < 130)
  514. {
  515. stallwarning = "1";
  516. }
  517. }
  518. setprop("/sim/alarms/stall-warning", stallwarning);
  519. SAS_Loop_running = 0;
  520. }
  521.  
  522. var averageTab = func(myTab)
  523. {
  524. var average =0;
  525. for( var i = 0; i<size(myTab) ; i+=1){
  526. average += myTab[i];
  527. #print("myTab["~ i~"]="~myTab[i]~" And size()="~size(myTab));
  528. }
  529. average *= 1/size(myTab);
  530. #print("Average : " ~average);
  531. return average;
  532. }
  533.  
  534. var shiftTab = func(myTab,mynewvalue)
  535. {
  536. var myTabElement = mynewvalue;
  537.  
  538. for( var i = 0; i<size(myTab) ; i+=1){
  539. var tempo = myTab[i];
  540. myTab[i]=myTabElement;
  541. myTabElement = tempo;
  542. #print("myTab["~ i~"]="~myTab[i]~" And size()="~size(myTab));
  543. }
  544. return myTab;
  545. }
  546.  
  547. var averageTabFirstSign = func(myTab)
  548. {
  549. var average =0;
  550. var mySign = (myTab[0])<0? -1:1;
  551. myCount =0;
  552.  
  553. for( var i = 0; i<size(myTab) ; i+=1){
  554. #If myTab[i]< 0 and myTab[0]<0 then do the average. same with >0
  555. average += myTab[i]*mySign>0?myTab[i]:0;
  556. myCount += myTab[i]*mySign>0?1:0;
  557. #print("myTab["~ i~"]="~myTab[i]~" And size()="~size(myTab));
  558. }
  559. average *= 1/myCount;
  560. #print("Average first sign: " ~average);
  561. return average;
  562. }
  563.  
  564. var averageABS = func(myTab)
  565. {
  566. var average =0;
  567. for( var i = 0; i<size(myTab) ; i+=1){
  568. average += abs(myTab[i]);
  569. #print("myTab["~ i~"]="~myTab[i]~" And size()="~size(myTab));
  570. }
  571. average *= 1/size(myTab);
  572. #print("Average : " ~average);
  573. return average;
  574. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement