Kod Morse'a jest trójskładnikowym kodem prefiksu (do kodowania 58 znaków) na górze kodu binarnego przedrostka kodującego trzy symbole.
Po zaakceptowaniu była to znacznie krótsza odpowiedź . Jednak biorąc pod uwagę znaczne nieporozumienia między użytkownikami i na prośbę PO, napisałem tę znacznie dłuższą odpowiedź. Pierwsza sekcja „w pigułce” daje sedno.
Zawartość
W (dużej) pigułce
Pytając „Czy kod Morse'a jest binarny, trójskładnikowy czy kwarantannowy?” nie ma możliwości porównania możliwych odpowiedzi, chyba że ustali się pewne kryteria dla akceptowalnej odpowiedzi. Rzeczywiście, bez odpowiednich kryteriów, można wymyślić wyjaśnienia dla prawie każdego rodzaju struktury. Kryteria, które wybrałem, są następujące:
powinien odzwierciedlać trójpoziomowy opis kodu Morse'a z reprezentacją kropki / myślnika w drugiej warstwie;
powinien w jak największym stopniu pasować do prezentacji i narzędzi matematycznych opracowanych do teoretycznej analizy kodów;
powinno być tak proste, jak to możliwe;
powinno wyraźnie uwidocznić właściwości kodu Morse'a.
Ma to na celu wykluczenie arbitralnego hakowania, które ignoruje podstawowe pojęcia teorii kodu jako naukowo przebadane i które może mieć pewien urok, dając złudzenie systematycznej analizy, choć jest zbyt nieformalnie traktowane, aby mogło być rozstrzygające. Ta strona ma dotyczyć
informatyki , a nie programowania. Powinniśmy wykorzystać minimum ustalonej wiedzy i przyjętych koncepcji, aby odpowiedzieć na pytanie techniczne.
Szybka analiza standardu pokazuje, że wszystkie symbole używane w kodzie Morse'a są ostatecznie kodowane binarnie , ponieważ jest przesyłany jako ciąg jednostek o równej długości, z sygnałem, który może być włączony lub wyłączony dla każdej jednostki. Oznacza to, że wiadomości Morse'a są ostatecznie kodowane logicznym alfabetem .Σ1= { 0 , 1 }
Ale to nic nie mówi o wewnętrznej strukturze kodu. Kodowana informacja to ciąg znaków na alfabecie 58 symboli (zgodnie ze standardem) zawierający 57 znaków i spację. Odpowiada to alfabet
Σ3)= { A , B , … , Z, 0 , 1 , … , 9 ,?,=,…,×,@,[]}, ostatnim symbolem jest przestrzeń.
Jednakże standard określa, że nie jest półproduktem alfabetu
, w oparciu o i i ewentualnie innych symboli. To jest całkiem jasneΣ2)dot
dash
ciągi w należy kodować jako ciągi w Σ ∗ 2 , orazΣ∗3)Σ∗2)
że ciągi w należy kodować jako ciągi w Σ ∗ 1Σ∗2)Σ∗1
Zatem biorąc pod uwagę, że nie ma wyboru dla i Σ 3 , pytanie należy rozumieć jako: „ Jaką liczbę symboli powinniśmy wziąć pod uwagę w alfabecie pośrednim Σ 2, aby jak najlepiej wyjaśnić strukturę i właściwości całego Morse'a kod ”, co pociąga za sobą również określenie dwóch kodowań między trzema poziomami.Σ1Σ3)Σ2)
Biorąc pod uwagę fakt, że kod Morse'a jest prefiksem kodu homomorficznego (o zmiennej długości), który wyklucza jakąkolwiek dwuznaczność podczas dekodowania sygnału, możemy wyjaśnić tę podstawową właściwość za pomocą trójskładnikowego alfabetu
{,,} i dwie schemat kodowania C 3 → 2 od Σ 3
do Σ 2 , a C 2 → 1 od Σ 2 do Σ 1Σ2)=dot
dash
sep
do3 → 2Σ3)Σ2)do2 → 1Σ2)Σ1, które są zarówno homomorficzne, jak i przedrostek, a zatem oba jednoznaczne kody, a zatem można je skomponować w celu uzyskania jednoznacznego kodowania przedrostka 58 symboli na postać binarną.
Stąd Morse'a składa się z potrójnego prefiks kodu wyrażone alfabetu , , } , przy czym te trzy symbole zakodowanych binarnie się z następujących kodowych:{ dot
dash
sep
}
dot
, → 1110 i → 00→ 10dash
→ 1110sep
→ 00
Zwróć uwagę, że to, co jest znane jako odstęp między kolejnymi dot
lub dash
jest faktycznie zawarte w reprezentacji dot
i dash
, ponieważ jest to zwykła matematyczna reprezentacja dla takich typów kodów, które są zwykle definiowane jako homomorfizmy łańcuchowe od symboli źródłowych do słów kodowych wyrażonych symbolami docelowymi, tak jak właśnie to zrobiłem.
Odchodzi to nieco od części prezentacji podanej w standardzie, która ma na celu bardziej intuicyjne określenie kodu dla użytkowników niż analizowanie go pod kątem jego właściwości strukturalnych. Ale w obu przypadkach kodowanie jest takie samo.
Nawet bez dokładnych czasów standardu dekoder sygnału analogowego mógłby nadal przetłumaczyć go na proponowany przez nas alfabet trójskładnikowy, tak aby powyższe rozumienie kodu trójskładnikowego nadal obowiązywało.
Kody: podstawowe punkty
Ta odpowiedź jest oparta na standardzie ITU-R M.1677-1 z października 2009 r. (Podziękowania dla Jason C za odniesienie). Będę używał terminologii dot
i dash
zamiast dit
i dah
, jak to jest terminologia stosowana w niniejszym standardzie.
Zanim zaczniemy omawiać kod Morse'a, musimy uzgodnić, co to jest kod. Trudne dyskusje na ten temat oczywiście tego wymagają.
Zasadniczo informacje muszą być reprezentowane, aby mogły zostać przesłane lub w inny sposób przetworzone. Kod to system służący do tłumaczenia informacji z jednego systemu reprezentacji na inny . To jest bardzo ogólna definicja. Musimy uważać, aby nie pomylić pojęcia reprezentacji i kodu z jednej reprezentacji ( źródła ) do innej ( celu ).
Reprezentacja może przybierać różne formy, takie jak zmienne napięcie elektryczne, kolorowe kropki na papierze, ciąg znaków, cyfry, ciągi binarne zer i jedynek itp. Ważne jest, aby odróżnić reprezentację analogową od formalnej (lub logicznej lub abstrakcyjnej) .
Analogowa / fizyczna reprezentacja jest rysunkiem, zmiennym poziomem napięcia, kształtem (na literę).
Reprezentacja logiczna / formalna / abstrakcyjna to reprezentacja matematyczna z abstrakcyjnymi wykresami, ciągami symboli lub innymi jednostkami matematycznymi.
Chociaż niektóre informacje mogą być pierwotnie analogowe, zwykle konwertujemy je na logiczną reprezentację, aby móc precyzyjnie zdefiniować ich przetwarzanie za pomocą środków matematycznych lub przez ludzi.
I odwrotnie, mamy do czynienia z reprezentacją logiczną za pomocą urządzeń fizycznych, takich jak komputer lub nadajniki, musimy nadać formie analogicznej reprezentacji logicznej.
Do celów tej analizy jedyną formą analogiczną, którą rozważamy, jest forma używana do transmisji, jak opisano w normie. Ale nawet wtedy rozważymy, że pierwszym krokiem jest interpretacja tej analogicznej reprezentacji jako bezpośredniej implementacji identycznej struktury logicznej reprezentacji, na której budujemy naszą analizę tego, jaki kod może być kodem Morse'a. Teoria kodu jest matematycznym zasobem wiedzy opartym na analizie reprezentacji logicznych.
Wrócimy jednak do przejścia analogowo / logicznego w dyskusji na końcu.
Kody: definicje
Nasz logiczny pogląd jest taki, że kod jest używany do przetłumaczenia źródeł dźwięku strun alfabetu źródła do docelowej alfabetu T . Często zdarza się, że oba alfabety są identyczne, zwykle binarne, gdy celem jest dodanie dodatkowej właściwości do reprezentacji informacji, na przykład zwiększenie jej odporności na błędy (wykrywanie i korekcja błędów) lub zmniejszenie reprezentacji poprzez usuwanie nadmiarowości (bezstratna kompresja kodu) i być może przy starannie kontrolowanej utracie niektórych informacji (kompresja stratna).S.T.
Jednak celem kodu Morse'a jest dostarczenie tylko sposobu reprezentacji ciągów na dużym alfabecie, na ciągi oparte na znacznie mniejszym alfabecie (faktycznie binarnym), przy użyciu pośredniego alfabetu prawie binarnego (kropki i myślniki), aby lepiej dostosować się do człowieka percepcja i zdolności manipulacyjne. Osiąga się to przez tak zwany kod o
zmiennej długości :
Używając terminów z formalnej teorii języka, dokładna definicja matematyczna jest następująca: Niech i T będą dwoma zestawami skończonymi, zwanymi odpowiednio alfabetem źródłowym i docelowym. Kod C : S → TS.T.do: S→ T.∗S.T.doS.∗T.∗
do( s ) ∈ T∗s ∈ S
Kod zmiennej długości jest jednoznacznie dekodowalny, jeśli odpowiada homomorfizmowi SdoS.∗T.∗T.∗S.∗
w
Łatwo jest wykazać, że unikalna dekodowalność i właściwość prefiksu są zamknięte w ramach składu kodów.
Zauważ, że definicja homomorfizmu oznacza, że nie ma specjalnego rozdziału między słowami kodowymi. To ich struktura, taka jak właściwość prefiksu, umożliwia jednoznaczną ich identyfikację.
Rzeczywiście, gdyby istniały takie symbole separacji, musiałyby one być częścią docelowego alfabetu, ponieważ byłyby konieczne do odkodowania ciągu z docelowego alfabetu. Wówczas powrót do teoretycznego modelu kodu o zmiennej długości byłby bardzo prosty poprzez dodanie separatora do poprzedniego słowa kodowego. Gdyby to spowodowało trudność kontekstową (na przykład z powodu wielu separatorów), byłaby to tylko wskazówka, że kod jest bardziej złożony niż pozorny. Jest to dobry powód, aby trzymać się modelu teoretycznego opisanego powyżej.
Kod Morse'a
Kod Morse'a jest opisany w standardzie na trzech poziomach:
3) ma na celu zapewnienie kodowania tekstu w języku naturalnym, przy użyciu 57 znaków (27 liter, 10 cyfr, 20 znaków synchronicznych i interpunkcji) oraz spacji między słowami do cięcia łańcucha znaków na słowa. Przestrzeń między słowami jest używana jako znak specjalny, który można mieszać z innymi, co zauważę SEP
.
2) wszystkie te znaki należy zakodować jako ciągi znaków dash
i dot
, korzystając z odstępu między literami, co zauważę sep
, aby oddzielić dash
i dot
jedną literę od znaków z następnej litery.
1. dash
I dot
, a także sep
muszą być kodowany jako sygnał lub nieobecności sygnału (zwanego odstępy) o długości dokładnie zdefiniowane w takiej lub innej przyjętej urządzenia. W szczególności, dash
i dot
kodowanie litery musi być oddzielone spacją między elementami, co zauważę σ
.
To już wymaga kilku wniosków.
Komunikat do przesłania i odebrania w formie analogowej to ciąg jednostek długości (długość przestrzeni lub długość czasu), tak że sygnał jest włączony lub wyłączony na cały czas trwania każdej jednostki, jak określono w załączniku 1 część I sekcja 2 normy :
2 Spacing and length of the signals
2.1 A dash is equal to three dots.
2.2 The space between the signals forming the same letter is equal to one dot.
2.3 The space between two letters is equal to three dots.
2.4 The space between two words is equal to seven dots.
Jest to wyraźnie kodowanie analogowego, co znane jest jako strumień bitów, które mogą być logicznie reprezentowane w notacji binarnej przez ciąg 0
ans 1
, stojąc na analogu off i on .
Aby wyeliminować problemy związane z reprezentacją analogową, możemy zatem uznać, że komunikaty kodu Morse'a są przesyłane jako ciągi bitów, które należy odnotować za pomocą 0
i 1
.
Dlatego powyższy fragment normy można wyrazić logicznie jako:
- 0. A
dot
jest reprezentowany przez 1
.
- 1. A
dash
jest reprezentowany przez 111
.
- 2) Przestrzeń między elementami
σ
jest reprezentowana przez 0
.
- 3) Przestrzeń między literami
sep
jest reprezentowana przez 000
.
- 4 Przestrzeń między słowami
SEP
jest reprezentowana przez 0000000
.
Więc widzieliśmy, że kod Morse'a używa 5 słów kodowych w systemie binarnym do kodowania tych 5 symboli. Z wyjątkiem faktu, że nie jest to tak opisany system, jest w nim coś więcej i nie jest to najwygodniejszy sposób, w jaki można go myśleć, z naiwnego lub matematycznego punktu widzenia.
Zauważ też, że ten opis jest przeznaczony dla laików, a nie specjalistów teorii kodu. Z tego powodu opisuje bardziej widoczny wygląd niż uzasadniająca go struktura wewnętrzna. Nie ma powodu, aby wykluczać inne opisy, które są z nim zgodne, choć bardziej matematycznie bardziej uporządkowane, aby podkreślić właściwości kodu.
Najpierw jednak należy zauważyć, że pełny opis kodu obejmuje 3 poziomy reprezentacji, które są natychmiast rozpoznawalne:
- 3) Tekst złożony z ciągu znaków, w tym
SEP
.
- 2) Kodowanie ciągu literowego jako ciągu
dot
,dash
a sep
.
- 1. Kodowanie ciągu 2 poziomu tych trzech
symbols
znaków jako ciągu binarnego.
Być może możemy dyskutować o tym, jakie symbole są zakodowane w czym, ale zasadniczym aspektem kodu Morse'a jest to, że ma on te trzy poziomy reprezentacji, ze znakami na górze, dot
si dash
es na środku, a bitami 0
i 1
na dole .
Oznacza to, że muszą istnieć dwa kody, jeden z poziomu 3 na poziom 2, a drugi z poziomu 2 na poziom 1.
Analiza trzech poziomów reprezentacji
Aby uzyskać spójną analizę tego 3-poziomowego systemu kodowania, powinniśmy najpierw przeanalizować, jakie informacje są istotne na każdym poziomie.
1. Łańcuch bitowy, z definicji i z konieczności jego analogowej reprezentacji, składa się tylko z 0
i 1
.
3) Na poziomie tekstu potrzebujemy 58 znaków alfabetu, w tym 57 znaków i odstęp między wyrazami SEP
. Wszystkie 58 z nich musi mieć ostatecznie kodowanie binarne. Ale chociaż standard kodu Morse'a określa te 57 + 1 znaków, nie określa, w jaki sposób należy ich używać do kodowania informacji. Taka jest rola języka angielskiego i innych języków naturalnych. Kod Morse'a zapewnia inny system z alfabetem 58 symboli, na których mogliby zbudować jakiś 58-arytyczny kod, ale sam kod Morse'a nie jest kodem 58-arytowym.
2) Na dot
i dash
poziomie, wszystko czego potrzebujemy, to te dwa symbole w celu kodzie 57 znaków, czyli dostarczenie słowa kodowego dla każdego jako ciąg dot
i dash
wraz z jakimś separatorem sep
aby oznaczyć gdy jedna litera wykończone, a innego początku. Potrzebujemy również pewnych sposobów kodowania przestrzeni między słowami SEP
. Możemy spróbować udostępnić go bezpośrednio na poziomie 1, ale zepsułoby to organizację kodu o innej strukturze.
Rzeczywiście, opis normy można słusznie skrytykować za właśnie to. Ale autorzy mogli pomyśleć, że ich prezentacja byłaby łatwiejsza do zrozumienia dla przeciętnego użytkownika. Jest także zgodny z tradycyjnym opisem kodu Morse'a, który poprzedza tego rodzaju analizę matematyczną.
Wymaga to kilku uwag:
na poziomie 3, poziom liter, przestrzeń między literami sep
nie ma już znaczenia. Jest to całkiem normalne, ponieważ nie ma większego znaczenia we wszechświecie liter niż przestrzeń oddzielająca dwa zapisane znaki na papierze. Na poziomie 2 konieczne jest rozpoznawanie słów kodowych reprezentujących litery, ale to wszystko.
podobnie na poziomie 2 przestrzeń między elementami σ
nie ma już znaczenia. To nie ma żadnego znaczenia w świecie dot
i dash
, ale jest to konieczne tylko na poziomie 1 do identyfikacji kodu binarnego słowa reprezentujące dot
, dash
. Ale na poziomie 1 nie można go odróżnić od bitu 0
.
Więc przestrzeń między elementami σ
nie jest już niczym specjalnym. To tylko jedno użycie 0
.
Σ∗2)→ Σ∗1
dot
→10
dash
→1110
Σ2)sep
000
0
dot
dash
00
sep
0
dot
dash
0
Σ2)=dot
dash
sep
do2 → 1: Σ2)→ Σ∗1
dot
→10
dash
→1110
sep
→00
A my mamy wielką niespodziankę, gdy odkrywamy, że żadne słowo kodowe nie jest przedrostkiem innego. Dlatego mamy kod prefiksu, który jest jednoznaczny i łatwy do odkodowania.
do3 → 2: Σ3)→ Σ∗2) .
dot
dash
Σ3)dot
dot
dash
dot
fa .
fa→ dot
dot
dash
dot
sep
Σ3)SEP
0000000
0
sep
0
dot
dash
SEP
0000
.
SEP
Σ∗2)sep
00
SEP
sep
sep
.
Σ3)= { A , B , … , Z, 0 , 1 , ... , 9 , ? , = , … , × , @ , SEP
}do3 → 2: Σ3)→ Σ∗2)
do3 → 2
doM.o r s e= C2 → 1∘ C.3)→ 2
Można więc stwierdzić, że Morse'a może być rozumiany i łatwo analizowane jak skład prefiks binarnego kodowania symboli z alfabetu {3 dot
, dash
,sep
} na alfabet binarnej, a przedrostek zakodowanie 58 symbol alfabetu (57 znaków i jedna spacja) na 3-literowy alfabet.
Sama kompozycja jest kodowaniem przedrostka 58 symboli w reprezentacji binarnej.
Uwagi na temat tej analizy.
Zawsze trudno jest ustalić, że prezentacja struktury jest najlepsza z możliwych. Wydaje się jednak, że powyższa analiza spełnia kryteria określone na początku tej odpowiedzi: bliskość 3-warstwowej definicji, formalnie zaprezentowanej zgodnie z aktualną teorią kodowania, prostota i udokumentowanie głównych właściwości kodu.
Zauważ, że nie ma sensu szukać właściwości korekcji błędów. Kod Morse'a może nawet nie wykryć błędu jednego bitu, ponieważ może po prostu zmienić dwa dot
w jeden dash
. Powoduje to jednak tylko błędy lokalne.
Jeśli chodzi o kompresję, kodowanie trójskładnikowe zostało zaprojektowane w taki sposób, aby w przybliżeniu zmniejszyć liczbę kropek i kresek, w przybliżonym rodzaju kodowania Huffmana . Ale dwa skomponowane kody można łatwo zagęścić.
Jeśli chodzi o rozmiar alfabetu, nie ma wyboru dla alfabetu binarnego i 58 symboli. Alfabet pośredni może zawierać więcej symboli, ale jaki byłby cel?
Jednak niektórzy ludzie byliby skłonni rozpoznać przestrzeń DET
na poziomie 2, dzięki czemu alfabet byłby czwartorzędowy , a następnie go bezpośrednio na poziomie 3, zakodowany jako sam na poziomie 2.
DET
0000
do2 → 1doM.o r s e
Rzeczywiście, taki wybór spowodowałby, że ciąg binarny byłby 0000
niejednoznaczny, dekodowalny jako jeden SEP
lub drugi sep
sep
. Niejasność musiałaby zostać rozwiązana za pomocą reguły kontekstowej, która sep
nie może nadążać za sobą, co czyni formalizację bardziej złożoną.
Znaczenie przejścia analogowego na logiczne.
Analiza ta opiera się w dużej mierze na tym, że rozkład sygnału włączania / wyłączania na jednostki o jednakowej długości wyraźnie wskazuje na analogową reprezentację ciągu binarnego. Ponadto długości w jednostkach są dokładnie odpowiednie dla powyższej analizy, co wydaje się mało prawdopodobne, aby stało się to przez przypadek (choć jest to możliwe).
Jednak z (zbyt pobieżnego) spojrzenia na oryginalny patent 1647 nie wydaje się on być tak precyzyjny, z takimi zdaniami, jak (na górze strony 2):
Znak wyraźnej cyfry lub cyfry złożonej, gdy jest używany w zdaniu słów lub cyfr, składa się z odległości lub odstępu między znakami w większym stopniu niż odległość użyta do oddzielenia znaków, które składają się na takie wyraźne lub cyfra złożona.
Osoby, które później wysyłały ręcznie lub odbierały ze słuchu, również nie powinny być tak precyzyjne. Rzeczywiście, ich pięść , tj. Czas, była często rozpoznawalna. Ten pogląd jest również wspierany przez fakt, że długości odstępów nie zawsze są przestrzegane , szczególnie podczas nauki kodu Morse'a.
Sytuacje te odpowiadają analogicznemu widokowi kodu jako krótki sygnał (kropka), średni sygnał (kreska) oraz krótka, średnia i długa przerwa. Bezpośrednia transpozycja do logicznego alfabetu w naturalny sposób dałaby alfabet kwadratowy , w który należy zakodować 58 symboli. To oczywiście nie jest już trzypoziomowa prezentacja kodu Morse'a.
Aby jednak mieć sens (i być może uniknąć dwuznaczności), należy używać tego alfabetu z zastrzeżeniem, że dwa symbole sygnału ( dot
lub dash
) nie mogą podążać za sobą, a symbole pauzy nie mogą podążać za sobą. Analiza kodu i jego właściwości byłaby bardziej złożona, a naturalnym sposobem uproszczenia byłoby zrobienie tego, co zostało zrobione: wprowadzenie odpowiednich czasów, aby przekształcić go w skład dwóch kodów, co prowadzi do dość prostej analizy podanej powyżej ( pamiętaj, że obejmuje to pokazanie kodu jest prefiksem).
Ponadto nie jest absolutnie konieczne przestrzeganie dokładnych czasów w reprezentacji analogowej. Ponieważ dekoder tłumaczenia analogowego może rozróżniać krótkie, średnie i długie przerwy, w jakikolwiek sposób, powinien po prostu naśladować to, co zostało zrobione w przypadku binarnym. Dlatego krótki i średni sygnał (koniecznie po nim przerwa) są rozpoznawane jako logiczne dot
lub dash
. Krótkie przerwy są zapomniane, ponieważ służą jedynie do oznaczenia końca dot
lub dash
. Średnie przerwy są rozpoznawane jako sep
, a długie przerwy są rozpoznawane jako dwie sep
kolejno po sobie. Stąd sygnał analogowy jest reprezentowany w trójskładnikowym alfabecie, którego można użyć jak poprzednio do kodowania alfabetu 58 symboli. Z naszej wstępnej analizy można korzystać nawet wtedy, gdy terminy nie są ściśle przestrzegane.
Alternatywnie, alternatywę pauzy sygnałowej można zastosować do przekształcenia tego alfabetu kwantowego w trójkowy, zachowując tylko trzy czasy trwania jako symbole alfabetu i stosując analizę kontekstową w celu ustalenia, czy dany czas trwania jest sygnałem czy pauzą. Ale jest to znów trochę skomplikowane do analizy.
To po prostu pokazuje, że istnieje wiele sposobów patrzenia na rzeczy, ale niekoniecznie są one wygodne i mogą nie być łatwe do analizy za pomocą narzędzi matematycznych opracowanych do analizy kodów.
Więcej odniesień do patentów można znaleźć w Internecie.
Wniosek
Biorąc pod uwagę dokładne czasy standardu, dobrą odpowiedzią wydaje się być rozważenie kodu Morse'a jako kompozycji trójskładnikowego kodowania prefiksu (58 znaków) na alfabet 3 symboli, złożony z binarnego prefiksu kodowania tych trzech symboli.
Bez dokładnego określenia czasu standardu nie można już uwzględniać poziomu binarnego. Następnie dekodowanie analogowo-logiczne odbywa się naturalnie na poziomie pośredniego alfabetu dot
i
dash
. Jednak dekoder analogowo-logiczny może nadal dekodować do poprzednich 3 symboli alfabetu, zachowując w ten sposób przydatność naszej analizy.