Moyenne Mobile

Un accéléromètre permet de déterminer les mouvements d'un objet. Lorsque l'on effectue une série de mesures issues de ce capteur, on récupère sur le micro-contrôleur des valeurs qui varient rapidement, ou avec des imperfections, des variations parasites appelées bruit.

Il est ainsi difficile d'interpréter les informations brutes issues de ce capteur :

signal parasité

Il convient alors d'appliquer un filtre à ce signal afin de le lisser et supprimer les variations rapides, comme représenté ci-dessous :

signal lissé

Un filtre simple à mettre en place est la moyenne glissante ou mobile. Une valeur filtrée est obtenue en faisant la moyenne des N dernières mesures. Avec une moyenne glissante, on ne calcule pas la moyenne sur l'ensemble des valeurs de la série, mais sur un sous-ensemble de N éléments consécutifs. Ainsi ce sous-ensemble, parfois appelé fenêtre, utilisé pour calculer chaque moyenne glisse sur l'ensemble des données.

Imaginons une fenêtre de \(4\) éléments :

moyenne glissante

Il est nécessaire d'avoir \(4\) éléments pour calculer une moyenne : cette série de \(6\) valeurs nous permet de calculer uniquement \(3\) moyennes.

Écrire la fonction moyenne_mobile. Cette fonction prend en paramètres un tableau de nombres serie contenant les mesures et un entier N qui vaut la taille de la fenêtre. Cette fonction renvoie la liste des moyennes glissantes calculées sur serie avec une fenêtre de taille N.

On assure que le nombre d'éléments de la série est supérieur à N.

Contraintes

On n'utilisera ni sum, ni mean ni les tranches (comme par exemple liste[i:i+7])

Exemples
>>> moyenne_mobile([1, 2, 3, 4, 5, 6], 4)
[2.5, 3.5, 4.5]

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3_8èufvy n7aêS1me(P2C4:jtwi][h)6o;bcdUg/0lqp.r-,=+Nk95Ré050M0s0A0n0C0R0b0k0L0R0n0b0b0Y010A0C0T010406050b0g0r0r0n0V0j040p0I0R0g0}0I0l0k020n0r0T0J0k0(0s170V0S0g0s0b050P1416181a120T041y1F051I0P1I1K1F120M0C0i0=0@0_0{0F0C0O0F0R1Y0F0A10050-0K0R0s1T0^0`011X1Z1#1Z0A1+1-1)0A0K0I0M1a1*0V1G0A0F0=1d0b0T0n0l0{0v011/1V010h0/0s0l1l0s1)2a2c2h1;2k1-2n0r2p040a0k0u0V0I0T0I0b0C1g1i0+280V0V0s0L2K1y2r0l1G0P262W0A2423250M2t0{1#0l2m2H1)1Q1S0?1:2*0C2,0l201R1)0T2P1G2U2W31132b1i2=2i2`0V170R100k0q2T3511342s371;393b3d0v3g2c3i2U2)013n0n3c040k0c3r2V123u3l0{3x3z0k0x3D3t353v3J3d0%3N3F3P3H3w0I3a3y3d0H3U3j361U3m3Z3o3A0m3(3G3+3I3-3#3A0e3;3W3?3Y3!3K0$3|3k3~3R040q0Q433*2?3 3.0q3f1z3h3V444c460q3q4h3s4j4b383^3z0q3C4p3E3)3Q4u100q3M4y3O4k4t404D3T4G4r4B4K473%4N4A3X4m3:4G1H2 1y2:2Z0M2%3v0L202z0*1R1G2~0s303h3N054+0+4?4I1;0#100+0h4^3=4c0B3d533}4l0h100r0I0j2m2,0d5d0K2l584}0{0 040t5m4s3m100b0s0V0C0s5s3v5p0X3N0k4U45100!5B3X5p0G0y3U0k5R5G5438100l0K2P5i5e5g1w5F5H4c0I100Y5(5U3m0K102w5L3~5p5r4Y5/3I5v5x5z5@4c5N5.592i5+040W645n3w5J6a5t0{670Z6e3v0r0C4D5Q5S5)5V042P140R0-0A1x4G5T651;675-6z6q1;5p0E612i6l10496F5|014 040h3Z6j4V100d6W3~0I56042^6!4l5;6s2c0O5A5{6B5o105`336Q0l5W5Y0s5!5f0l2,6y6_6=015N0D6o5R6G5}040b0I166:316A6b6D6*6L6m046O31065S7j6f6R106U0V7m5u6(7A6g6%6)6P755X100V6.7h4@6Q5_6K7B5K6;6b5N5P4N7t7t7b6c7d7f2y7D017l7H6b6{7%7g7*6h7*7/5w5y7N3s7#6I7R7c0C7 7610787Y6p6`7K1w0g6v0n6x827~7U7v6M7p8f847=5,7@5v7(7{2V7u3v670P8p047T7r7!886(0l1Q0L6~7e0V0-0l0A8n046E7i7#8j7q4i8C7I102^8G6~2m2!2c8N7-7v7,8R8D8A8V878X8E8!6 5$8O8Q3h8u3X8j4g8B8;6b6S7y8y8Z0C8H7=7F0l7@6,7L0l6/8l5q827/5X5Z5d70728267698h6k7o907O757W797Z7#7^8r8`8y7e7;8*8v106i9K6X7d5 8s4|7v8g747.8Y8F988#8M9f8)9W9U8m9O6#109t8-8=7_609u5M106J9@5I8?9!0d8J8L9(9y7V9+917Z8}9|6t8b6w73a39*049`9)3Q9Y8@9o8_9{62a58|7#8,ar8D9I7)9,5*108xay6r8/4qa77a8D978H9 3Za18O0Z8{3sa84c8 9B8W9X9}aK8$9%aOaQ8t8S9waV927v7/aJ6~am719SaS669Ma%3Aa)6n86aH756S2P0A0g0V9caC7Baa8c8e4T0P4`4=4Zbf0P4$1y0A4(bk2#2X1 212Z0n1,bh4$1E9T3v2P0r0d0h0n0#6~0F0c101q1s1u1w0k7X331L3i1F1q0L3y0L8b5x0k0@0kaw1.2Gb40=0F0nbM0k2`0g0i0s0R1-0k0h2m0o2!b(5x2y0A0k0M000I0K0A2m0C0Vb!1.0V0)6u6w0X0k170C0;1wc10T0s0g0k0s0h2kbV8H0=18c21r2c2M0+0;bV0RbX0:0k1u0Cb$1hc12mb_0.c12^1f2l0b0U1H3i2:3v1?1!1$1(by3X2v2m2o102B0p0L5y0Tc10u0j261h4^4;9T324@bec*3~6S51826%5Gao385b04a;5h5j5lda6H6@9k5~7`9i5Eb77caE2V7}105O9B9D6|9n5#a=adaRas8odq3w6,5?di6?9jdL7$9=9Sdu040G8O9/au8=dsa{6Q7?dHaUa~a@b88abadDa(d#dG9:a4ag828T7*946VdH7/6ZdH6$9Y9d7K7M9i6^aeaj049ma:dB9qdO773U7sa,3vd{7zd}ak9!9ae2d}9ee5efdkdO9l6}8^dC9idwd)aWa-8q9Jd=8+d;dX6bd_eEej3Xel96eq8Ee36-9gdR7Pewai9Pa/do969Z99dOd$e$9|dZdSeDa6aGa aXb%9Gen7:axeJ9L049Nf09PdQ9iahe8e%9i85e@eFe9b9acf7dlaYeZ9zaqdEd:8P9H9Fe0aA8ydZ06eie_7vb10,b4b6f4a9d,fhbcd2bg2Wbw1J040N1i3y0O3Z2J0F2y0k0T1eclct980n8Hch2~ce8$0)cr363Z2P2R0C1hchcmcbb$0g1R8(bOd91O058b3i1#041hcxcGbY0k0g2,fYbA0C0f2Pb_0Ickb!0ncied0sch1yg612g6b)ca1-0;debN14f~8M1wchg8140T2~0CfXb#0i3ycpgygofZ0g0;2c0L5za=c2cq0A0I0-0Rf*f}0;g80j0k0n0z0I1f1.gOgQb*b#gU0;cd8HgFcX0Pgu1yg4bx0w0,g:0RfT5y26fX2P2G5wf|gyb(5y0lgYcoczgn5T2!1h0O042~0I0O7L1B2Kc20j2x0CbM2Tht9g04h2g2bi0,0.0:04.

L'algorithme est ici le suivant :

  • on calcule une première fois la moyenne,
  • pour les moyennes suivantes, on supprime la valeur la plus ancienne du total, puis on y ajoute la valeur la plus récente.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3_8èufvy n7aêS1me(P2C4:jtwi][h)6o;bcdUg/0lqp.r-,=+Nk95Ré050M0s0A0n0C0R0b0k0L0R0n0b0b0Y010A0C0T010406050b0g0r0r0n0V0j040p0I0R0g0}0I0l0k020n0r0T0J0k0(0s170V0S0g0s0b050P1416181a120T041y1F051I0P1I1K1F120M0C0i0=0@0_0{0F0C0O0F0R1Y0F0A10050-0K0R0s1T0^0`011X1Z1#1Z0A1+1-1)0A0K0I0M1a1*0V1G0A0F0=1d0b0T0n0l0{0v011/1V010h0/0s0l1l0s1)2a2c2h1;2k1-2n0r2p040a0k0u0V0I0T0I0b0C1g1i0+280V0V0s0L2K1y2r0l1G0P262W0A2423250M2t0{1#0l2m2H1)1Q1S0?1:2*0C2,0l201R1)0T2P1G2U2W31132b1i2=2i2`0V170R100k0q2T3511342s371;393b3d0v3g2c3i2U2)013n0n3c040k0c3r2V123u3l0{3x3z0k0x3D3t353v3J3d0%3N3F3P3H3w0I3a3y3d0H3U3j361U3m3Z3o3A0m3(3G3+3I3-3#3A0e3;3W3?3Y3!3K0$3|3k3~3R040q0Q433*2?3 3.0q3f1z3h3V444c460q3q4h3s4j4b383^3z0q3C4p3E3)3Q4u100q3M4y3O4k4t404D3T4G4r4B4K473%4N4A3X4m3:4G1H2 1y2:2Z0M2%3v0L202z0*1R1G2~0s303h3N054+0+4?4I1;0#100+0h4^3=4c0B3d533}4l0h100r0I0j2m2,0d5d0K2l584}0{0 040t5m4s3m100b0s0V0C0s5s3v5p0X3N0k4U45100!5B3X5p0G0y3U0k5R5G5438100l0K2P5i5e5g1w5F5H4c0I100Y5(5U3m0K102w5L3~5p5r4Y5/3I5v5x5z5@4c5N5.592i5+040W645n3w5J6a5t0{670Z6e3v0r0C4D5Q5S5)5V042P140R0-0A1x4G5T651;675-6z6q1;5p0E612i6l10496F5|014 040h3Z6j4V100d6W3~0I56042^6!4l5;6s2c0O5A5{6B5o105`336Q0l5W5Y0s5!5f0l2,6y6_6=015N0D6o5R6G5}040b0I166:316A6b6D6*6L6m046O31065S7j6f6R106U0V7m5u6(7A6g6%6)6P755X100V6.7h4@6Q5_6K7B5K7H6b5N5P4N7t7t7b6c7d7f2y7D017l7U7v6{7%7g7*6h7*7/5w5y7N3s7#6I7R7c0C7 7610787Y6p6`7K1w0g6v0n6x827~6;6b6M7p8f847=5,7@5v7(7{2V7u3v670P8p047T7r7!886(0l1Q0L6~7e0V0-0l0A8n046E7i7#8j7q4i8C7I102^8G6~2m2!2c8N7-8v8o8*6X8z798u8.8Z0C8H6 5$8O8Q3h8;3~8j4g8B87756S7y8y8?8H7=7F0l7@6,7L0l6/8l5q827/5X5Z5d70728267698h7v909i5O8:8W6b7^8r8{8y7e7;8-6#106i9I4l5~7`9i6J9u3Q8Y8F8@8#8M9f8)747V8m9M66109t8R8D7_609S5M109R9#7.9U8!0d8J8L9!7O755p85927Z8~9N6s8a8c8e9:5^9=9k9_9W8_718s4|7va19E9(7B9G7)ao6g108xas7$8A8Va4a56r988I3Z9}8O0Z8|3saB1;9w86a47#7/aD0d8$9ZaHaJ8t8S7o91azaP8DaS9o8`aw6haX3AaZ6naOaL0{6S2P0A0g0V9caw7/6t8b6w734i1y4`4=4Zb70P4$1y0A4(bc2#2X1 212Z0n1,b94$1Eak3v2P0r0d0h0n0#6~0F0c101q1s1u1w0k7X331L3i1F1q0L3y0L8b5x0k0@0kaq1.2Ga{0=0F0nbE0k2`0g0i0s0R1-0k0h2m0o2!bW5x2y0A0k0M000I0K0A2m0C0VbS1.0V0)6u6w0X0k170C0;1wb_0T0s0g0k0s0h2kbN8H0=18b`1r2c2M0+0;bN0RbP0:0k1u0CbU1hb_2mb.0.b_2^1f2l0b0U1HbK040N1i3y0O3Z2J0F2y0k0T1ecdcl8@0n8Hc92~c68$0)cj363Z2P2R0C1hc9cec3bU0g1R8(bG5GbJ128b3i1#041hcpcybQ0k0g2,c#bs0C0f2Pb.0IccbS0nca5#aic91yd912d9bXc21-0;a*ai0;14d18M1wc9db140T2~0Cc!bT0i3ychdBdrc$0g0;2c0L5zaib`ci0A0I0-0Rc-d00;db0j0k0n0z0I1f1.dSdUbYbTdY0;c58HdJcP0Pdx1yd7bp0w0,d@0RcW5y26c!2P2G5wc dBbW5y0ld$cgcrdq5T2!1h0O042~0I0O7L1B2Kb`0j2x0CbE2Tex9g04e61O4#0,0.0:04.