Codarea Manchester [ 1 ____]3[bipulsabsolutcodul,]2[II-Manchestercodul,] suport de informații .
Semnalul codificat de codul Manchester se autosincronizează, adică nu este necesară o linie suplimentară de transmisie a ceasului pentru transmiterea datelor , din cauza faptului că în timpul transmiterii unui bit de date, indiferent dacă este 1 sau 0, un este asigurată trecerea de la un nivel la altul, ceea ce permite receptorului să-și sincronizeze ceasul sau cronometrul intern cu ceasul emițătorului.
Un semnal codificat în conformitate cu codul Manchester nu are o componentă constantă nici în cazul transmiterii unor secvențe lungi de zerouri și unu, prin urmare conexiunile electrice care transmit semnalul pot fi izolate galvanic , de exemplu, folosind un transformator [5] .
Numele codificării vine de la Universitatea din Manchester , unde o astfel de codificare a fost folosită pentru prima dată pentru a stoca date pe tamburul magnetic al computerului Manchester Mark I .
Există diferite convenții pentru codificarea biților individuali în codul Manchester:
Nivel ceas _ |
Bit de date |
Nivel de cod IEEE 802.3 Manchester [6] |
Nivelul codului
Thomas Manchester |
---|---|---|---|
0 | 0 | 0 | unu |
unu | unu | 0 | |
unu | 0 | unu | 0 |
unu | 0 | unu
|
Codificarea codului Manchester este relativ simplă - se realizează prin operația logică " EXCLUSIVE OR " (adăugare modulo doi, XOR ) peste bitul codificat curent și pe bitul generator de ceas, în cazul codificării conform IEEE 802.3 (exemple în pseudocod ):
Ieșire := Data_bit XOR Clock_generator ;sau cu inversare la codificare conform lui Thomas:
Ieșire := NOT (Data_bit XOR Clock_generator );Poate atât implementarea hardware cât și software a codificatorului.
În implementarea hardware, se utilizează un generator de ceas cu un ciclu de lucru de 2 și o perioadă de repetiție egală cu perioada de codare, registrul de deplasare din care bitul de date codificat și elementul logic SAU EXCLUSIV sunt împins la fiecare perioadă .
Când este implementat în software, un generator de ceas virtual este creat folosind un temporizator software cu o durată de expunere egală cu jumătate din perioada:
DACĂ timer_half_period a fost declanșat, atunci reporniți temporizatorul; Clock_generator := Clock_generator XOR 1 ; END IF ;Este posibil și preferabil să se implementeze un generator de ceas folosind întreruperi de cronometru hardware.
Mai mult, pentru a forma codul final de ieșire, se efectuează o operație SAU EXCLUSIVĂ cu un bit de date, de exemplu, avansat din registrul în care se află cuvântul codificat curent.
Există două opțiuni pentru decodare:
În plus, toate nivelurile și fronturile sunt descrise în raport cu convenția de codare IEEE 802.3, cu acordul conform G. E. Thomas, toate nivelurile și fronturile sunt înlocuite cu unele inverse.
Cu o perioadă de codificare cunoscutăÎn primul caz, la decodare, se realizează mai întâi sincronizarea biților - se determină mijlocul perioadei. Pentru a face acest lucru, decodorul monitorizează creșterile și scăderile semnalului, două picături adiacente de direcții diferite, separate de 1 punct, sunt un semn că merge secvențial 0 și 1 sau 1 și 0 în fluxul de date, iar dacă primul dintre aceste picături sunt în creștere (în față), iar a doua este în scădere (scădere), atunci aceasta înseamnă că în fluxul de date este o combinație de doi biți 1 și 0 sau 0, 1 în cazul unei margini de scădere, de asemenea, a doua dintre aceste muchii indică mijlocul perioadei de codificare. O combinație a acestor doi biți este scrisă în fluxul de biți de date decodificate. Apoi, decodorul așteaptă un timp aproximativ egal cu 3/4 din perioadă și începe să monitorizeze apariția unei căderi, când apare o picătură, dacă este o picătură, aceasta înseamnă că următorul bit de date este 0 și 1 este in fata. În același timp, cronometrul de expunere pentru 3/4 din perioadă este repornit folosind același diferențial, iar apoi procesul se repetă.
Începutul verificării sosirii căderii după 3/4 din perioadă a fost ales din motive de imunitate la zgomot, de exemplu, ca urmare a jitterului și/sau a extinderii (alungirii) picăturilor, a zgomotului aditiv în liniile de transmisie, momentele de apariție a picăturilor fluctuează în raport cu cazul idealizat, pe de altă parte, cu biți identici învecinați în fluxul de date, muchii apar la limita dintre două perioade de transmisie a acelorași biți, iar verificarea apariției a marginii trebuie făcută după momentele limitelor ceasurilor.
De asemenea, la sosirea fiecărei tranziții informaționale, este posibil să se măsoare durata perioadei cu un cronometru auxiliar și să ajusteze, dacă este necesar, durata expunerii cronometrului la 3/4 din perioadă. Acest lucru vă permite să urmăriți modificări lente în perioada codificatorului, de exemplu, fluctuațiile vitezei de avans ale benzii magnetice atunci când citiți de pe unități de bandă magnetică sau viteze diferite ale unui card cu bandă magnetică de către o mână umană.
Pentru a facilita sincronizarea biților, blocurile de date din codul Manchester, în special atunci când sunt stocate pe medii magnetice, sunt de obicei precedate de o secvență de sincronizare destul de lungă 1010101 ...
Determinarea începutului unui bloc de informațiiRealizarea sincronizării biților nu este suficientă pentru a primi un flux de biți de informații, deoarece, în multe cazuri, începutul unui bloc de informații într-un flux de biți care nu se distinge nu este cunoscut, de exemplu, atunci când se citesc date de pe o unitate de disc magnetică. Prin urmare, se aplică suplimentar sincronizarea cuvântului de sincronizare.
Codificatorul, atunci când codifică la începutul blocului de informații, inserează un cuvânt de sincronizare binar sau o semnătură de sincronizare , care trebuie să fie cunoscută de decodor. Pentru a începe sincronizarea blocurilor, decodorul compară în mod constant succesiunea de biți din registrul de deplasare după fiecare deplasare, lungimea acestui registru este egală cu lungimea semnăturii, în care este inserat următorul bit la fiecare perioadă, cu sincronizarea dată. cuvânt. Potrivirea cuvântului din registrul de deplasare și semnătura sau inversarea acesteia este un semn al începutului blocului de informații, iar apoi decodorul interpretează fluxul de biți ca fiind informațional. Lungimea cuvântului de sincronizare în diferite sisteme este diferită, dar de obicei cel puțin 2 octeți, în protocolul Ethernet , de exemplu, lungimea semnăturii este considerată a fi de 56 de biți.
Cuvântul de sincronizare nu trebuie să apară în fluxul de informații, sau cel puțin probabilitatea unei astfel de apariții trebuie să fie neglijabilă. Cu cât semnătura este mai lungă, cu atât este mai puțin probabil să existe în fluxul de informații. Pe de altă parte, semnătura nu conține informații utile și o semnătură lungă reduce rata de transfer a informațiilor. Dacă semnătura este scurtă, atunci fluxul de informații înainte de codificare este verificat pentru prezența aleatorie a unei secvențe de biți care se potrivește cu semnătura și, dacă este necesar, blocul de informații este recodat pentru a exclude semnătura sau după ce se ajunge la sincronizare la începutul blocul de date, decodorul ignoră orice semnătură din blocul de date până la sfârșitul primirii întregului bloc.
Se folosește și o variantă de sincronizare a blocului de informații cu ajutorul duratelor de niveluri scăzute și ridicate (0 și 1), care sunt evident imposibile în codul Manchester. În codul „corect”, această durată nu poate fi mai mare de o perioadă; dacă, de exemplu, două perioade de nivel scăzut și două perioade de nivel înalt sunt introduse la începutul blocului, atunci un astfel de eveniment nu introduce o componentă constantă. în semnal și indică începutul blocului de informații. Conform GOST 52070-2003, blocul este sincronizat în 3 perioade - primele 1,5 perioade de pe linie sunt menținute ridicate, iar restul de 1,5 perioade - scăzute. Sunt posibile și alte opțiuni de sincronizare, de exemplu, printr-un semnal de-a lungul liniei de resetare etc.
În multe cazuri, nu se știe dinainte de câte ori semnalul codificat primit a fost inversat logic în timpul transmisiei, de exemplu, în rețelele Ethernet, semnalul codificat poate trece prin numeroase noduri cu echipamente de la diferiți producători care pot fi înlocuite la orice timp, sau în cazul citirii acelorași benzi de date magnetice pe diferite modele de unități de bandă. Prin urmare, atunci când se sincronizează începutul unui bloc de date printr-o semnătură, este aproape întotdeauna verificată coincidența fluxului de date cu semnătura și inversarea acestuia pe biți. Dacă este găsită o semnătură inversată, atunci toți biții de date primiți ulterioare sunt inversați și lăsați neschimbați dacă este găsită o semnătură neinversată. Rezultă că, cu o astfel de sincronizare, nu este fundamental în funcție de ce acord a fost făcută inițial codificarea - conform Thomas sau conform IEEE 802.3.
Cu o perioadă de codare a priori necunoscută, decodorul măsoară inițial această perioadă prin măsurarea timpului dintre muchiile adiacente. Deoarece punctele de margine ale semnalelor reale fluctuează în timp din cauza jitterului, zgomotului, întârzierilor software neregulate în codificatorul software etc., nu este suficient să măsurați doar câteva perechi de margini adiacente. Prin urmare, atunci când se măsoară o perioadă și o jumătate de perioadă pe un flux de date, unele statistici sunt de obicei acumulate .
Într-un cod corect cu nu prea mult jitter , histograma de măsurare va consta din două grupuri de eșantioane (Figura 4), iar cu cât fluctuația este mai mică, cu atât grupurile de pe histogramă sunt mai înguste. Primul grup corespunde duratei de 1/2 din perioada, al doilea - întregii perioade. În funcție de rezultatele prelucrării statistice a histogramei primite, se determină perioada și valoarea acesteia este setată la generatorul de ceas intern al decodorului sau temporizatorul său de interval.
Calculul estimării perioadei pe baza rezultatelor măsurătorilor perioadelor și, dacă este necesar, a jumătate din perioadă se realizează folosind formula mediei aritmetice ponderate .
unde este numărul de intervale de timp ale mostrelor de intervale de histogramă (buzunare), - lățimea intervalului, este numărul total de probe este numărul de probe din intervalul al-lea.și sunt aleși astfel încât, de exemplu, conform cifrei ms și ms.
Folosind o metodă similară, se determină valoarea a jumătate din perioada mediată pe populația statistică
După determinarea perioadei, decodificarea ulterioară nu diferă de decodificarea descrisă mai sus cu o perioadă predeterminată.
În primele computere de uz casnic, de exemplu, Sinclair ZX80 , " Elektronika BK-0010 ", ZX Spectrum , casetofonele de uz casnic au fost folosite ca unitate externă. În aceste calculatoare, codificarea și decodificarea codului Manchester în timpul schimbului cu magnetofonul a fost efectuată programatic.
În sistemele moderne, codarea și decodificarea software-ului sunt rareori utilizate, iar aceste funcții sunt atribuite microcircuitelor sau blocurilor funcționale specializate ca parte a altor microcircuite, de exemplu, în microcontrolere , microprocesoare .
Există o serie de cipuri specializate pentru codificarea și decodarea codului Manchester, de exemplu:
Deoarece există două modificări ale nivelului semnalului pentru fiecare bit de date, acest lucru duce la faptul că spectrul codului Manchester ocupă de două ori lățimea de bandă în comparație, de exemplu, cu codul NZR ( Non-zero return , tranziție fără a reveni la zero).
O comparație a spectrelor codului Manchester și NZR este prezentată în figură. Deoarece codul Manchester nu are o componentă constantă (în cazul codificării sale prin niveluri de polaritate diferită egale în valoare absolută), densitatea spectrală de putere a codului Manchester este egală cu zero la frecvența zero, spre deosebire de codul NZR, care are întotdeauna o componentă constantă la orice nivel și spectrul său are o putere spectrală finită la frecvență zero.
Puterea spectrală maximă a codificării Manchester cade pe o frecvență egală cu frecvența ratei de biți .
Codarea Manchester poate fi considerată un caz special de codificare binară cu deplasare de fază (PSK) în care datele controlează faza unei unde pătrate a unui purtător a cărui frecvență este rata de biți.
Prezența a două tranziții garantate în timpul transmisiei de 1 bit permite semnalului să se autosincronizeze , ceea ce permite receptorului (decodorului) să se adapteze corect la rata de transmisie. Pentru transmisie, nu este necesară nicio linie suplimentară pentru a transmite semnalul de ceas. De asemenea, biții de pornire și oprire nu trebuie să fie inserați în fluxul de biți de date, ca, de exemplu, în protocoalele RS-232 și RS-485, datorită cărora densitatea datelor în fluxul total de biți de cod se apropie de 100% ( de exemplu, pentru codul NRZ 1-8 -0 este egal cu 80%).
Fără DCIndiferent de fluxul de biți particular, un semnal de codificare Manchester nu conține o componentă DC dacă valorile nivelurilor superioare și inferioare sunt egale în valoare absolută. Acest lucru facilitează construirea unei izolații galvanice folosind un transformator [5] și citire-scriere pe medii magnetice.
Transmiterea codului Manchester necesită o lățime de bandă dublă (lățimea canalului) comparativ cu, de exemplu, codificarea NRZ .
cerințe de jitterAplică cerințe mari asupra stabilității fronturilor în timp - jitter scăzut. Există și alte metode de codare, de exemplu, codul 8B/10B are o lățime de bandă mai îngustă, dar este mai solicitant în ceea ce privește reducerea jitterului.
Se aplică codarea Manchester: