Код Морзе - це потрійний код префікса (для кодування 58 символів) зверху префікса двійкового коду, що кодує три символи.
Це було набагато коротшою відповіддю, коли її прийняли. Однак, враховуючи значні непорозуміння між користувачами та після запиту від ОП, я написав цю набагато довшу відповідь. Перший розділ "горішкової оболонки" дає вам суть цього.
Зміст
У (великій) словах
На запитання "Чи код Морзе двійковий, потрійний чи квірний?" порівняння можливих відповідей не існує, якщо не встановити певні критерії прийнятної відповіді. Дійсно, без належних критеріїв можна пояснити майже будь-яку структуру. Я вибрав такі критерії:
він повинен відображати трирівневий опис коду Морзе з поданням крапка / тире у другому ярусі;
він повинен максимально відповідати презентаційним та математичним інструментам, розробленим для теоретичного аналізу кодів;
він повинен бути максимально простим;
він повинен чітко виявляти властивості коду Морзе.
Це покликане унеможливити довільне хакерство, яке ігнорує основні поняття теорії коду, як науково вивчені, і які можуть мати деяку привабливість, надаючи ілюзію систематичного аналізу, хоча і надто неофіційне, щоб бути остаточним. Цей сайт повинен говорити про
інформатику , а не про програмування. Ми повинні використовувати мінімум усталених наукових та прийнятих концепцій, щоб відповісти на технічне питання.
Швидкий аналіз стандарту показує, що всі символи, які використовуються в коді Морзе, в кінцевому рахунку кодуються у двійковій формі, оскільки він передається у вигляді рядка одиниць однакової довжини, а це сигнал, який може бути включений або вимкнений для кожної одиниці. Це вказує на те, що повідомлення Морзе, в кінцевому рахунку закодовані в логічному алфавіті .Σ1= { 0 , 1 }
Але це нічого не говорить про внутрішню структуру коду. Інформація для кодування - це рядок на алфавіті з 58 символів (згідно стандарту), що включає 57 символів та пробіл. Це відповідає алфавіту
, останній симбл - пробіл.Σ3= { A , B , … , Z, 0 , 1 , ... , 9 , ? , = , … , × , @ , [] }
Тим НЕ менше, стандарт визначає , що існує проміжний алфавіт
, на основі і та , можливо , інших символів. Це цілком зрозумілоΣ2dot
dash
що рядки в повинні бути кодовані як рядки в , і Σ ∗ 2Σ∗3Σ∗2
що рядки в повинні бути закодовані як рядки в Σ ∗ 1Σ∗2Σ∗1
Отже, враховуючи, що для та вибору немає , питання слід розуміти так: " Яку кількість символів слід врахувати в проміжному алфавіті , щоб найкраще пояснити структуру та властивості всього Морзе код ", що також тягне за собою вказівку двох кодувань між трьома рівнями.Σ 3 Σ 2Σ1Σ3Σ2
З огляду на той факт , що код Морзе є префіксом гомоморфна (змінної довжини) код , який виключає будь-яку неоднозначність при декодуванні сигналу, ми можемо пояснити , просто це істотне властивість з троичной алфавіту
{ , , }, і дві схеми кодування від
до , і від до , які є одночасно гомоморфними та префіксами, таким чином, обидва однозначні коди, і таким чином можна скласти, щоб дати однозначний префікс кодування 58 символів у двійкові.C 3 → 2 Σ 3 Σ 2 C 2 → 1 Σ 2 Σ 1Σ2=dot
dash
sep
С3 → 2Σ3Σ2С2 → 1Σ2Σ1
Отже , код Морзе складається з префікса троичного коду , вираженої в алфавіті , , , з цими трьома символами самі закодовані в двійковій системі з наступними кодовими словами:}{ dot
dash
sep
}
dot
→ 1110 → 00→ 10 , іdash
→ 1110sep
→ 00
Зауважимо, що те, що відоме як простір між послідовними dot
або dash
насправді включене в представлення, dot
і dash
, оскільки це звичайне математичне подання для таких типів кодів, які зазвичай визначаються як рядкові гомоморфізми від вихідних символів до кодових слів, виражених цільовими символами, як я щойно робив.
Це трохи відхиляється від деякої презентації, наведеної в стандарті, яка спрямована більше на інтуїтивне визначення коду для користувачів, а не на аналіз його структурних властивостей. Але кодування в обох випадках однакове.
Навіть без точних синхронізувань стандарту, декодер аналогового сигналу все-таки може перевести його в запропонований нами потрійний алфавіт, щоб вищезгадане розуміння потрійного коду все-таки було б справедливим.
Коди: основні бали
Ця відповідь ґрунтується на Стандарті МСЕ-R M.1677-1 від жовтня 2009 р. (Завдяки довіднику Джейсону С). Я буду використовувати термінологію dot
і dash
, а не dit
та dah
, як це термінологія , яка використовується в цьому стандарті.
Перш ніж ми розпочнемо обговорення коду Морзе, нам потрібно узгодити, що таке код. Складні дискусії з цього питання, очевидно, вимагають цього.
По суті, інформацію потрібно представляти для того, щоб її можна було передати чи іншим чином обробити. Код - це система для перекладу інформації з однієї системи представлення в іншу . Це дуже загальне визначення. Ми повинні бути обережними, щоб не переплутати поняття представлення та поняття коду з одного представлення ( джерело ) в інше ( ціль ).
Представлення може приймати різні форми, такі як змінна електрична напруга, кольорові крапки на папері, рядки символів, цифри, двійкові рядки від 0 до 1 та ін. Важливо розрізняти аналогове та формальне (або логічне, або абстрактне) подання .
Аналогове / фізичне зображення - це малюнок, різний рівень напруги, форма (для літери).
Логічне / формальне / абстрактне подання - це математичне подання з абстрактними графіками, рядками символів або іншими математичними утвореннями.
Хоча деяка інформація спочатку може бути аналогом, ми зазвичай перетворюємо її на логічне подання, щоб мати можливість точно визначити її обробку математичними засобами або людьми.
І навпаки, ми маємо справу з логічним поданням за допомогою фізичних пристроїв, таких як комп'ютер або передавачі, нам необхідно надати аналогічну форму логічному поданню.
Для цього аналізу ми розглядаємо єдину аналогову форму, яка використовується для передачі, як описано в стандарті. Але вже тоді ми вважатимемо, що перший крок - інтерпретувати це аналогове подання як безпосередню реалізацію ідентично структурованого логічного подання, на основі якого ми будуємо наш аналіз того, який тип коду може бути Морзе. Теорія коду - це математичний масив знань, заснований на аналізі логічних уявлень.
Однак ми повернемося до аналогово-логічного переходу в дискусії наприкінці.
Коди: визначення
Наше логічне уявлення, що код використовується для перекладу рядків Sources на джерело алфавіт в цільової алфавіті . Часто буває так, що обидва алфавіту однакові, як правило, двійкові, коли мета полягає в тому, щоб додати деяку додаткову властивість до представлення інформації, наприклад зробити її більш стійкою до помилок (виявлення та виправлення помилок) або зменшити подання на видалення надмірності (стиснення коду без втрат) і, можливо, ретельно контрольована втрата певної інформації (стиснення втрат).TSТ
Однак мета коду Морзе полягає в тому, щоб запропонувати лише спосіб представлення рядків на великому алфавіті в рядки, засновані на значно меншому алфавіті (насправді двійковому), використовуючи проміжний алфавіт, майже двійковий (крапки та тире), щоб краще адаптуватися до людини сприйняття та маніпулятивні здібності. Це досягається тим, що називається
кодом змінної довжини :
Використовуючи терміни з формальної теорії мови, точне математичне визначення таке: Нехай і це два кінцеві множини, що називаються відповідно вихідними та цільовими алфавітами. Код - це загальна функція, що відображає кожен символ від до послідовності символів над , і розширення до гомоморфізму
в , яка природно відображає кожну послідовність вихідні символи до послідовності цільових символів, називається його розширенням.T C : S → T ∗ S T C S ∗ T ∗SТС: S→ Т∗SТСS∗Т∗
Ми називаємо кодове слово в образ символ . s ∈ SС( s ) ∈ T∗s ∈ S
Змінної довжини коду є однозначно декодіруемой , якщо відповідний гомоморфізм в є ін'єкційних . Це означає, що будь-яка рядок у може бути зображенням щонайменше однієї рядка в . Ми також говоримо, що код є однозначним , тобто будь-який рядок може бути однозначно розшифрований, якщо він є.S ∗ T ∗ T ∗ S ∗СS∗Т∗Т∗S∗
Код змінної довжини є кодом префікса, якщо кодове слово не є префіксом іншого. Він також називається миттєвим кодом або без контексту . Причина цих імен полягає в тому, що, читаючи цільовий рядок, який починається з кодового слова коду префікса, ви розпізнаєте кінець кодового слова, як тільки прочитаєте його останній символ, не знаючи / читаючи наступний символ. Як наслідок, коди префіксу однозначні і їх дуже швидко швидко розшифрувати.ш
Легко показано, що унікальна декодируемость і властивість префікса закриваються під складом кодів.
Зауважимо, що визначення як гомоморфізму означає, що між кодовими словами не існує спеціального поділу. Саме їх структура, така як властивість префікса, дозволяє однозначно ідентифікувати їх.
Дійсно, якби були такі символи розділення, вони повинні були б бути частиною цільового алфавіту, оскільки їм було б необхідно розшифрувати рядок із цільового алфавіту. Тоді було б досить просто повернутися до теоретичної моделі коду змінної довжини, додавши роздільник до попереднього кодового слова. Якби це викликало контекстну складність (пов’язану, наприклад, з декількома роздільниками), це був би лише натяк на те, що код складніший, ніж очевидний. Це вагомий привід дотримуватися описаної вище теоретичної моделі.
Код Морзе
Код Морзе описаний у стандарті на трьох рівнях:
3. він призначений для кодування тексту на природній мові, використовуючи 57 символів (27 букв, 10 цифр, 20 синболів та пунктуацій) та міжсловний пробіл, щоб вирізати рядок символів словами. Міжсловний простір використовується як особливий символ, який можна змішати з іншими, що я зазначуSEP
.
2. всі ці символи повинні бути кодовані як послідовності dash
та dot
, використовуючи міжбуквенний пробіл, який я зазначу sep
, для розділення dash
таdot
одну букву від наступної літери.
1. Кодування dash
та dot
, а також sep
повинні кодуватися як сигнал або відсутність сигналу (званий інтервалом) з довжиною, точно визначеною в термінах деякої прийнятої одиниці. Зокрема, dash
і dot
кодування листа має бути розділене міжелементним простором, що я зазначуσ
.
Це вже вимагає зробити кілька висновків.
Повідомлення, яке передається та приймається в аналоговій формі, - це послідовності одиниць довжини (пробіл або довжина часу), таким чином, щоб сигнал вимкнено протягом усієї тривалості кожного блоку, як зазначено у Додатку 1, розділ I, розділ 2 стандарту :
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.
Це явно аналогове кодування в тому, що називається бітовим потоком, який логічно може бути представлений у двійковій нотації рядком 0
ans 1
, що стоїть на аналоговому відключенні та включеного .
Для того, щоб абстрагувати відсторонені питання, пов'язані з аналоговим поданням, ми можемо вважати, що повідомлення коду Морзе передаються у вигляді бітових рядків, які ми з вами відзначимо 0
та1
.
Отже, наведений вище уривок із стандарту може бути виражений логічно як:
- 0. А
dot
представлений символом1
.
- 1. А
dash
представлений символом 111
.
- 2. Міжелементний простір
σ
представлений символом 0
.
- 3. Міжбуквене пробіл
sep
представлений символом 000
.
- 4. Міжсловний простір
SEP
представлений символом0000000
.
Таким чином, ми могли бачити код Морзе як використання 5 кодових слів у двійковій формі для кодування цих 5 символів. За винятком того, що система описується не зовсім так, є ще щось, і це не найзручніший спосіб, про який можна думати, з наївної чи математичної точки зору.
Зауважимо також, що цей опис призначений для мирян, а не для фахівців з теорії коду. З цієї причини він описує більше видимий вигляд, ніж внутрішню структуру, яка його виправдовує. Це не має жодних підстав виключати інші описи, сумісні з цим, хоча й математично більш структуровані, щоб підкреслити властивості коду.
Але спочатку слід зазначити, що повний опис коду включає 3 рівні представлення, негайно впізнавані:
- 3. Текст, складений з рядка символів, у т.ч.
SEP
.
- 2. Кодування букви рядка як рядка
dot
, dash
іsep
.
- 1. Кодування рядка рівня 2 з цих трьох
symbols
у вигляді двійкового рядка.
Ми, можливо, можемо обговорити, які символи закодовані в чому, але важливим аспектом коду Морзе є те, що він має ці три рівні представлення: символи вгорі, dot
s та dash
es в середині, а біти 0
та1
внизу .
Це означає, що обов'язково є два коди: один від рівня 3 до рівня 2, а другий від рівня 2 до рівня 1.
Аналіз трьох рівнів представництва
Для того, щоб провести послідовний аналіз цієї трирівневої системи кодування, слід спочатку проаналізувати, яка інформація є актуальною на кожному рівні.
1. Рядок бітів за визначенням та необхідністю його аналогового подання складається лише з 0
та 1
.
3. На рівні тексту нам потрібен і алфавіт із 58 символів, включаючи 57 символів та міжсловний пробіл SEP
. Всі 58 з них повинні мати в кінцевому рахунку двійкове кодування. Але, хоча стандарт коду Морзе визначає ці 57 + 1 символів, він не вказує, як вони повинні використовуватися для кодування інформації. У цьому полягає роль англійської та інших природних мов. Код Морзе надає іншій системі алфавіт із 58 символів, на якому вони могли б побудувати якийсь 58-арийний код, але код Морзе сам по собі не є 58-арійним кодом.
2. На рівні dot
та dash
рівні нам потрібно лише два символи, щоб кодувати 57 символів, тобто надати кодове слово для кожного як рядок dot
і dash
разом з деяким роздільником sep
позначити, коли закінчується одна літера, а інша починається. Нам також потрібні деякі засоби кодування міжсловного простору SEP
. Ми можемо спробувати забезпечити це безпосередньо на рівні 1, але це зіпсує інакше структуровану за рівнем організацію коду.
Дійсно, опис стандарту справедливо може бути піддано критиці за те, що він робив саме це. Але автори, можливо, подумали, що їх презентація буде простішою для розуміння середнього користувача. Також слід за традиційним описом коду Морзе, який передує цьому виду математичного аналізу.
Це вимагає декількох зауважень:
на рівні 3, літери, міжбуквенний пробіл sep
вже не має сенсу. Це цілком нормально, оскільки воно не має більше значення у Всесвіті літер, ніж пробіл, що розділяє два написаних символи на папері. Потрібно на рівні 2 розпізнати кодові слова, що представляють букви, але це все.
Аналогічно на рівні 2, міжелементний простір σ
вже не має сенсу. Це не має ніякого значення в світі dot
і dash
, але необхідно тільки на рівні 1 , щоб ідентифікувати виконавчі кодові слова , що представляють dot
, dash
. Але на рівні 1 він не відрізняється від розрядного 0
.
Тож міжелементний простір σ
вже не є особливим. Це лише одне використання0
.
Однак, як було пояснено раніше, якщо кодΣ∗2→ Σ∗1 проаналізувати за допомогою знань кодів змінної довжини, роздільники повинні бути додані до кодових слів, які вони слідують, щоб визначити код як простий рядок гомоморфізм.
Це означає наступну часткову специфікацію коду:
іdot
→10
dash
→1110
Алфавіту 2 рівня потрібен принаймні один символ, пробіл , який повинен відповідати букві стандарту. Однак визначення коду змінної довжини як гомоморфізму вимагає додавання міжелементного простору
до кожного кодового слова для і . Отже, ми повинні мати лише кодове слово для , щоб перемикатись із закінченням від попереднього або , він робить 3, як цього вимагає стандарт. Це завжди спрацьовує, оскільки в стандарті не передбачено наявності двох міжбуквенних роздільників, що слідують один за одним.Σ2sep
000
0
dot
dash
00
sep
0
dot
dash
0
Цього достатньо , щоб закодувати алфавіт { , , } з гомоморфного кодом визначений таким чином :Σ2=dot
dash
sep
С2 → 1: Σ2→ Σ∗1
dot
→10
dash
→1110
sep
→00
І ми маємо хороший сюрприз, коли виявимо, що жодне кодове слово не є приставкою іншого. Отже, у нас є префіксний код, який однозначно і легко розшифрувати.
Тепер ми можемо пройти так само, щоб визначити код .С3 → 2: Σ3→ Σ∗2
Стандарт використовує рядки dot
та dash
кодові слова для символів у , таким чином, як, наприклад, таблиці стандартів, щоб представити літеру
.Σ3dot
dot
dash
dot
f
Знову ці кодові слова розділені міжбуквенними пробілами. Для того, щоб визначити код як гомоморфізм, ми повинні включити роздільник в кодові слова, щоб визначення гомоморфізму стало швидше: f→ dot
dot
dash
dot
sep
Це стосується кожного з 57 символів алфавіту . Але знову ж таки нам потрібен роздільник слів , який, згідно стандарту, є . Спочатку зазначимо, що вже 3 біти надаються кодом, 2 - тим, що закінчується останньою літерою слова, і 1 - бітом, який закінчує останню або кодуванням останньої літери. Отже, в кінцевому рахунку необхідно кодувати як решту .Σ3SEP
0000000
0
sep
0
dot
dash
SEP
0000
Але щоб поважати багаторівневий підхід, SEP
слід закодувати в якомусь кодовому з . Оскільки двійковий код закодований як , то випливає, що може бути закодований як .Σ∗2sep
00
SEP
sep
sep
Отже, ми можемо кодувати алфавіт
, з гомоморфним кодом
визначено так:} C 3 →Σ3= { A , B , … , Z, 0 , 1 , ... , 9 , ? , = , … , × , @ , SEP
}С3 → 2: Σ3→ Σ∗2
І ми ще більше здивуємося тим, що жодне кодове слово не є приставкою іншого. Отже, код є також префіксним кодом.С3 → 2
Оскільки властивість префікса закрито під складом кодів, код Морзе є кодом префікса.СМo r s e= С2 → 1∘ С3 → 2
Таким чином , ми можемо зробити висновок про те , що код Морзе може бути зрозумілий і легко проаналізувати, як склад префікса двійкового кодування з алфавіту 3 символів { dot
, dash
, sep
} в двійковий алфавіт, і префікс , що кодує з 58 символів алфавіту (57 символів і один пробіл) в алфавіт з 3 літер.
Сама композиція є префіксом, що кодує 58 символів у бінарне зображення.
Зауваження до цього аналізу.
Завжди важко встановити, що презентація структури є найкращою, яку можна придумати. Однак видається, що наведений вище аналіз відповідає критеріям, встановленим на початку цієї відповіді: близькість до 3-х рівневого визначення, формально представлене відповідно до поточної теорії кодування, простота та підтвердження основних властивостей коду.
Зверніть увагу, що шукати властивості виправлення помилок мало сенсу. Код Морзе може навіть не виявити жодної бітової помилки, оскільки він може просто змінити два dot
на один dash
. Однак це викликає лише локальні помилки.
Що стосується стиснення, то потрійне кодування було розроблено так, щоб приблизно зменшити кількість крапок і тире, у приблизному вигляді кодування Хаффмана . Але два складені коди легко можна зробити щільнішими.
Що стосується розміру алфавітів, то для двійкового та алфавіту 58 символів немає вибору. Проміжний алфавіт може містити більше символів, але яка б була мета?
Однак деякі люди будуть схильні розпізнавати простір DET
на рівні 2, роблячи таким чином алфавіт четвертинним , а потім використовуючи його безпосередньо на рівні 3, закодованого як сам на рівні 2.
Це відповідало б стандартному визначенню для DET
кодованого у двійковій формі як 0000
. Але це перешкоджало б аналізу двійкового кодування
як префіксального коду, що ускладнювало б показати, що
є кодом префікса, отже, однозначним. C M o r s eС2 → 1СМоr s e
Дійсно, такий вибір зробив бинарний рядок 0000
неоднозначним, розшифруваним як або, так SEP
і як sep
sep
. Неоднозначність повинна бути вирішена контекстуальним правилом, яке sep
не може слідувати собі, зробивши формалізацію більш складною.
Важливість аналого-логічного переходу.
Цей аналіз значною мірою спирається на той факт, що розкладання сигналу вмикання / вимикання на одиниці однакової довжини чітко вказує на аналогове подання бінарного рядка. Крім того, довжина в одиницях точно підходить для вищезазначеного аналізу, який, мабуть, мабуть не стався випадково (хоча це можливо).
Однак, з (надто короткого) погляду на оригінальний патент 1647 , схоже, він не був таким точним, з такими пропозиціями, як (вгорі сторінки 2):
Знак окремої цифри або складеної цифри при використанні в реченні слів або цифр складається з відстані або простору розділення між символами більшою мірою, ніж відстань, що використовується для відокремлення символів, які складають будь-які подібні відмінності або складене число.
Люди, яких пізніше відправляли вручну або отримували на слух, теж навряд чи будуть такими точними. Дійсно, їх кулак , тобто їх терміни, часто були впізнавані. Цю думку також підтримує той факт, що відстані між ними не завжди дотримуються , особливо при вивченні коду Морзе.
Ці ситуації відповідають аналоговому виду коду як короткий сигнал (крапка), середній сигнал (тире), так і коротка, середня і довга пауза. Пряме транспонування в логічний алфавіт, природно , дати пятерной алфавіт, в якому 58 символах повинні бути закодовані. Звичайно, це вже не трирівнева презентація коду Морзе.
Однак, щоб мати сенс (і, можливо, уникнути неоднозначності), цей алфавіт слід використовувати з обмеженням, що два сигнальні символи ( dot
або dash
) не можуть слідувати один за одним, і що символи паузи не можуть слідувати один за одним. Аналіз коду та його властивостей був би ускладнений, і природним способом його спрощення було б зробити те, що було зроблено: запровадити належні таймінги, щоб перетворити його на склад двох кодів, що призведе до досить простого аналізу, наведеного вище ( пам'ятайте, що воно включає показ коду з префіксом).
Крім того, не обов'язково дотримуватися точних хронометрів в аналоговому поданні. Оскільки в декодері аналогового перекладу можна розрізнити короткі, середні та довгі паузи, будь-якими способами він повинен просто імітувати те, що було зроблено у двійковому випадку. Тому короткі і середні сигнал (обов'язково слід пауза) розпізнаються як логічна dot
або dash
. Короткі паузи забуваються, як лише служать для позначення кінця dot
або dash
. Середні паузи sep
визнаються як два, а довгі - це дві sep
послідовно. Отже, аналоговий сигнал представлений у потрійному алфавіті, який можна використовувати, як і раніше, для кодування 58 символів алфавіту. Наш початковий аналіз можна використовувати навіть тоді, коли строго не дотримуються.
В якості альтернативи, альтернатива сигналу-паузи може бути використана для перетворення цього квірного алфавіту в потрійний, зберігаючи лише три тривалості як символи алфавіту, і використовуючи контекстний аналіз, щоб визначити, чи є дана тривалість сигналом чи паузою. Але це знову трохи складно проаналізувати.
Це просто показує, що існує багато способів погляду на речі, але вони не обов'язково зручні, і, можливо, не всі легко піддаються аналізу за допомогою математичних інструментів, розроблених для аналізу кодів.
Більше посилань на патенти можна знайти в Інтернеті.
Висновок
Зважаючи на точні терміни стандарту, гарною відповіддю, здається, є розгляд коду Морзе як композиції потрійного префікса, що кодує (58 символів), в алфавіті 3 символи, складеному з двійковим префіксом, що кодує ці три символи.
Без точного встановлення часу стандарту бінарний рівень вже не можна розглядати. Тоді аналогово-логічне декодування закономірно відбувається на рівні проміжного алфавіту dot
і
dash
. Однак аналоговий та логічний декодер може декодувати декларацію до попередніх 3 символів алфавіту, тим самим зберігаючи застосовність нашого аналізу.