Skocz do…
Zainspirowany wpisem Michała Górnego postanowiłem napisać coś o transmisji cyfrowej. Wszak wielkości w naturze rzadko kiedy występują w postaci cyfrowej--aby się takiej doszukać należy zejść aż do poziomu cząstek elementarnych i analizowanie spinów i innych niezrozumiałych dla zwykłego człowieka parametrów. Jak więc to się dzieje, że komputer operuje na bitach? Co to w ogóle ta telewizja cyfrowa?
Żeby nie motać za bardzo (i nie udawać, że wiem o czym piszę) ograniczę się na początek do sygnałów przesyłanych przez zwykły kabel miedziany. Prąd w nim płynący ma zasadniczo dwa parametry--natężenie oraz napięcie--które mają wartości ciągłe przeto są wartościami analogowymi. Umówmy się na początek, iż sygnał będziemy kodować za pomocą napięcia i załóżmy jednocześnie, że wszystko jest tak zrobione, iż w kablu naszym występują napięcia od 0 do 5 woltów. Teraz wystarczy jedno proste założenie: Niech wszystko poniżej 1,5 wolta oznacza stan niski, a wszystko powyżej 3,5 woltów oznacza stan wysoki i gotowe!
A co z takim razie z wartościami pomiędzy 1,5 a 3,5 wolta? Są to poziomy niedozwolone i sygnalizujące błąd transmisji. Podejście takie ukazuje w czym tak naprawdę transmisja cyfrowa jest lepsza od analogowej. Otóż, w realnym świecie, jeżeli po jednej stronie kabla nadamy sygnał u(t) to po drugiej stronie odczytamy u'(t) = u(t) + delta(t) gdzie delta(t) to jakieś losowe zakłócenia. W przypadku sygnału analogowego nie mamy żadnej możliwości odfiltrować tych zakłóceń--nie wiadomo wszak czy są to zakłócenia czy prawidłowy sygnał. Przy transmisji cyfrowej możemy, bo wszak, wystarczy, aby nadawca wysyłał stan niski jako pół, a stan wysoki jako 4,5 wolta i wówczas nawet zakłócenia o wartości jednego wolta nie będą w stanie zaburzyć transmisji, a zakłócenia o wartości do 3 woltów będzie można wykryć. To czy stan wysoki oznacza jedynkę, a stan niski zero czy na odwrót jest już kwestią wtórną.
A czy możnaby ustalić więcej niż dwa zakresy? Np. wysoki, niski i średni? Oczywiście można. Wówczas transmisja przebiegałaby szybciej, ale za to byłaby bardziej podatna na zakłócenia.
Dodatkowo sygnał cyfrowy, w przeciwieństwie do analogowego, umożliwia zastosowanie kodów wykrywających błędy. Dość prymitywną metodą, ukazującą jednak sens, jest suma wszystkich słów o zadanej długości modulo jakaś wartość. Bardziej zaawansowaną metodą są kody CRC (dodawane przecież do ramek ethernetowych, IPv4 i TCP) projektowane specjalnie dla tego celu. Aby wykryć błąd w transmisji można również użyć innych funkcji mieszających takich jak np. MD5 (stosowane przy ściąganiu plików; tak jakby ktoś nie wiedział o co biega z tymi plikami CHECKSUM.md5) czy SHA1.
Ponadto, można zastosować kody korekcyjne umożliwiające odtworzenie zakłóconej (do pewnego stopnia przynajmniej) transmisji. Najprostszym przykładem jest wysyłanie każdego bitu trzy razy. Dzięki temu, jeżeli odbiorca odbierze dwa razy jedynkę i raz zero to koryguje taką sytuację przyjmując jako odebraną wartość jedynkę (z tego co mi wiadomo, kodowanie takie jest wykorzystywane w niektórych pamięciach ECC).
O wiele wydajniejszym sposobem jest zastosowanie kodów Hamminga, które dzielą bity sekwencji o konkretnej długości na nachodzące na siebie grupy i do każdej z grup dodają po bit parzystości tak, aby w każdej grupie liczba jedynek była parzysta. Jeżeli jakiś bit zostanie przekłamany bity parzystości dla grup, w których on się znajduje będą miały złą wartość. Sztuczka polega na takim podziale na grupy, aby widząc, w których grupach nastąpił błąd transmisji móc ten błąd poprawić. W zależności od liczby dodanych bitów parzystości kod może być w stanie poprawić różną liczbę błędów, a jeszcze większą liczbę przekłamań wykryć.
No i to chyba tyle. Zupełnie oddzielnym tematem jest przesyłanie sygnałów (czy to analogowych czy cyfrowych) w eterze i jak to się dzieje, że na tym samym terenie może działa jednocześnie wiele stacji radiowych czy telefonicznych i do tego jeszcze możemy rozmawiać przez komórkę stojąc obok kilku access pointów.
W kategoriach:
Słowa kluczowe:
KomentarzeMasz błąd: „XML Parsing Error: mismatched tag. Expected: </p>.
Location: http://mina86.jogger.pl/2008/02/13/transmisja-cyfrowa/
Line Number 67, Column 323:”
Dzięki za info. Muszę w końcu nabrać zwyczaju oglądania wpisu po opublikowaniu…
„Dodatkowo sygnał cyfrowy, w przeciwieństwie do analogowego, umożliwia zastosowanie kodów wykrywających błędy. [...] Innymi sposobami są kody CRC czy nawet MD5.”
może mi się wydaje, ale wychodzi jakbyś traktował MD5 jako EDC/ECC, a on takowym kodem nie jest. Zresztą sam wspominałeś ostatnio o hash-ach.
Gdyż MD5 może być (i jest) stosowany jako EDC (jako ECC raczej nie). Skoro CRC jest to czemu nie MD5? Zarówno różne wersje CRC jak i MD5 to funkcje mieszające i mogą być wykorzystywane do detekcji błędów.
raczej średnio. CRC byl projektowany jako kod wykrywający błędy i ma dość mocne podstawy matematyczne. Właściwości CRC są dokładnie znane, wiadomo jakie rodzaje błędów jest w stanie wykryć a jakie nie, jakie wielomiany dobierać i w jaki sposób stopień wielomianu ma wpływ na możliwości detekcji błędów.
MD5 natomiast jest funkcją hashującą, które opisałeś ogólnie w pierwszym z tej serii artykułów. MD5 jest zaprojektowana by ‘mieszać’ bity i tyle. Za EDC stoi całkiem spora teoria kodów (polecam wykłady Madhu Sudana) MD5 ma się nijak do tej teorii :)
Moim skromnym zdaniem funkcje hashujące a kody wykrywające i korygujące błędy to dwie różne rzeczy i raczej nie należy tych pojęć mieszać.