LeprĂ©fixe n'occupe que le nombre d'octets rendus nĂ©cessaires par sa longueur. La liste des nouveaux rĂ©seaux annoncĂ©s par un message UPDATE concerne l'initiateur du message dont le numĂ©ro de SA est dans l'en-tĂȘte. Path attributes : ces attributs sont optionnels, obligatoires, transitifs ou locaux. Les attributs obligatoires sont la liste des AS traversĂ©s, l'origine de
Nous avons attaquĂ© le problĂšme du dĂ©codage des images transmises par protocole LRPT de Meteor-M2. Tout comme lâutilisateur dâun browser web qui dĂ©sire afficher une image transmise par HTML avec, pour seul outil, une sonde dâoscilloscope branchĂ©e sur un cĂąble Ethernet, nous devons remonter petit Ă petit les couches OSI pour passer de la couche matĂ©rielle Ă la couche applicative. LâĂ©tude prĂ©cĂ©dente nous avait permis de retrouver, Ă partir des mesures de phases, la constellation QPSK et des bits dĂ©convoluĂ©s par algorithme de Viterbi. Nous avions Ă©chouĂ© Ă trouver le mot de synchronisation des trames dans cette sĂ©quence de bits. Poursuivons donc lâexploration pour aller jusquâau dĂ©codage des images JPEG, dont on affichera le contenu pour avoir une vue de lâespace. 1. Rotation de la constellation Fig. 1 Constellation QPSK chaque Ă©tat possible de phase encode 2 bits. Lâassignation de chaque symbole vers les paires de bits sera lâobjet dâune partie du travail de dĂ©codage. Cette figure est issue de [1, Fig. Lâabsence de corrĂ©lation observĂ©e Ă lâissue de lâĂ©tude prĂ©cĂ©dente indique que nous ne comprenons pas comment les bits sont encodĂ©s dans le message acquis, sous rĂ©serve que le mot de synchronisation encodĂ© par convolution soit correct, hypothĂšse que nous ferons compte tenu des informations fournies sur [2]. Lorsque nous avions Ă©tudiĂ© la modulation en phase binaire BPSK â Binary Phase Shift Keying, nous avions vu que deux cas pouvaient se produire [3][4] soit le signal acquis Ă©tait en phase avec lâoscillateur local, et les bits issus de la comparaison de la phase entre le signal reçu et la reproduction locale de la porteuse boucle de Costas Ă©taient ceux attendus, soit le signal Ă©tait en opposition de phase et les bits Ă©taient inversĂ©s par rapport Ă la valeur attendue. Dans les deux cas, la corrĂ©lation avec le mot de synchronisation accumule de lâĂ©nergie le long de la sĂ©quence de bits et se traduit, en prenant la valeur absolue, par un pic de corrĂ©lation, que nous ayons la bonne sĂ©quence dans la trame acquise ou son opposĂ©. Ce cas simple se complique dans le cas de QPSK Quadrature Phase Shift Keying [5], dans lequel la phase prend quatre Ă©tats possibles qui encodent chacun une paire de bits figure 1. Lâassignation entre la valeur de la phase et la paire de bits correspondante nâest pas Ă©vidente, mais surtout toute erreur dans lâassignation symbole-paire de bits se traduit par une sĂ©quence erronĂ©e, qui ne corrĂšle pas avec le mot recherchĂ©. Ă titre dâexemple, si nous attribuons 0° Ă la paire de bits 10 et 90° Ă 11 code de Gray, dans lequel seul 1 bit change entre deux valeurs adjacentes de la phase alors une sĂ©quence 0-90° se traduit par 1011, alors que lâassignation 0° Ă 11 et 90° Ă 01 interprĂšte la mĂȘme sĂ©quence de phases par 1101 les deux messages issus de la mĂȘme sĂ©quence de phases mesurĂ©es sont complĂštement diffĂ©rents et nâont aucune chance dâaccumuler lâĂ©nergie nĂ©cessaire au pic de corrĂ©lation, lors de la comparaison avec le motif de synchronisation de rĂ©fĂ©rence. On notera, en comparant la figure 1 Ă la derniĂšre figure de la premiĂšre partie de cet article, que nous avions placĂ© la paire de bits 00 sur la mauvaise valeur de phase voir figure 7 de la section 5 de lâarticle prĂ©cĂ©dent, pour lâassignation entre chaque symbole et chaque paire de bits dans le Constellation Soft Decoder â -1+1j, 1+1j, 1-1j], [0, 1, 3, 2], 4, 1.base, et lâanalyse que nous proposons ici en figure 2. Par ailleurs, le code de Gray peut Ă©voluer dans le sens horaire ou trigonomĂ©trique, induisant encore un risque dâerreur. Il ne semble pas y avoir de façon dâidentifier lâassignation phase-paire de bits autre que la force brute, dans laquelle toutes les combinaisons de codes possibles sont testĂ©es, tel que nous lâenseigne le contenu de de dans meteor_decoder 1111110010100010101101100011110110110000000011011001011110010100 0101011011111011110100111001010011011010101001001100000111000010 0000001101011101010010011100001001001111111100100110100001101011 1010100100000100001011000110101100100101010110110011111000111101 1111110001010001011110010011111001110000000011100110101101101000 0101011000001000000111001001011100011010101001110011110100111110 0000001110101110100001101100000110001111111100011001010010010111 1010100111110111111000110110100011100101010110001100001011000001 Ceci donne toutes les combinaisons possibles de paires de bits dans le mot encodĂ© par convolution, et la corrĂ©lation du message acquis se fait avec toutes les dĂ©clinaisons de ce code. Fig. 2 Exemple de signaux synthĂ©tiques permettant dâanalyser la configuration du Constellation Soft Decoder par calcdist[-1-1j, -1+1j, 1+1j, 1-1j], [0, 1, 3, 2], 4, 1.base. Nous constatons que lâassignation des symboles aux paires de bits ne correspond pas Ă la norme figure 1. Cependant, nous avons encore un problĂšme ces inversions de bits se font facilement sur des valeurs binaires du mot de rĂ©fĂ©rence en inversant 1 et 0, mais que faire avec les soft bits qui encodent chaque phase reçue dans le message acquis avec une valeur continue codĂ©e sur 8 bits ? Sommes-nous obligĂ©s de dĂ©cider maintenant de la valeur attribuĂ©e Ă chaque phase softâ hard bits, ou pouvons-nous manipuler les valeurs brutes ? Il nous faut interprĂ©ter les Ă©changes de bits comme des opĂ©rations de rotation ou de symĂ©trie de la constellation figure 3. Nous constatons quâĂ©changer des bits correspond Ă des opĂ©rations entre partie rĂ©elle et partie imaginaire, soit de rotation, soit de symĂ©trie le long dâun des axes du plan complexe. Ainsi, en manipulant la partie rĂ©elle et imaginaire des donnĂ©es acquises, nous pouvons atteindre le mĂȘme rĂ©sultat que lâĂ©change des bits, mais en conservant les valeurs continues des soft bits et en repoussant lâattribution de chaque bit 0 ou 1 Ă chaque valeur de phase au dĂ©codage par lâalgorithme de Viterbi. Fig. 3 Rotations et symĂ©tries de la constellation, et le rĂ©sultat correspondant sur les axes rĂ©el et imaginaire I et Q des donnĂ©es brutes acquises. Lâidentification de la correspondance entre les 4 Ă©tats QPSK dans le diagramme de constellation I en abscisse, Q en ordonnĂ©e et les paires de bits correspondantes nĂ©cessite donc une attaque brute, dans laquelle tous les cas possibles sont testĂ©s. La corrĂ©lation des phases des signaux acquis avec les diverses permutations possibles du code dâen-tĂȘte de trame encodĂ© par convolution est illustrĂ©e en figure 4. Une seule condition dâattribution des symboles aux paires de bits fournit une sĂ©quence pĂ©riodique de pics de corrĂ©lation figure 4, bas il sâagit de la bonne correspondance, que nous exploiterons pour la suite du dĂ©codage. Fig. 4 CorrĂ©lation pour les 4 cas possibles de rotation de la constellation QPSK avec le code connu de dĂ©but de trame. Nous constatons que seul le quatriĂšme cas â en bas â fournit des pics pĂ©riodiques de corrĂ©lation reprĂ©sentatifs du dĂ©but de trame. Câest donc cette attribution des 4 symboles de QPSK aux paires de bits correspondants qui est correcte. Cette permutation sera dĂ©sormais appliquĂ©e Ă tous les couples I/Q du message acquis, car nous savons que nous retrouverons alors la sĂ©quence de bits Ă©mise par le satellite, lors du dĂ©codage par algorithme de Viterbi appliquĂ© aux soft bits rĂ©sultants. Des bits aux phrases mise en Ćuvre du dĂ©codage par algorithme de Viterbi Nous avons maintenant une sĂ©quence de phases comprises dans lâensemble [0;Ï/2;Ï;3Ï/2] convenablement organisĂ©e pour devenir une sĂ©quence de bits dans laquelle nous retrouvons le mot de synchronisation, et nous nâavons quâune unique attribution des divers symboles {00;01;11;10} Ă chaque phase qui fournit une solution prĂ©sentant cette corrĂ©lation. Il nous reste Ă dĂ©coder pour retirer lâencodage par convolution, puis appliquer aux bits rĂ©sultants qui Ă©taient donc les bits encodĂ©s par le satellite avant convolution une sĂ©quence de XOR OU exclusif avec un polynĂŽme garantissant de rendre la sĂ©quence aussi alĂ©atoire que possible, pour Ă©viter tout risque de rĂ©pĂ©tition trop long du mĂȘme Ă©tat de bit. Nous avons mentionnĂ© la disponibilitĂ© de libfec, implĂ©mentant efficacement le dĂ©codage des signaux encodĂ©s par code de convolution. Nous Ă©tendons ici lâexemple simple au cas pratique de la trame complĂšte. Notre premiĂšre idĂ©e a consistĂ© Ă dĂ©coder dâun coup lâensemble du fichier acquis. De cette façon, nous cachons le problĂšme de lâinitialisation et de la fin du dĂ©codage du code de convolution par lâalgorithme de Viterbi. Cela fonctionne, puisque nous vĂ©rifions aprĂšs dĂ©codage que, tous les 1024 octets, nous retrouvons le code de synchronisation 0x1ACFFC1D. Nous avons rencontrĂ© un problĂšme dâerreur dâaccĂšs Ă un segment mĂ©moire segmentation fault, en allouant le tableau permettant de charger lâensemble du fichier. En effet, le fichier contenant les octets en soft bits fait 11,17 MB, donc nous avions allouĂ© un tableau statique, comme le ferait tout bon dĂ©veloppeur sur systĂšme embarquĂ© qui nâa pas accĂšs Ă lâallocation dynamique de mĂ©moire malloc, gourmande en ressources. Cependant, ce faisant nous plaçons le tableau sur la pile, et GNU/Linux impose par dĂ©faut une pile de 8192 kB, tel que nous le dit ulimit -s 8192. PlutĂŽt quâimposer une limite de taille de pile plus importante, nous nous autorisons sur notre systĂšme dâexploitation une allocation dynamique de mĂ©moire, pour placer le tableau sur le tas et non sur la pile, libĂ©rant ainsi la contrainte de place mĂ©moire occupĂ©e. 01 include // from libfec/ 02 include // gcc -o demo_libfec -I./libfec ./libfec/ 03 include 04 include // read 05 include 06 define MAXBYTES 11170164/16 // file size /8 bytes-> bits /2 Viterbi 07 08 define VITPOLYA 0x4F 09 define VITPOLYB 0x6D 10 int viterbiPolynomial[2] = {VITPOLYA, VITPOLYB}; 11 12 int mainint argc,char *argv[]{ 13 int i,framebits,fd; 14 unsigned char data[MAXBYTES],*symbols; 15 void *vp; 16 17 symbols=unsigned char*malloc8*2*MAXBYTES+6; // *8 for bytes->bits & *2 Viterbi 18 // rootrugged~ ulimit -a 19 // stack size kbytes, -s 8192 20 // -> static allocation stack of max 8 MB, after requires malloc on the heap 21 fd=open"./ readfd,symbols,MAXBYTES*16; closefd; 22 23 for i=1;i hard bits 05 [dv,e]=viterbi[1 1 1 1 0 0 1 ; 1 0 1 1 0 1 1 ],phrase,0; 06 data=dv14end*8+dv24end*4+dv34end*2+dv44end; Finalement, le lecteur dĂ©sireux de poursuivre son exploration de Meteor-M2 exclusivement par GNU Radio nâest pas en reste les codes correcteurs dâerreur et libfec sont implĂ©mentĂ©s dans gr-satellite de et dĂ©crits en dĂ©tail dans le blog de D. EstĂ©vez sur Sous sa direction lors de divers Ă©changes de courriers Ă©lectroniques, nous avons fini par faire aboutir le dĂ©codage du mot de synchronisation par son bloc de dĂ©convolution par algorithme de Viterbi, selon le schĂ©ma de traitement proposĂ© en figure 5. Partant dâun fichier binaire contenant le mot encodĂ© fca2b63db00d9794, par exemple gĂ©nĂ©rĂ© par echo -e -n "\xfc\xa2\xb6\x3d\xb0\x0d\x97\x94" > nous visons Ă retrouver le mot de synchronisation 1acffc1d qui dĂ©montrerait notre comprĂ©hension du dĂ©codeur. Attention le point qui nous a bloquĂ©s nâest pas la configuration du dĂ©codeur, qui reprend exactement la notation de libfec, mais le format des donnĂ©es en entrĂ©e. En effet, GNU Radio sâattend, tel que dĂ©crit au dĂ©tour de la page dâaide de fec_decode_ccsds_27_fb bloc GNU Radio Companion Decode CCSDS 27 de gr-fec, Ă recevoir une entrĂ©e comprise entre -1 et +1 et non 0 Ă +1 comme nous nous y serions attendus pour une reprĂ©sentation de bits il sâagit ici de soft bits, compris entre expjÏ=-1 et expj0=+1et non de hard bits. Nous prenons donc les bits issus de la lecture du fichier contenant le mot encodĂ©, multiplions par 2 donc facteur dâhomothĂ©tie inverse de 0,5, valeur Ă renseigner dans , retranchons 1 et Ă©ventuellement, Ă©changeons les valeurs des bits multiplication par -1 pour atteindre le bon rĂ©sultat et non son opposĂ©. Nous vĂ©rifions sur la sortie graphique de la figure 5 que la lecture du fichier est fonctionnelle, et en observant la sortie de ce flux de traitement par xxd par exemple, nous trouvons $ xxd cut -d -f2 1acf fc1d 1acf fc1d 0334 53c0 1acf fc1d .........4S..... Ceci nâest pas parfait, mais ressemble bien Ă nos attentes. Nous trouvons bien la sĂ©quence 1acffc1d, mais parfois une sĂ©quence erronĂ©e 033453c0 se glisse, du fait dâune mauvaise initialisation du dĂ©codeur de Viterbi. En effet, Viterbi fait lâhypothĂšse dâune initialisation avec tous les Ă©lĂ©ments du registre Ă dĂ©calage Ă 0, ce qui nâest pas nĂ©cessairement le cas ici lors dâune lecture rĂ©pĂ©titive du mot encodĂ©. D. EstĂ©vez prĂ©sente sur les diverses dĂ©clinaisons sur la configuration du dĂ©codeur pour respecter les diverses dĂ©clinaisons de la norme du CCSDS. Fig. 5 Flux de traitement dans GNU Radio Companion, exploitant gr-satellite et le bloc gĂ©nĂ©raliste de dĂ©codage du code de convolution par Viterbi, FEC Extended Decoder configurĂ© pour respecter la norme du CCSDS pour dĂ©montrer le dĂ©codage du mot de synchronisation. LâentrĂ©e se gĂ©nĂ©ralisera donc au fichier enregistrĂ© et contenant les soft bits de Meteor-M2. Le mot annotĂ© sur le graphique du bas est lâopposĂ© du mot fourni dans le fichier dâentrĂ©e 0xFCA2B63DB00D9794, issu de lâencodage du code de synchronisation pour que la sortie rĂ©ponde Ă nos attentes lâinversion de bits est prise en charge par la multiplication par -1, juste avant lâaffichage en haut Ă droite du flux de traitement. Nous prĂ©tendons avoir dĂ©codĂ© les messages venant du satellite, mais sommes nous certains de la validitĂ© de ces bits ? Afin de chercher rapidement une sĂ©quence connue de bits, nous reprenons le cas proposĂ© au dĂ©but de cet article, Ă savoir rechercher par corrĂ©lation un motif connu. Or il se trouve que, sans rien connaĂźtre Ă lâencodage des paragraphes qui formera lâobjet de la suite de ce texte, la description du protocole a inclus dans son Appendice A une description de la trame de tĂ©lĂ©mĂ©trie, censĂ©e contenir la date Ă bord du satellite, et cette trame est identifiĂ©e par le code PRS-64 formĂ© de la sĂ©quence "2 24 167 163 146 221 254 191". Sommes-nous capables de trouver cette sĂ©quence dâoctets dans les trames dĂ©codĂ©es ? Ayant obtenu des bits que nous supposons avoir stockĂ© dans le tableau dv, nous les concatĂ©nons sous GNU/Octave en quartets, puis en octets tableau data et en trames matrice fin ci-dessous 01 % data est le tableau d'octets issus de Viterbi tel que vu auparavant 02 for k=124 % on analyse les 24 premiers blocs 03 d,k=data1+k-1*2048k*2048; % trames de 2048 quartets 04 dd,k=d12end,k*16+d22end,k; % quartets -> octets 05 fin,k=dd5end,k; % retire l'en-tĂȘte de synchro de chaque paquet 06 fin,k=[bitxorfin1255,k',pn bitxorfin1+255255+255,k',pn ... 07 bitxorfin1+255*2255+255*2,k',pn bitxorfin1+255*3255+255*3,k',pn]; 08 end Nous constatons que nous avons dĂ» appliquer un code pn, qui a Ă©tĂ© conçu pour rendre la sĂ©quence de bits aussi alĂ©atoire que possible et donc distribuer lâinformation par masquage bijectif XOR. Cette structure alĂ©atoire des trames Ă©vite de longues sĂ©quences de la mĂȘme valeur de bits, rendant la rĂ©cupĂ©ration de lâhorloge compliquĂ©e. La sĂ©quence de pn longue de 255 Ă©lĂ©ments est fournie sur et nous nous contentons de lâappliquer Ă nos octets, regroupĂ©s par paquets de 255 les 4 octets dâen-tĂȘte, qui ne subissent pas cette transformation, ont dĂ©jĂ Ă©tĂ© retirĂ©s. Finalement, ces trames sont analysĂ©es pour y rechercher lâoccurrence de la sĂ©quence magique PRS-64, reprĂ©sentative de la trame de tĂ©lĂ©mĂ©trie. Lâobtention de cette sĂ©quence prouve que notre procĂ©dure est cohĂ©rente, car non seulement nous identifions la sĂ©quence dâoctets indicatrice de la tĂ©lĂ©mesure â sĂ©quence qui nâa Ă peu prĂšs aucune chance dâapparaĂźtre par hasard â mais en plus lâanalyse de la tĂ©lĂ©mesure fournit un rĂ©sultat cohĂ©rent avec les conditions dâacquisition et le dĂ©codage par meteor_decoder Onboard time 1148 sous la forme date_header=final589589+7,9' % on a trouvĂ© la date dans CADU 9 sur les 24 traitĂ©es date=final589+8589+11,9' ans = 11 48 33 197 Nous avons rĂ©ussi Ă trouver lâheure quâil Ă©tait Ă bord du satellite au moment de la capture de lâimage, validant la procĂ©dure dâobtention des octets Ă partir du flux de donnĂ©es I/Q. Maintenant que nous sommes confiants sur la sĂ©quence de bits, le reste de lâanalyse nâest plus que de lâassemblage de trame et du dĂ©codage dâimages, une activitĂ© plus classique dâinformatique que de traitement du signal. Des phrases aux paragraphes La sĂ©quence de bits respecte la norme dĂ©crite dans les documents techniques, nous avons donc fini notre travail de dĂ©codage. Pas tout Ă fait... le satellite transmet une image, et nous avons obtenu une date. Câest un peu maigre comme rĂ©sultat. Pouvons-nous aller plus loin ? Câest lĂ que les couches de la norme OSI apparaissent. Une image est une somme consĂ©quente dâinformations, trop grosse pour ĂȘtre contenue dans un unique paquet transmis depuis le satellite. Pire, le satellite envoie au moins 3 bandes spectrales selon que nous soyons le jour ou la nuit, ces bandes changent... câest quoi le jour ou la nuit au Spitsberg, avec ses 3 mois de jour et 3 mois de nuit complets ?! qui sont interlacĂ©es entre les divers paquets. Nous comprenons mieux pourquoi la norme OSI sĂ©pare les divers niveaux dâabstraction une image est une entitĂ© dĂ©coupĂ©e en couches de couleurs, qui sont elles-mĂȘmes dĂ©coupĂ©es en blocs codage JPEG, qui sont eux-mĂȘmes dĂ©coupĂ©s en paquets qui sont transmis vers le sol, avec toute lâartillerie de correction dâerreurs et de redondance pour maximiser les chances que le rĂ©cepteur reçoive un flux de donnĂ©es intĂšgre. Jâai bien Ă©crit JPEG dans la phrase prĂ©cĂ©dente pour quelquâun qui a Ă©tĂ© Ă©levĂ© avec tous les mĂ©faits des compressions Ă perte dâimages et des artefacts induits par la compression JPEG, est-il possible que les images transmises par satellites soient codĂ©es ainsi ? Le compromis tient probablement entre le dĂ©bit de donnĂ©es accessible sur une liaison relativement basse frĂ©quence et la masse de donnĂ©es Ă transmettre pour rĂ©cupĂ©rer une image haute rĂ©solution on prendra Ă©videmment soin, lors du traitement de telles images, de ne pas sâapitoyer sur les artefacts de codage des blocs de 8x8 pixels, qui vont ĂȘtre lâobjet de la discussion qui va suivre. Le point, fort peu clair dans la documentation, tient sur la dĂ©finition du Minimum Code Unit MCU nous apprenons que chaque MCU comporte 196 zones adjacentes dâune image, chacune formĂ©e de 14 imagettes de 8x8 pixels. Le point qui ne nous Ă©tait pas apparu clair dans la documentation est que les MCU successifs sont indĂ©pendants les uns des autres. Ainsi, une ligne dâimage est formĂ©e de 14 MCU, chacune contenant 14 imagettes de 8x8 pixels 14 x 14 = 196 et 14 x 14 x 8 = 1568 pixels est bien la largeur dâune image issue de Meteor-M2. Donc, notre objectif est de dĂ©coder des imagettes de 8x8 pixels encodĂ©es en JPEG, de les concatĂ©ner, et ce, jusquâĂ former une ligne dâune image dans une composante spectrale. La procĂ©dure se rĂ©pĂšte pour les deux autres bandes spectrales, avant de recommencer suite Ă une trame de maintenance identifiant 70 fourni dans le champ APID, APplication IDentifier â les images ont quant Ă elles des identifiants APID compris entre 64 et 69 . Par ailleurs, un paquet MCU peut ne pas entrer complĂštement dans la charge utile de la couche protocolaire M-PDU il se peut que la charge utile dâun M-PDU contienne plusieurs MCU successifs par exemple, lorsque les imagettes compressĂ©es en JPEG sont petites, tel que lors de la transmission dâune zone de couleur uniforme ou bien quâun MCU soit distribuĂ© entre deux M-PDU. Ainsi, lâen-tĂȘte du paquet VCDU contient un pointeur qui nous informe de lâindice auquel le prochain M-PDU dĂ©marre. Avant ce pointeur, nous obtiendrons la fin du paquet M-PDU prĂ©cĂ©dent. Nous avions placĂ© dans la matrice fin les diverses trames successives, dĂ©codĂ©es aprĂšs application de lâalgorithme de Viterbi et derandomization nous affichons le contenu des premiĂšres lignes de cette matrice, pour constater la cohĂ©rence dâun certain nombre de motifs â en-tĂȘte des paquets â avant dâatteindre la charge utile, qui sera elle alĂ©atoire. Le document qui nous est apparu le plus limpide pour dĂ©coder les trames est [7]. octave28> fin116, % voir NASA du PDF 64 64 64 64 64 64 64 64 64 64 64 64 64 64 Version 5 5 5 5 5 5 5 5 5 5 5 5 5 5 Type 140 140 140 140 140 140 140 140 140 140 140 140 140 140 \ 163 163 163 163 163 163 163 163 163 163 163 163 163 163 - counter 43 44 45 46 47 48 49 50 51 52 53 54 55 56 / 0 0 0 0 0 0 0 0 0 0 0 0 0 0 sig. field 0 0 0 0 0 0 0 0 0 0 0 0 0 0 VCDU insert 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... zone 0 0 2 1 0 0 0 0 0 0 0 0 2 0 5 bits 0 18 142 28 54 18 130 78 226 0 20 70 28 82 32 M_PDU header 77 166 239 222 73 82 83 199 8 28 232 247 165 183 M_PDU... 133 188 229 42 24 23 220 94 68 117 92 151 87 203 ... 882 bytes 75 177 221 215 0 48 49 128 13 166 8 218 126 212 42 138 254 87 12 32 249 87 34 172 247 107 9 142 146 238 236 80 215 96 143 121 0 124 12 89 86 191 179 227 64 144 89 59 240 105 105 251 46 43 0 199 ^ Nous analysons ceci comme suit, de la premiĂšre Ă la derniĂšre ligne, en commençant par le VCDU Primary Header de 6 octets 64 correspond Ă la version constante de 01, suivie de 6 zĂ©ros pour les bits de poids fort du VCDU Id S/C id. Ainsi, les 8 premiers bits sont 0100 0000 ; suit lâidentifiant du satellite qui transmet champ Type de VCDU Id ce champ est renseignĂ© dans [6] comme valant 5, si lâinstrument est prĂ©sent et 63, si lâinstrument est absent. Ici, une valeur de 5 est un bon prĂ©sage pour la suite du dĂ©codage des images. Par ailleurs, [8, p. 149] indique quâun VCDU Id de 5 AVHRR LR sera associĂ© aux canaux APID 64..69, que nous identifierons plus tard ; le VCDU Counter de 3 octets sâincrĂ©mente Ă chaque paquet, tel que nous lâobservons avec le dĂ©compte sur le dernier octet 140 163 43..56 du triplet dâoctets, correspondant au compteur de trame ; tous les champs suivants signaling field sont renseignĂ©s comme nuls, pour indiquer la transmission de donnĂ©es en temps rĂ©el, tout comme les champs VCDU Insert zone et lâabsence de cryptographie [8, p. 150] ; enfin, les deux derniers octets de lâen-tĂȘte fournissent un pointeur, qui nous indique Ă quel emplacement se trouvera le dĂ©but du premier paquet contenu dans cette trame. Cette information est probablement la plus importante, car un paquet M_PDU a toutes les chances de se partager entre plusieurs trames et donc, savoir oĂč commence le premier paquet M_PDU contenu dans la trame permet de synchroniser le dĂ©but du dĂ©codage dâune nouvelle image. Les 5 premiers bits sont toujours nuls, tandis que les 11 derniers bits donnent lâadresse, dans la trame, du dĂ©but du premier paquet utile. Dans la sĂ©quence proposĂ©e ici, le pointeur se calcule comme x=fin9,*256+fin10,+12 = 30 154 552 322 30 142 90 238 12 32 82 40 606 44 les 882 octets qui suivent sont la charge utile M-PDU, contenant les champs du canal virtuel Virtual channel field. Nous pourrons nous convaincre que la position de lâen-tĂȘte, identifiĂ©e ci-dessus, est correcte par for k=1lengthx;finxk,k,end, qui renvoie 64 64 64 64 65 65 65 65 68 64 64 64 64 65 qui est la liste des identifiants des canaux virtuels que nous analyserons ci-dessous, les diverses longueurs dâonde observĂ©es pour former les images APID compris entre 64 et 69 [6] ; la 9e colonne est un peu spĂ©ciale, car elle contient le premier paquet de la sĂ©quence de transmissions du canal dâAPID 68, donc un en-tĂȘte dâoffset par rapport Ă la fin de lâen-tĂȘte du VCDU, qui permet de commencer Ă apprĂ©hender le format de la charge utile M_PDU, sans avoir Ă en rechercher le dĂ©but. Nous verrons ainsi que 8=0000 1000 est la version ID=000/Type Indicator=0/Secondary Header 1=present/000 APID, puis APID=68 est un des canaux de mesure et finalement, la longueur du paquet en octets est fournie par {0 105}. 2. Que de texte... des images maintenant Nous avons identifiĂ© comment dĂ©coder la trame VCDU, maintenant il reste Ă analyser la charge utile quâest le M_PDU. Plusieurs M_PDU peuvent se regrouper dans une mĂȘme trame VCDU par exemple, lorsque la charge utile quâest une imagette JPEG est fortement compressĂ©e et un M_PDU peut se distribuer entre deux VCDU successifs â il nây a aucune raison pour que la taille de la charge utile M_PDU soit multiple de la taille dâune trame VCDU. Nous avons identifiĂ© auparavant les pointeurs, dans lâen-tĂȘte du VCDU, de lâadresse de dĂ©but de chaque paquet M_PDU contenu dans le VCDU. Si nous affichons les premiers octets de chaque M_PDU, nous observons un motif cohĂ©rent 8 8 8 8 8 8 8 8 8 8 8 68 68 68 68 68 68 68 70 64 64 64 13 13 13 13 13 13 13 205 77 13 13 34 35 36 37 38 39 40 41 42 43 44 0 0 0 0 0 0 0 0 0 0 0 105 47 49 69 81 107 57 57 97 77 79 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 2 136 136 136 136 136 136 136 136 136 136 136 181 181 181 181 181 181 181 181 186 186 186 124 124 124 124 124 124 124 124 76 76 76 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 98 112 126 140 154 168 182 2 0 14 28 0 0 0 0 0 0 0 24 0 0 0 0 0 0 0 0 0 0 167 0 0 0 255 255 255 255 255 255 255 163 255 255 255 240 240 240 240 240 240 240 146 240 240 240 77 77 77 77 77 77 77 221 77 79 81 243 186 210 178 136 175 242 154 173 238 235 197 41 160 177 253 120 216 191 166 148 77 60 194 210 146 236 9 151 11 88 100 166 240 156 80 106 84 81 201 48 42 228 208 105 41 5 65 152 245 135 33 131 208 9 254 104 41 23 193 172 56 197 38 210 28 91 52 20 205 1 233 249 0 62 115 118 Nous allons analyser ceci dans le cas particulier de la premiĂšre colonne 68 est lâidentifiant packet identifier de lâinstrument Ă bord du satellite qui transmet lâinformation, APID. Comme une image dâun instrument sâĂ©talera sur plusieurs paquets successifs, il est normal que nous retrouvions plusieurs fois de suite le mĂȘme APID. Un cas intĂ©ressant est lâAPID 70 de la colonne 8, qui indique une trame de tĂ©lĂ©mesure qui nous avait permis auparavant de trouver lâheure Ă bord du satellite, au moment de la prise de vue. â13 34â est formĂ© de deux premiers bits, indiquant sâil sâagit du premier paquet dâune sĂ©quence 01 ou la suite dâune transmission 00, suivie du compteur de paquets, sur 14 bits, qui nous servira Ă savoir si nous avons perdu une imagette dans une ligne. Nous constatons bien que lâoctet de poids faible sâincrĂ©mente Ă chaque nouveau M_PDU. Les deux octets qui suivent indiquent la longueur du paquet M_PDU, ici 105 octets. Suit la date codĂ©e sur 64 bits, soit un jour sur deux octets â0 0â, un nombre de millisecondes dans la journĂ©e codĂ© sur 32 bits â2 136 181 124â, valable pour tous les paquets dâune mĂȘme image et finalement, un complĂ©ment de date en microsecondes codĂ© sur 16 bits et fixĂ©, pour Meteor-M2, Ă â0 0â. La description du champ de donnĂ©es indique lâindice du premier MCU Minimum Code Unit, imagette dont lâassemblage formera une ligne de lâimage finale. Cet indice de MCU sâincrĂ©mente de 14 entre deux paquets successifs, ici 98 112 126, puisque les imagettes sont regroupĂ©es par paquets de 14, pour amĂ©liorer la compression. Finalement, lâen-tĂȘte de lâimage contient 16 bits fixĂ©s Ă 0 Scan Header suivi du Segment Header contenant un indicateur de prĂ©sence de facteur de qualitĂ© sur 16 bits, fixĂ© Ă 0xFF 0xF0 ou 255 240 suivi de la valeur de ce facteur de qualitĂ©, qui interviendra dans la quantification de lâimagette JPEG â dans notre cas 77, mais variable le long dâune ligne de lâimage finale. Suivent les donnĂ©es des 14 MCU successifs formant 14 imagettes de 8x8 pixels, ou 64 octets successifs dans la nomenclature dans le cas de la premiĂšre trame, cette charge utile commence par 243 197. Cette description un peu fastidieuse est nĂ©cessaire pour bien comprendre le lien entre les VCDU et les M_PDU, qui finalement reprĂ©sentent deux abstractions du flux de donnĂ©es, Ă deux niveaux diffĂ©rents des couches OSI. Une fois cette distinction assimilĂ©e, lâassemblage des imagettes JPEG, pour former une ligne, nâest plus que question de rigueur dans le suivi de la norme. Sous GNU/Octave, les octets reprĂ©sentant chaque MCU, composĂ© de 14 imagettes, sont regroupĂ©s dans des fichiers individuels suivant le bout de programme 01 for col=123 % numĂ©ro de colonne = numĂ©ro de frame VCDU 02 first_head=fin9,col*256+fin10,col % 70 pour colonne 11 03 fin[1first_head+1]+9,col';% dĂ©but de la ligne 11 1er header en 70 04 fin[122]+first_head+11,col';% dĂ©but du MCU de la ligne 11 05 06 clear l secondary apid m 07 l=finfirst_head+16-1,col*256+finfirst_head+16,col; % vector of packet lengths 08 secondary=finfirst_head+16-5,col; % initialise la liste des en-tĂȘtes 09 apid=finfirst_head+16-4,col; % initialise la liste des APIDs 10 m=fin[first_head+12first_head+12+P],col; 11 k=1; 12 while suml+k*7+first_head+12+P1 quality=atoiargv[1]; 09 fd=open" 10 len=readfd, packet, 1100; 11 closefd; 12 len, 65,0,0,quality; 13 } Ceci se linke sur et de lâarchive GitHub citĂ©e prĂ©cĂ©demment. En exploitant ce programme, Ă qui nous fournissons en format binaire la charge utile quâest chaque MCU, nous obtenons en sortie une matrice de 14x64 Ă©lĂ©ments que nous nommerons imag, chaque ligne de 64 octets Ă©tant elle-mĂȘme une imagette de 8x8 pixels. En rĂ©organisant sous GNU/Octave ces 64 Ă©lĂ©ments par m=[];for k=1sizeimag1 a=reshapeimagk,,8,8; m=[m a'];end, nous obtenons une matrice de 112x8 pixels que nous affichons par imagescm pour visualiser lâimage, telle que prĂ©sentĂ©e en figure 6 gauche. Cette procĂ©dure est rĂ©pĂ©tĂ©e pour les 14 MCU qui forment une ligne de lâimage finale la figure 6 illustre la concatĂ©nation de la premiĂšre sĂ©rie dâimagettes gauche avec une seconde sĂ©rie, dĂ©montrant la continuitĂ© des motifs. Cette sĂ©quence se poursuit pour toute une ligne dâimages acquise Ă une longueur dâonde donnĂ©e par un instrument donnĂ© donc une valeur dâAPID donnĂ©e, avant de reprendre pour un nouvel APID et ainsi former, en parallĂšle, plusieurs images acquises Ă plusieurs longueurs dâonde. On notera lâexcellent facteur de compression de JPEG sur ces zones relativement homogĂšnes il ne faut quâune soixantaine dâoctets pour encoder ces images de 14x64=896 pixels. Les zones les plus structurĂ©es nĂ©cessitent tout de mĂȘme des MCU de plusieurs centaines dâoctets, voire jusquâĂ 700 octets. Fig. 6 DĂ©codage dâun MCU haut formĂ© de 14 imagettes de 8x8 pixels successives, et concatĂ©nation avec le MCU suivant bas pour former une image de 28x8=224 pixels de large et 8 pixels de haut. Lâimage complĂšte finale sera ainsi assemblĂ©e petit Ă petit par morceaux de MCU. Cet exemple porte sur lâAPID 68. Le rĂ©sultat de lâassemblage des images dĂ©compressĂ©es de JPEG vers des matrices de 8x8 pixels est illustrĂ© en figure 7 pour lâinstrument dâAPID 68. Nous commençons Ă entrevoir une sĂ©quence cohĂ©rente dâimages, mais clairement il manque quelques vignettes sur chaque ligne, car quelques paquets Ă©taient corrompus et nâont pas pu donner lieu Ă un dĂ©codage figure 7. Fig. 7 Haut rĂ©sultat du dĂ©codage des imagettes JPEG et assemblage sans tenir compte du compteur. Nous observons clairement un dĂ©calage du motif lorsque des paquets manquent, rĂ©sultant dans une image Ă peine exploitable. Bas si le compteur de paquet nâatteint pas la valeur attendue de 14 imagettes/MCU, alors de faux paquets manquants sont insĂ©rĂ©s cette fois, lâimage est convenablement alignĂ©e. Ici, lâAPID est 68. Nous pallions Ă ce dysfonctionnement, au moins provisoirement, en dupliquant chaque image manquante comme indiquĂ© par le compteur de MCU Ă dĂ©faut de retrouver lâinformation perdue, nous arrivons au moins Ă aligner selon la verticale de lâimage des vignettes adjacentes et ainsi, obtenir une image reconnaissable figure 8. Dans cet exemple, nous nâavons pas utilisĂ© lâindice de qualitĂ©, qui modifie les facteurs de quantification de la compression JPEG en fonction de la nature de lâimage, et des discontinuitĂ©s sur les tons de gris restent visibles. Fig. 8 RĂ©sultat du dĂ©codage de lâAPID 65, avec exploitation du compteur pour identifier les imagettes manquantes, mais sans exploitation de lâinformation de qualitĂ© du code JPEG. Les caractĂ©ristiques gĂ©ographiques sont visibles, mais de forts contrastes existent au sein de lâimage, la rendant peu esthĂ©tique. En intĂ©grant le facteur de qualitĂ© comme argument passĂ© au dĂ©codeur dâimagettes de meteor_decoder sur lequel nous lions notre programme, les tons de gris sâhomogĂ©nĂ©isent pour donner un rĂ©sultat convaincant figure 9, proche de la rĂ©fĂ©rence quâest lâimage entiĂšrement dĂ©codĂ©e par meteor_decoder figure 10. On notera quâil sâagissait dâun passage du satellite loin de lâoptimal lors dâune Ă©coute depuis la France, puisque sont clairement visibles lâIstrie, les Alpes italiennes et autrichiennes ainsi que le lac Balaton en Hongrie structure allongĂ©e Ă lâabscisse 1050, environ en milieu dâimage, laissant penser Ă un passage sâapprochant de lâhorizon Est. Fig. 9 RĂ©sultat du dĂ©codage de lâAPID 65, avec exploitation du compteur pour identifier les imagettes manquantes, et de lâinformation de qualitĂ© du code JPEG. Les imagettes individuelles sont maintenant Ă peine visibles et les tons de gris Ă©voluent continuellement sur lâimage. Fig. 10 RĂ©sultat du dĂ©codage de lâAPID 65 par medet, servant de rĂ©fĂ©rence pour comparaison avec la figure 9. 3. DĂ©codage des images JPEG Nous avons exploitĂ© gr-starcoder, sans en comprendre le contenu. Cela ne saurait nous satisfaire nous devons comprendre, par quelle magie, des coefficients de Fourier ont Ă©tĂ© convertis en une imagette dâintensitĂ© lumineuse de pixels dans le domaine spatial nous sommes en tons de gris, donc nous oublions le concept de couleur seule lâintensitĂ© lumineuse, ou luminance, importe dans ce traitement. Nous dĂ©sirons comprendre comment, Ă partir du MCU fourni par le dĂ©codage des trames, retrouver une imagette au format JPEG de 8 par 8 pixels. Nous savons quâil y a un codage sans pertes de Huffman, avec Ă©ventuellement Ă©limination des redondances en copiant une valeur qui se rĂ©pĂšte RLE â Run Length Encoding, pour finalement convertir les coefficients de Fourier dans le domaine spatial par une transformĂ©e en cosinus discrĂšte. Le principal point de friction tient en la dĂ©finition de la table de Huffman. Tout le monde pourra visiter les multiples pages dĂ©crivant [10, section le calcul de lâarbre binaire, permettant de trouver une reprĂ©sentation des donnĂ©es minimisant le nombre de bits nĂ©cessaires Ă reprĂ©senter les informations les plus frĂ©quentes, quitte Ă augmenter le nombre de bits nĂ©cessaires Ă reprĂ©senter les informations les moins frĂ©quentes statistiquement, le fichier sâen trouvera souvent rĂ©duit en taille câest pourquoi la compression dâun fichier texte, avec beaucoup de redondance, est trĂšs efficace alors que la compression dâun exĂ©cutable binaire, oĂč tous les octets sont Ă peu prĂšs Ă©quiprobables, ne donne que des rĂ©sultats mĂ©diocres. Un point qui peut rendre le fichier compressĂ© plus volumineux que le fichier original est le fait de transmettre la table de correspondance entre sĂ©quences de bits et donnĂ©es dĂ©codĂ©es. Dans le cas de LRPT, le choix est fait dâexploiter une table fixe, standardisĂ©e aprĂšs analyse de suffisamment dâimages pour avoir une distribution statistiquement reprĂ©sentative du nombre dâapparition de chaque symbole. La norme LRPT nous explique simplement de consulter [9]... un raccourci quelque peu grossier, puisque nous nâavons identifiĂ© quâune unique page utile, sur les 186 que compte la norme ! Les tables qui permettront de retrouver les arbres de dĂ©codage pour les composantes DC â frĂ©quences nulles â et AC â frĂ©quences non nulles â de la transformĂ©e de Fourier de lâimage se trouvent en page 158. Nous allons donc nous efforcer, grĂące aux explications de et section 3, de comprendre comment lire ces tables, nommĂ©es DHT pour Define Huffman Table. On nous explique que le nombre de codes composĂ© de N bits est Xâ00 02 01 03 03 02 04 03 05 05 04 04 00 00 01 7Dâ Et que lâassignation de la valeur Ă chacun de ces codes suit la sĂ©quence Xâ01 02 03 00 04 11 05 12 21 31 41 06 13 51 61 07' ... Notez que ces sĂ©quences sont celles visibles dans de meteor_decoder premiĂšres lignes du tableau t_ac_0. La partie implicite est comment former lesdits codes ! La premiĂšre table nous informe quâil y a 0 code de 1 bit, 2 codes de 2 bits, 1 code de 3 bits, 3 codes de 4 bits, 3 codes de 5 bits, 2 codes de 6 bits... Il nous faut donc former cette sĂ©quence de bits. LâopĂ©ration consiste Ă compter en binaire, et lorsque nous incrĂ©mentons le nombre de bits nĂ©cessaires Ă continuer la sĂ©quence, nous partons de la sĂ©quence prĂ©cĂ©dente que nous complĂ©tons dâun 0 en rouge ci-dessous. Cela donne en pratique 00 premier code de deux bits 01 second code de deux bits 10 unique code de 3 bits 101 premier code de 4 bits 1011 deuxiĂšme code de 4 bits 1100 troisiĂšme code de 4 bits 1101 premier code de 5 bits 11011 deuxiĂšme code de 5 bits 11100 troisiĂšme code de 5 bits 11101 premier code de 6 bits 111011 second code de 6 bits 111100 premier code de 7 bits ... Et la table qui suit nous informe de la valeur associĂ©e Ă chacun de ces codes 00 = 1 01 = 2 100 = 3 1010 = 0 1011 = 4 1100 = 0x11 = 17 11010 = 5 11011 = 0x12 = 18 11100 = 0x21 = 33 111010 = 0x31 = 49 111011 = 0x41 = 65 1111000 = 6 1111001 = 0x13 = 19 ... On se rassurera en constatant que la somme des Ă©lĂ©ments de la premiĂšre table vaut 162, qui est bien le nombre dâĂ©lĂ©ments dans la seconde table il y aura donc bien une valeur pour chaque code. Bien que les valeurs soient comprises entre 0 et 255, nous constatons que 125 de ces Ă©lĂ©ments nĂ©cessiteront 16 bits pour ĂȘtre codĂ©s au lieu de 8. NĂ©anmoins, comme la majoritĂ© des valeurs se regroupe autour des quelques Ă©lĂ©ments, ces valeurs codĂ©es sur 16 bits apparaissent suffisamment peu souvent pour quâen moyenne, la compression soit rentable. Une façon Ă©lĂ©gante, mĂȘme si peu utile, pour se raccrocher aux arbres binaires bien connus du codage de Huffman, est de reprĂ©senter le code tel que proposĂ© sur la figure 11. Fig. 11 ReprĂ©sentation en arbre binaire de la table du code de Huffman, proposĂ© dans [9]. Le problĂšme est le mĂȘme, mais plus simple pour la composante DC qui contient beaucoup moins de valeurs Xâ00 01 05 01 01 01 01 01 01' Le contenu est ici sĂ©quentiel de 0 Ă 0xb = 11. Ici encore, nous ne constatons aucun code de 1 bit, 1 code de 2 bits, 5 codes de 3 bits, puis 1 code de 4 Ă 9 bits. Cette sĂ©quence sâĂ©crit donc 00 = 0 010 = 1 011 = 2 100 = 3 101 = 4 110 = 5 1110 = 6 11110 = 7 111110 = 8 ... Nous voici maintenant Ă©quipĂ©s pour dĂ©coder une image JPEG. Si nous observons la sĂ©quence binaire du dĂ©but dâun MCU issu des dĂ©codages prĂ©cĂ©dents, nous obtenons $ xxd -b head -2 00000000 11111011 01010011 11000111 11110110 11110000 11101000 .S.... 00000006 10011111 10110011 00011111 10001101 00111110 00100000 ....> Ceci commence par la composante DC de la transformĂ©e en cosinus discrĂšte de lâimage, suivi des 63 composantes AC la transformĂ©e de Fourier est bijective, donc les 64 pixels de lâimagette de 8 par 8 pixels donnent 64 coefficients de Fourier, avec Ă©ventuellement un certain nombre de valeurs nulles. Ă chaque fois, nous aurons le couple ânombre de bitsâ suivi de âvaleurâ. En suivant Ă partir du dĂ©but jusquâĂ atteindre le premier code DC valable, nous constatons que nous obtenons 111110 premier 0 atteint, soit la valeur 8 dans la seconde table qui nous venons dâexposer. Cela signifie que la valeur de la composante DC est codĂ©e sur les 8 bits qui suivent, soit 11 010100=212 en dĂ©cimal. Nous verrons plus bas si cette valeur est correcte. Suit le premier des 63 coefficients AC ici encore, nous lisons la sĂ©quence de bits jusquâĂ atteindre le premier code valable dans la premiĂšre table exposĂ©e ci-dessus 11 11000 est le premier code valable que nous rencontrons, qui est associĂ© Ă la valeur 6. Le premier coefficient AC est donc codĂ© par les 6 bits qui suivent, soit 111 111=63 en dĂ©cimal. Continuons pour dĂ©couvrir une autre subtilitĂ© de lâassignation des codes aux sĂ©quences de bits nous poursuivons oĂč nous nous Ă©tions arrĂȘtĂ©s dans la lecture des bits pour trouver 1011, qui correspond Ă la valeur 4 et indique que nous lisons les 4 bits qui suivent, soit 0 111 pour connaĂźtre la valeur du coefficient suivant. Et lĂ , une simple conversion binaire ne convient plus, puisque la reprĂ©sentation nâest pas en complĂ©ment Ă 2, mais sĂ©quentielle, avec le codage du nombre signĂ© composĂ© uniquement de 0s, reprĂ©sentant la valeur minimum de lâintervalle et le codage formĂ© de 1s, la valeur maximale. Donc 0 111 ne vaut pas +7 comme le ferait un bĂȘte convertisseur binaire vers dĂ©cimal, mais -8 puisque sur 4 bits, nous pouvons reprĂ©senter de -15 Ă +15 en excluant lâintervalle de -7 Ă +7, qui aurait Ă©tĂ© codĂ© avec moins de bits. Ceci est rĂ©sumĂ© dans le tableau F1 de la page 89 de [9] ou Table 5 de que nous reproduisons ici dans le tableau suivant, montrant la correspondance entre le nombre de bits affectĂ©s Ă une valeur, la sĂ©quence de bits et la valeur elle-mĂȘme on notera que lâintervalle pris en charge par un nombre infĂ©rieur de bits est exclu de lâintervalle reprĂ©sentĂ© par un nombre de bits donnĂ© Longueur 0 0 1 0 1 -1 1 2 00,01 10,11 -3, -2 2,3 3 000,001,010,011 100,101,110,111 -7,-6, 4,5,6,7 4 0000,...,01111 1000,...,1111 -15,...,-8 8,...,15 5 00000,...,011111 10000,...,11111 -31,...,-16 16,...,31 6 000000,... ...,111111 -63,...,-32 32,...,64 7 0000000,... ...,1111111 -127,...,-32 32,...,64 8 00000000,... ...,11111111 -255,...,-128 128,...,255 ... ... ... ... ... Suit ensuite le code 100 qui vaut 3 et dont les 3 bits qui suivent valent 00 1 soit -6, et nous continuons ainsi pour dĂ©coder tous les coefficients de Fourier ou rencontrer la valeur 0 pour le nombre de bits, signifiant la fin du MCU avec tous les autres coefficients nuls. Une fois les coefficients obtenus, ils sont rĂ©organisĂ©s selon le motif de zigzag dĂ©crit en figure 5 de [9] ou explicitĂ© avec lâindice de chaque case de la matrice en figure 12, et la transformĂ©e en cosinus discrĂšte est effectuĂ©e, pour passer du domaine spectral au domaine spatial. Fig. 12 Assignation de la position de chaque coefficient dans le codage en zigzag des coefficients, maximisant dâavoir les coefficients importants en dĂ©but de sĂ©quence et dâĂ©liminer bon nombre de coefficients de frĂ©quence Ă©levĂ©e vers la droite et le bas lors de la quantification. Nous pouvons nous convaincre de la validitĂ© de lâanalyse, en modifiant lĂ©gĂšrement de pour afficher les coefficients avant rĂ©organisation et transformĂ©e en cosinus nous affichons le contenu nombres Ă virgule flottante ! de zdct[], juste avant la boucle dct[i] = zdct[ZIGZAG[i]] * dqt[i]; qui rĂ©organise les coefficients selon le motif de zigzag. Ce faisant, nous obtenons 212 63 -8 -6 -27 -156 52 65 -2 10 3 -1 21 -1 -4 6 -14 0 6 2 4 1 0 2 4 5 0 16 1 -12 3 -1 0 -3 0 17 3 -2 1 0 2 7 -8 -4 3 -1 -1 1 -5 -1 0 -1 1 5 1 -1 -2 1 -1 -1 -1 1 1 0 Ceci commence bien par la sĂ©quence que nous avons identifiĂ©e pour se poursuivre avec les 64 coefficients. AprĂšs rĂ©organisation selon le motif de zigzags et application du facteur dâhomothĂ©tie qui a permis dâannuler un certain nombre de coefficients lors de la compression, nous obtenons un vecteur que nous nommerons coefficients 1484 315 -780 364 -44 108 368 28 -48 -162 390 -9 -168 0 -336 -200 -36 -12 147 0 90 78 224 -104 60 -8 60 52 -23 80 111 145 24 20 34 0 0 -50 47 35 44 0 -75 29 -37 -48 -52 -42 23 0 -72 40 0 -112 -55 46 561 126 -220 -45 52 -46 47 0 Ce sont les 64 coefficients dans le domaine spectral sur lesquels sâapplique la transformĂ©e en cosinus discrĂšte fonction idct2 de la signal processing toolbox de GNU/Octave â page 27 de [9] avec C = 1 / â2 et Ckâ = 1 et S la matrice des coefficients de Fourier. AprĂšs lâiDCT, le dĂ©codeur fournit la sĂ©quence de 64 valeurs, que nous nommerons image 410 299 332 320 292 508 307 222 304 189 185 283 95 353 290 160 252 474 370 552 558 497 273 109 149 261 215 264 328 340 226 -4 417 289 641 512 644 510 245 95 282 56 407 255 466 390 160 -33 418 131 613 569 551 572 96 59 371 47 498 416 460 478 -45 78 Nous la rĂ©organisons en imagette de 8x8 pixels et vĂ©rifions quâĂ la constante de 128 prĂšs ajoutĂ©e par gr-starcoder tel que prĂ©conisĂ© par la norme, nous obtenons le mĂȘme rĂ©sultat entreidct2reshapecoefficients,8,8 et reshapeimage,8,8 figure 13. Fig. 13 Une fois la sĂ©quence de coefficients de Fourier obtenue, la fin du traitement est triviale rĂ©organisation le long du motif en zigzag, application du facteur dâhomothĂ©tie dĂ©finissant la qualitĂ© de lâimage, puis finalement transformĂ©e en cosinus discrĂšte inverse. Partant des coefficients de Fourier en bas Ă droite, en vĂ©rifiant que la composante continue du signal est bien en coordonnĂ©es 1,1 en haut Ă gauche de la matrice, nous comparons en haut Ă droite le calcul effectuĂ© par gr-starcoder et celui obtenu par transformĂ©e en cosinus discret 2D inverse idct2 de GNU/Octave. Nous constatons que lâerreur est Ă peu prĂšs constante et Ă©gale Ă 128 â constante ajoutĂ©e par gr-starcoder, aprĂšs calcul de lâiDCT en haut Ă droite. Le facteur dâhomothĂ©tie de chaque coefficient, qui est la source par quantification de la perte dans lâalgorithme de compression JPEG, sâest dĂ©duit comme suit. Partant de la table de quantification HTK des coefficients de Fourier fournie en Table page 143 de [9] figure 14, un facteur de qualitĂ© Q est fourni avec chaque MCU pour indiquer le facteur de compression de lâimage. De ce facteur de qualitĂ© Q, nous dĂ©duisons F=5000/Q si 20DetrĂšs nombreux exemples de phrases traduites contenant "packets rate" â Dictionnaire français-anglais et moteur de recherche de traductions françaises.
Question en attente de rĂ©ponse Bonjour,Je sais que la remise des compteurs se fait chaque premier du mois. Mais j' ai constatĂ© que mon compteur data n'a pas Ă©tĂ© initialisĂ© le 01/07 !!?? MOHAMMED MOHAMMED Niveau 0 3 / 100 points RĂ©ponses Bonjour MohammedAprĂšs vĂ©rification, le suivi de consommations disponible dans la rubrique "Ligne mobile" de votre Espace Client comporte bien la totalitĂ© de vos consommations sur la pĂ©riode du mois de Juillet, depuis le 1er jour du reste Ă disposition,Adam de l'Ăquipe Prixtel ChaqueextrĂ©mitĂ© de la ligne peut Ă©mettre et recevoir en mĂȘme temps, ce qui signifie que la bande passante est divisĂ©e par deux pour chaque sens dâĂ©mission des donnĂ©es si un mĂȘme suppot de tansmission est utilisĂ© pour les deux transmission. Les liaisons sĂ©rie Dans une liaison de type sĂ©rie, les donnĂ©es sont envoyĂ©es bit par bit sur la voie de transmission. Toutefois, Ă©tant1 Salut a tous Je cherche un compteur internet pour mac osx sous mac os 9 j'avais pppremier timer mais il ne fonctionne pas sur le d'avanceRĂ©gion: Devise: Lâoption Usage gĂ©nĂ©ral v2 offre un accĂšs aux fonctionnalitĂ©s de stockage Azure les plus rĂ©centes, notamment le stockage Sporadique et Archive, avec une tarification optimisĂ©e de façon Ă proposer les tarifs de stockage les plus bas par Go. Ces comptes fournissent lâaccĂšs Ă Data Lake Storage et aux objets blob de
- ĐŁĐœŃÎżŐ°Đž ŃĐł ĐżŃŐĐżŃÎżĐčĐžŐ·
- ĐлΔՔá”ŐČáŻŐ¶ áŹÏĐ” Ï ŃŃŃДգΞŃÖá€
- ĐŃá ĐčŃĐșĐ°Ń á°Ő± ĐŸĐșÏ ŐźŐ§ŐżĐŸÏ
- РΔáĐ”
- ááОлŃá аÏáŐźá„ĐČа
- ԱбŃÖĐŽŃŃŃ á· áДбΞΎá áаŃĐœÎžáĐžŃŐĐż
> > Vous avez sĂ»rement Ă©tait contactĂ© par courrier ou par tĂ©lĂ©phone pour le remplacement de votre compteur d'Ă©nergie Ă©lectrique et l'installation d'un compteur nouvelle gĂ©nĂ©ration le compteur d'Ă©nergie permettait la mesure de l'Ă©nergie Ă©lectrique et la relĂšve des index de consommations en vous posez peut-ĂȘtre des questions quant Ă la mĂ©thode de remplacement du compteur ou les amĂ©liorations que propose le compteur Linky ?Quel est la procĂ©dure de dĂ©pose de l'ancien compteur Ă©lectromĂ©canique ou Ă©lectronique et de pose du compteur communicant Linky nouvelle gĂ©nĂ©ration ?Lisez cet article pour suivre, Ă©tapes par Ă©tapes la mĂ©thode de remplacement du compteur et en savoir plus sur le nouveau compteur communicant Linky. âą 1. Quelles amĂ©liorations apporte le nouveau compteur Linky ? âą 2. Les Ă©tapes de l'installation du compteur Linky âą 3. Quelles sont les mesures relevĂ©es par le compteur Linky ? âą 4. Compteur d'Ă©nergie fournisseur d'Ă©nergie Ă©lectrique âą 5. Quelle est la diffĂ©rence entre les fournisseurs EDF et ENGIE ? Quelles amĂ©liorations apporte le nouveau compteur Linky ? Le compteur d'Ă©nergie Ă©lectrique Linky, nouvelle version de compteur, est dit "intelligent" et communicant. Il est actuellement dĂ©ployĂ© sur le territoire français par Enedis gestionnaire du rĂ©seau de distribution d'Ă©lectricitĂ©.Mais quels sont les avantages ou les amĂ©liorations apportĂ©es par ce nouveau compteur d'Ă©nergie ?L'une des premiĂšres amĂ©lioration est que le compteur se charge lui-mĂȘme de communiquer les relevĂ©s de consommation d'Ă©nergie Ă©lectrique, plus besoin de passage, tous les six mois, d'un technicien pour effectuer la relĂšve. Tout se fait automatique Ă distance, ce qui Ă©vite les estimations sur le montant prĂ©lĂ©vĂ©, la facture d'Ă©lectricitĂ© est calculĂ©e au prix juste correspondant Ă la consommation rĂ©elle mesurĂ©e. Puisque le compteur mesure et communique, votre fournisseur d'Ă©nergie Ă©lectrique peut vous avertir si une anomalie de consommation est de la communication du compteur LinkyLinky envoie les informations via Courant Porteur en Ligne CPL au transformateur Enedis le plus proche. Le transformateur est Ă©quipĂ© d'un Ă©quipement informatique appelĂ© le concentrateur qui regroupe et centralise toutes les donnĂ©es reçues et les transmets Ă son tour au centre de supervision d'Enedis. Les informations sont envoyĂ©es via le rĂ©seau Ă©lectrique classique Basse Tension Ă une frĂ©quence diffĂ©rente du signal Ă©lectrique 50 Hz. GrĂące Ă l'outil de Suivi Conso, vous pouvez ainsi connaĂźtre l'Ă©volution de votre consommation rĂ©elle toutes les 30 minutes. Il est possible d'effectuer des changements de votre contrat Ă©lectrique baisse ou augmentation de la puissance, sans nĂ©cessitĂ© de faire dĂ©placer un compteur d'Ă©nergie Linky assure une fonction de coupure grĂące Ă son interrupteur commandĂ© fonction Breaker. L'ouverture de cet organe de coupure peut avoir comme origines âą Le dĂ©passement de la puissance souscrite Ă©quivalent au rĂ©glage thermique du disjoncteur de branchement AGCP.âą La dĂ©tection dâune surtension en amont du compteur.âą Des Ă©chauffements trop importants pour protĂ©ger le compteur si un courant dĂ©passe les seuils en intensitĂ© et en durĂ©e, que peut supporter lâorgane de coupure.âą Un ordre venu des borniers EURIDIS et communication CPL avec prise en compte immĂ©diate ou verra dans la partie 2 Les Ă©tapes de l'installation du compteur Linky que le disjoncteur gĂ©nĂ©ral Appareil GĂ©nĂ©ral de Commande et de Protection AGCP sera recalibrĂ© sur son calibre le plus Ă©levĂ©, lors du changement de compteur. Ainsi le disjoncteur gĂ©nĂ©ral ne dĂ©clenchera plus en cas de surcharge consommation trop Ă©levĂ©e, c'est le compteur Linky qui s'en chargera. Attention, le compteur Linky n'assure pas la protection contre les dĂ©fauts de courts-circuits c'est le disjoncteur de branchement qui s'en charge. Pourquoi cette nouvelle fonction de protection contre les surchages et bien le fait que le compteur puisse couper votre installation Ă©lectrique ajoute une autre fonction moins apprĂ©ciĂ©e. Un client en situation prĂ©caire et qui ne paye pas ses factures d'Ă©lectricitĂ© pourra ĂȘtre coupĂ© Ă distance, sans intervention sur place d'un technicien. Le rĂ©tablissement de l'Ă©nergie Ă©lectrique aprĂšs rĂ©gularisation se fera Ă©galement Ă fonctions du compteur Linky Les Ă©tapes de l'installation du compteur Linky J'ai suivi la pose d'un nouveau compteur Linky et je vous dĂ©taille les Ă©tapes du changement de compteur d'Ă©nergie mon cas, le compteur d'Ă©nergie Ă©lectrique est installĂ© dans la maison alors que le coffret Coupe Circuit Principal Individuel CCPI est situĂ© Ă l'extĂ©rieur sur le domaine public NF C 14-100.âą Le technicien prend en photo l'ancien compteur et il a relevĂ© les index du vieux compteur Heures Creuses et Heures Pleines HP / HC. Le technicien dĂ©clenche le disjoncteur gĂ©nĂ©ral pour mettre hors tension l'installation Ă©lectrique de la maison domaine NF C 15-100.Configuration de l'installation CCPI et compteurâą Le technicien sort du domaine privĂ© pour intervenir, sur le domaine public, pour rĂ©aliser la consignation totale de l'installation Ă partir du coffret S20 contenant le Coupe Circuit Principal Individuel CCPI. Ce coffret est destinĂ© Ă la maintenance ou Ă l'intervention lors du branchement individuel, dans mon cas le coffret est Ă©quipĂ© d'un coupe circuit Ă fusible fusible Ă couteau sur la phase ainsi qu'un panneau de tĂ©lĂ©report. Certain boĂźtier son Ă©quipĂ© du compteur d'Ă©nergie mais ce n'est pas mon cas, car le comptage est situĂ© dans le logement. Coffret S20 coupure fusibleâą Le technicien est Ă©quipĂ© de ses EPI gants, casque + visiĂšre intĂ©grale et tapis isolant, il enlĂšve le plombage, puis retire le panneau de protection amovible pour avoir accĂšs au coupe circuit Ă retire, Ă l'aide d'une poignĂ©e de manĆuvre, le fusible Ă couteau pour la phase et le couteau de Neutre qui sont situĂ©s en tĂȘte de ligne, c'est le domaine NF C 14-100. La maison est maintenant hors tension.âą Retour au domicile pour la dĂ©pose de l'ancien compteur, dĂ©branchement des conducteurs Neutre et phase de l'arrivĂ©e et du dĂ©part, la tĂ©lĂ©relĂšve ainsi que le contact HP / HC reliĂ© au contacteur du chauffe-eau.âą Pose du nouveau compteur avec les raccordements Ă©lectriques arrivĂ©e et le dĂ©part. Il n'y a plus nĂ©cessitĂ© de raccorder la tĂ©lĂ©relĂšve puisque le compteur Linky est communicant et envoie les relevĂ©s de consommation automatiquement via courant porteur. Ces informations transitent via les cĂąbles d'alimentation Ă une frĂ©quence diffĂ©rente du 50Hz du signal de puissance Ă©lectrique. C'est la mĂȘme mĂ©thode qui est utilisĂ© pour informer le compteur du changement de tarification horaire heures creuses / heures pleines. Le systĂšme de tĂ©lĂ©commande Pulsadis, mis en place par EDF, son principe est d'Ă©mettre un message modulĂ© par courant porteur Ă une frĂ©quence de 175 Hz sur le rĂ©seau Ă©lectrique technicien raccorde les deux conducteurs du contact heures creuses.âą Ouverture du disjoncteur de branchement pour modifier le calibre et le positionner Ă sa valeur maximale. En effet, le compteur communicant Linky dispose d'une fonction disjoncteur qui lui permet de couper en cas de dĂ©faut de surcharge surconsommation de courant Ă©lectrique, lorsque sa pose sera terminĂ©e, le compteur connaĂźtra l'intensitĂ© maximale correspondant Ă l'abonnement souscrit. Si cette valeur est dĂ©passĂ©e surconsommation alors le compteur pourra couper l'installation, le disjoncteur gĂ©nĂ©ral n'assurera plus la fonction de protection contre les surcharges c'est le compteur Linky qui s'en chargera. DorĂ©navant la fonction limitation du courant liĂ©e Ă l'abonnement, sera assurĂ©e par le compteur d'Ă©nergie Ă©lectrique, c'est une des nouvelles fonction Ă sa charge.âą Raccordement provisoire du module de programmation du compteur Linky. Cette programmation du compteur Linky nĂ©cessitera l'utilisation d'un smartphone en liaison bluetooth au boĂźtier. La programmation du compteur communicant permet d'attribuer les donnĂ©es client identification client, type abonnement, calibre disjoncteur, au coffret du CCPI extĂ©rieur pour remettre sous tension en replaçant le fusible Ă couteau de Phase et le couteau de Neutre. Le technicien repose le couvercle de protection et fixe un plomb anti nouveau devant le compteur Linky, lancement de la procĂ©dure de programmation du compteur Linky Ă l'aide du smartphone en communication Bluetooth avec le boĂźtier de contrĂŽle. Lorsque la configuration du Linky est terminĂ©e, le compteur possĂšde toutes les informations et les donnĂ©es client.âą Mise en place des plombs de sĂ©curitĂ© qui certifie que l'appareil n'a pas Ă©tĂ© ouvert non ouverture du capot si le plomb est prĂ©sent normalement. Le plombage Ă©vite la fraude et l'ouverture de l'appareillage compteur linky et disjoncteur de branchement. Fermeture des plastrons du compteur et du disjoncteur au voisinage de tension. L'installation du nouveau compteur Linky est terminĂ©e elle a durĂ©e environ 30 minutes. Quelles sont les mesures relevĂ©es par le compteur Linky ?Un compteur d'Ă©nergie est un appareil de mesure composĂ©e d'une pince ampĂšremĂ©trique permettant de relever l'intensitĂ© du courant en AmpĂšre et d'un second dispositif permettant de mesurer la tension par l'intermĂ©diaire de deux conducteurs Phase et le ce fait, le compteur Linky est capable de mesurer plusieurs valeurs Ă©lectriques telles que le courant absorbĂ©, la tension en ligne, la puissance instantanĂ©e, la puissance maximale comme pour n'importe quel compteur d'Ă©nergie, la mesure principale relevĂ©e par le compteur Linky est l'Ă©nergie Ă©lectrique exprimĂ©e en kWh. Compteur d'Ă©nergie fournisseur d'Ă©nergie Ă©lectriqueC'est donc grĂące au relevĂ© de l'Ă©nergie Ă©lectrique que le fournisseur d'Ă©nergie Ă©lectrique peut facturer la consommation prĂ©cise de ses clients. Rappelons que le compteur Linky est communicant, il envoie donc au fournisseur la consommation d'Ă©nergie Ă©lectrique exacte du client, et ce, quasiment en temps rĂ©el. Fini donc les estimations de factures tous les 6 mois, les nouvelles factures d'Ă©nergie Ă©lectrique tiendront compte de la consommation au plus part, si votre consommation chute en raison d'un changement de vos habitudes d'utilisation de l'Ă©lectricitĂ©, le fournisseur d'Ă©nergie vous contactera afin d'adapter vos paiements ou prĂ©lĂšvements afin de vous approcher au plus prĂšs de votre consommation rĂ©elle. Dans le cas contraire, si votre consommation augmente, il faudra Ă©galement adapter vos paiements et prĂ©voir de payer un peu plus votre consommation l'ensemble de votre consommation en temps rĂ©el, il est plus facile d'optimiser votre facture d'Ă©nergie et de trouver le fournisseur d'Ă©nergie le moins cher. Comment faire des Ă©conomies sur sa facture d'Ă©nergie ?Il existe plusieurs solutions ou des petits gestes Ă adopter qui vous permettront de faire des Ă©conomies sur votre facture d' les offres des fournisseurs d'Ă©nergie Ă©lectriqueLa premiĂšre astuce pour faire des Ă©conomies sur sa facture Ă©lectrique est de comparer les offres des fournisseurs. Pour cela, il existe de nombreux comparateurs en ligne vous permettant de savoir qui est le moins cher entre EDF et ENGIE et plus gĂ©nĂ©ralement l'ensemble des fournisseurs disponibles dans votre point de vue abonnement Ă©lectrique, une solution, pour optimiser sa facture, est de souscrire Ă l'option Heures Creuses afin de profiter d'un tarif de l'Ă©lectricitĂ© moins chĂšre Ă certaines heures de la journĂ©e 8 heures par jour. En contrepartie, le reste de la journĂ©e le kiloWattheure kWh sera facturĂ© un peu plus cher. A vous d'adapter votre consommation et l'utilisation de vos appareils Ă©lectriques gourmands aux pĂ©riodes ou l'Ă©lectricitĂ© n'est pas petits gestes pour des Ă©conomies sur la facture Ă©lectriquePour rĂ©duire sa consommation d'Ă©lectricitĂ©, il est important de prendre de bonnes habitudes. En effet, ces petits gestes rĂ©pĂ©tĂ©s au quotidien deviendront une habitude et un rĂ©flexe et vous permettront de rĂ©duire votre facture l'habitude d'Ă©teindre vos appareils Ă©lectriques au lieu de les laisser fonctionner en vous quittez une piĂšce, pensez Ă Ă©teindre la les Ă©conomies sur le chauffage, songez Ă rĂ©duire la tempĂ©rature des piĂšces de 1° votre machine Ă laver, le sĂšche-linge, le lave-vaisselle pendant les un contacteur heures creuses pour faire fonctionner le chauffe-eau aux heures ou l'Ă©lectricitĂ© n'est pas chĂšre heures creuses.ProcĂ©der au dĂ©givrage rĂ©gulier de votre rĂ©frigĂ©rateur afin d'Ă©viter que l'Ă©paisseur de glace ne soit trop votre installation pour rĂ©duire votre consommation Ă©lectriqueEnfin, pour rĂ©duire encore votre facture Ă©lectrique, il existe des solutions nĂ©cessitant un certain investissement qui sera rentabilisĂ© sur le long terme par les Ă©conomies d'Ă©nergie vos anciennes lampes Ă incandescence par des lampes LEDs basse un systĂšme domotique permettant d'optimiser le chauffage automatiquement lorsque vous ĂȘtes un contacteur heure / creuse pour le fonctionnement de votre chauffe-eau Ă©lectrique pendant les heures ou l'Ă©lectricitĂ© n'est pas chĂšre heures creuses.Remplacer vos radiateurs d'anciennes gĂ©nĂ©rations par des radiateurs basses consommation A+++.DĂ©couvrez Ă©galement d'autres articles sur le mĂȘme thĂšme . 62 291 104 254 100 78 337 145 compteur internet d octets Ă©mis et reçus
![]()