O código Morse é um código ternário de prefixo (para codificar 58 caracteres) em cima de um código binário de prefixo que codifica os três símbolos.
Essa foi uma resposta muito mais curta quando aceita. No entanto, considerando os consideráveis mal-entendidos entre os usuários e seguindo uma solicitação do OP, escrevi essa resposta por muito mais tempo. A primeira seção "resumo" fornece a essência.
Conteúdo
Em poucas palavras (grande)
Ao perguntar "O Código Morse é binário, ternário ou quinário?" não há comparação de respostas possíveis, a menos que se estabeleça alguns critérios para uma resposta aceitável. De fato, sem critérios adequados, é possível inventar explicações para quase qualquer tipo de estrutura. Os critérios que escolhi são os seguintes:
deve refletir a descrição em três níveis do código Morse com a representação de ponto / traço no segundo nível;
deve caber na apresentação e nas ferramentas matemáticas desenvolvidas para a análise teórica dos códigos, tanto quanto possível;
deve ser o mais simples possível;
deve claramente tornar aparentes as propriedades do código Morse.
O objetivo é impedir o hacking arbitrário, que ignora os conceitos básicos da teoria do código estudados cientificamente e que podem ter algum apelo ao fornecer uma ilusão de análise sistemática, embora abordada de maneira informal demais para ser conclusiva. Este site deve ser sobre
ciência da computação , não programação. Devemos usar um mínimo de ciência estabelecida e conceitos aceitos para responder a uma pergunta técnica.
Uma análise rápida do padrão mostra que todos os símbolos usados no código Morse são codificados em binário , uma vez que são transmitidos como uma cadeia de unidades de igual comprimento, com um sinal que pode ser ativado ou desativado para cada unidade. Isso indica que as mensagens Morse são finalmente codificadas em um alfabeto lógico .Σ1={0,1}
Mas isso não diz nada da estrutura interna do código. As informações a serem codificadas são uma sequência em um alfabeto de 58 símbolos (de acordo com o padrão), incluindo 57 caracteres e um espaço. Isso corresponde a um alfabeto
, o último simbolo é o espaço.Σ3={A,B,…,Z,0,1,…,9,?,=,…,×,@,[]}
No entanto, os especifica padrão que existe um alfabeto intermediário
, com base em e e, possivelmente, outros símbolos. Está bem claroΣ2dot
dash
Portanto, considerando que não há escolha para e , a questão deve ser entendida como: " Qual o número de símbolos que devemos considerar no alfabeto intermediário para melhor planejar a estrutura e as propriedades de todo o Morse código " , que também implica especificar as duas codificações entre os três níveis.Σ1Σ3Σ2
Dado o fato de que o código Morse é um prefixo de código homomorphic (comprimento variável) que impede qualquer ambiguidade ao decodificar um sinal, podemos explicar simplesmente esta propriedade essencial com um ternário alfabeto
{ , , }, e dois esquema de codificação de
a e de a , que são homomórficos e prefixos, portanto, ambos códigos inequívocos e, portanto, capazes de ser compostos para fornecer um prefixo inequívoco. codificação dos 58 símbolos em binário.Σ2=dot
dash
sep
C3→2Σ3Σ2C2→1Σ2Σ1
Daí código Morse é composto de um código de prefixo ternário expresso no alfabeto , , , com estas três próprios símbolos codificados em binário com as palavras de código seguintes:{ dot
dash
sep
}
dot
→10 , edash
→1110sep
→00
Observe que o que é conhecido como o espaço entre consecutivo dot
ou dash
está realmente incluído na representação de dot
e dash
, como essa é a representação matemática usual para esses tipos de códigos, que geralmente são definidos como homomorfismos de cadeia de caracteres dos símbolos de origem às palavras de código expressas com símbolos de destino, como eu acabei de fazer.
Isso se afasta um pouco de algumas das apresentações fornecidas no padrão, que objetivam especificar mais intuitivamente o código para os usuários, em vez de analisá-lo por suas propriedades estruturais. Mas a codificação é a mesma nos dois casos.
Mesmo sem os tempos precisos do padrão, um decodificador do sinal analógico ainda poderia traduzi-lo para o alfabeto ternário que sugerimos, para que o entendimento acima do código ternário ainda fosse válido.
Códigos: pontos básicos
Esta resposta é baseada no padrão ITU-R M.1677-1 , de outubro de 2009 (agradecimentos a Jason C pela referência). Usarei a terminologia dot
e dash
, em vez de dit
e dah
, como é a terminologia usada por esta norma.
Antes de começarmos a discutir o código Morse, precisamos concordar com o que é um código. As discussões difíceis sobre essa questão obviamente exigem isso.
Fundamentalmente, as informações precisam ser representadas para serem transmitidas ou processadas. Um código é um sistema para converter informações de um sistema de representação em outro . Esta é uma definição muito geral. Devemos tomar cuidado para não confundir o conceito de representação e o código de uma representação (a fonte ) para outra (o destino ).
Uma representação pode assumir várias formas, como tensão elétrica variável, pontos coloridos no papel, sequência de caracteres, numerais, sequências binárias de 0 e 1, etc. É importante distinguir entre representação analógica e formal (ou lógica ou abstrata) .
Uma representação analógica / física é um desenho, um nível de tensão variável, uma forma (para uma letra).
Uma representação lógica / formal / abstrata é uma representação matemática com gráficos abstratos, cadeias de símbolos ou outras entidades matemáticas.
Embora algumas informações possam ser originalmente analógicas, geralmente as convertemos em uma representação lógica para poder definir com precisão seu processamento por meios matemáticos ou por pessoas.
Por outro lado, ao lidar com a representação lógica usando dispositivos físicos, como computadores ou transmissores, precisamos dar uma forma analógica à representação lógica.
Para os fins desta análise, a única forma analógica que consideramos é a usada para transmissão, conforme descrito na norma. Mas, mesmo assim, consideraremos que o primeiro passo é interpretar essa representação analógica como uma implementação direta de uma representação lógica estruturada identicamente, na qual construímos nossa análise de que tipo de código pode ser o código Morse. A teoria dos códigos é um corpo de conhecimento matemático baseado na análise de representações lógicas.
No entanto, voltaremos à transição analógica / lógica na discussão no final.
Códigos: definições
Nossa visão lógica é que o código é usado para traduzir fontes de cordas em uma fonte alfabeto a um alvo alfabeto . Geralmente, os dois alfabetos são idênticos, geralmente binários, quando o objetivo é adicionar alguma propriedade extra à representação das informações, como torná-las mais resistentes a erros (detecção e correção de erros) ou diminuir a representação por remoção de redundância (compactação sem perda de código) e possivelmente com perda cuidadosamente controlada de algumas informações (compactação com perda).ST
No entanto, o objetivo do código Morse é fornecer apenas uma maneira de representar cadeias de caracteres em um alfabeto grande, em cadeias baseadas em um alfabeto muito menor (na verdade binário), usando um alfabeto intermediário quase binário (pontos e traços) para melhor adaptação ao humano percepção e habilidades manipulativas. Isso é alcançado pelo que é chamado
código de tamanho variável :
Usando termos da teoria formal da linguagem, a definição matemática precisa é a seguinte: Seja e dois conjuntos finitos, chamados alfabetos de origem e de destino, respectivamente. Um código é uma função total que mapeia cada símbolo de para uma sequência de símbolos sobre , e a extensão de para um homomorfismo de
em , que mapeia naturalmente cada sequência de símbolos de origem para uma sequência de símbolos de destino, é chamada de extensão.STC:S→T∗STCS∗T∗
Chamamos Codeword a imagem de um símbolo .C(s)∈T∗s∈S
Um código de comprimento variável é decodificado de forma única se o homomorfismo correspondente de em for injetivo . Isso significa que qualquer string em pode ser a imagem de no máximo uma string em . Também dizemos que o código não é ambíguo , o que significa que qualquer string pode ser decodificada de maneira inequívoca, se houver.CS∗T∗T∗S∗
Um código de tamanho variável é um código de prefixo se nenhuma palavra de código for o prefixo de outro. Também é um código instantâneo ou código livre de contexto . A razão para esses nomes é que, ao ler uma sequência de destino que começa com uma palavra de código de um código de prefixo, você reconhece o final da palavra de código assim que lê seu último símbolo, sem precisar conhecer / ler o próximo símbolo. Como conseqüência, os códigos de prefixo são inequívocos e muito fáceis de decodificar rapidamente.w
É facilmente demonstrado que a decodabilidade exclusiva e a propriedade prefix são fechadas sob a composição de códigos.
Observe que a definição como homomorfismo implica que não há separação especial entre as palavras de código. É sua estrutura, como a propriedade prefix, que permite identificá-los sem ambiguidade.
De fato, se houvesse tais símbolos de separação, eles teriam que fazer parte do alfabeto alvo, pois seriam necessários decodificar a string do alfabeto alvo. Seria bastante simples reverter para o modelo teórico do código de tamanho variável anexando o separador à palavra de código anterior. Se isso criar uma dificuldade contextual (devido, por exemplo, a vários separadores), isso seria apenas uma dica de que o código é mais complexo do que aparente. Essa é uma boa razão para seguir o modelo teórico descrito acima.
O código Morse
O código Morse é descrito no padrão em três níveis:
3) ele pretende fornecer uma codificação de texto em idioma natural, usando 57 caracteres (27 letras, 10 dígitos, 20 sinbols e pontuações) e um espaço entre palavras para cortar a sequência de caracteres em palavras. O espaço entre palavras é usado como um caractere especial, que pode ser misturado com os outros, o que observarei SEP
.
2) todos esses caracteres devem ser codificados como sucessões dash
e dot
, usando um espaço entre letras, que observarei sep
, para separar a letra dash
e a dot
letra de uma das letras da próxima letra.
1 O dash
e dot
, assim como sep
devem ser codificados como sinal ou ausência de sinal (chamado espaçamento) com comprimento definido com precisão em termos de alguma unidade aceita. Em particular, a
letra dash
e a dot
codificação devem ser separadas por um espaço entre elementos, que observarei σ
.
Isso já requer algumas conclusões.
A mensagem a ser transmitida e recebida em forma analógica é uma sucessão de unidades de comprimento (espaço ou duração), de modo que um sinal seja desligado durante toda a duração de cada unidade, conforme especificado na seção I da parte 1 do anexo 2 do padrão :
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.
Esta é claramente uma codificação analógica no que é conhecido como um fluxo de bits, que pode ser logicamente representado na notação binária por uma série de 0
ans 1
, de pé para o analógico off e on .
Para abstrair questões relacionadas à representação analógica, podemos considerar que as mensagens do código Morse são transmitidas como cadeias de bits, as quais devemos observar com 0
e 1
.
Portanto, o trecho acima do padrão pode ser expresso logicamente como:
- 0 A
dot
é representado por 1
.
- 1 A
dash
é representado por 111
.
- 2) Um espaço entre elementos
σ
é representado por 0
.
- 3) Um espaço entre letras
sep
é representado por 000
.
- 4) Um espaço entre palavras
SEP
é representado por 0000000
.
Assim, poderíamos ver o código Morse usando 5 palavras de código em binário para codificar esses 5 símbolos. Exceto pelo fato de que não é exatamente assim que o sistema é descrito, há um pouco mais, e não é a maneira mais conveniente de se pensar, de um ponto de vista ingênuo ou matemático.
Observe também que esta descrição é destinada a leigos, não a especialistas em teoria de códigos. Por esse motivo, descreve mais a aparência visível do que a estrutura interna que a justifica. Não há razão para impedir outras descrições compatíveis com esta, embora matematicamente mais estruturadas, para enfatizar as propriedades do código.
Mas primeiro, devemos observar que a descrição completa do código envolve 3 níveis de representação, imediatamente reconhecíveis:
- 3) O texto, composto por uma sequência de caracteres, incluindo
SEP
.
- 2) A codificação de uma sequência de letras como uma sequência de
dot
, dash
e sep
.
- 1 A codificação de uma sequência de nível 2 desses três
symbols
como uma sequência binária.
Podemos discutir sobre quais símbolos são codificados em quê, mas é um aspecto essencial do código Morse que ele tenha esses três níveis de representação, com caracteres no topo, dot
s e dash
es no meio e bits 0
e 1
na parte inferior .
Isso implica que existem necessariamente dois códigos, um do nível 3 ao nível 2 e o outro do nível 2 ao nível 1.
Analisando os três níveis de representação
Para ter uma análise consistente desse sistema de codificação em três camadas, devemos primeiro analisar que tipo de informação é relevante em cada nível.
1 A cadeia de bits, por definição e por necessidade de sua representação analógica, é composta apenas por 0
e 1
.
3) No nível do texto, precisamos de um alfabeto de 58 símbolos, incluindo os 57 caracteres e o espaço entre palavras SEP
. Todos os 58 deles precisam ter uma codificação binária. Porém, embora o padrão do código Morse especifique esses 57 + 1 caracteres, ele não especifica como eles devem ser usados para codificar informações. Esse é o papel do inglês e de outras línguas naturais. O código Morse fornece a outro sistema um alfabeto de 58 símbolos, no qual eles poderiam criar um código de 58 árias, mas o código Morse não é, por si só, um código de 58 árias.
2) No nível dot
e dash
, tudo o que precisamos são esses dois símbolos para codificar os 57 caracteres, ou seja, forneça uma palavra de código para cada uma como uma seqüência de caracteres dot
e dash
, juntamente com um separador sep
para marcar quando uma letra terminar e outra começar. Também precisamos de alguns meios de codificar o espaço entre palavras SEP
. Podemos tentar fornecê-lo diretamente no ponto 1, mas isso atrapalharia a organização do código, de outra forma estruturada em camadas.
De fato, a descrição do padrão pode ser criticada por fazer exatamente isso. Mas os autores podem ter pensado que sua apresentação seria mais simples de entender para o usuário médio. Também segue uma descrição tradicional do código Morse, que antecede esse tipo de análise matemática.
Isso exige várias observações:
no nível 3, no nível da letra, o espaço entre letras sep
não é mais significativo. Isso é bastante normal, pois não tem mais significado no universo das letras do que o espaço que separa dois caracteres escritos no papel. É necessário, no nível 2, reconhecer as palavras de código que representam as letras, mas isso é tudo.
da mesma forma no nível 2, o espaço entre elementos σ
não é mais significativo. Não tem nenhum significado no mundo dos dot
e dash
, mas só é necessário no nível 1 para identificar as palavras de código binário que representa dot
, dash
. Mas no nível 1, não é distinguível do bit 0
.
Portanto, o espaço entre elementos σ
não é mais nada de especial. É apenas um uso de 0
.
No entanto, como explicado anteriormente, se o código for analisado usando o conhecimento de códigos de comprimento variável, os separadores devem ser anexados às palavras de código que seguem, para definir o código como uma sequência simples homomorfismo.Σ∗2→Σ∗1
Isso implica a seguinte especificação parcial do código:
edot
→10
dash
→1110
O alfabeto de nível 2 precisa de pelo menos um outro símbolo, o espaço entre letras indicado , que deve estar de acordo com a letra do padrão. No entanto, a definição do código de comprimento variável como um homomorfismo exigia anexar o espaço entre elementos
a cada palavra de código para e . Portanto, devemos ter apenas como palavra-código , para que, juntamente com o final do precedente ou , faça 3 conforme exigido pelo padrão. Isso sempre funciona, uma vez que não há previsão no padrão para que dois separadores entre letras se sigam.Σ2sep
000
0
dot
dash
00
sep
0
dot
dash
0
Isto é suficiente para codificar o alfabeto { , , } com um código homomórfica definidos como segue:Σ2=dot
dash
sep
C2→1:Σ2→Σ∗1
dot
→10
dash
→1110
sep
→00
E temos a boa surpresa de descobrir que nenhuma palavra de código é um prefixo de outra. Portanto, temos um código de prefixo, que é inequívoco e fácil de decodificar.
Agora podemos proceder da mesma forma para definir o código .C3→2:Σ3→Σ∗2
O padrão usa cadeias de caracteres dot
e dash
como palavras de código para os caracteres em , da maneira fornecida pelas tabelas do padrão, por exemplo, para representar a letra
.Σ3dot
dot
dash
dot
f
Novamente, essas palavras de código são separadas por espaços entre letras. Para definir o código como um homomorfismo, devemos incluir o separador nas palavras de código, para que a definição do homomorfismo se torne: f→ dot
dot
dash
dot
sep
Isso se aplica a cada um dos 57 caracteres do alfabeto . Mas, novamente, também precisamos da palavra separador , que, de acordo com o padrão, é . Observamos primeiro que já são fornecidos 3 bits pelo código, 2 pelo que termina a última letra da palavra e 1 pelo bit que termina a última ou pela codificação dessa última letra. Portanto, em última análise, deve ser codificado como o restante .Σ3SEP
0000000
0
sep
0
dot
dash
SEP
0000
Mas, para respeitar a abordagem em camadas, SEP
deve ser codificado em alguma palavra de código de . Como é codificado como binário , segue-se que pode ser codificado como .Σ∗2sep
00
SEP
sep
sep
Portanto, podemos codificar o alfabeto
, com um código homomórfico
definido da seguinte forma:Σ3={A,B,…,Z,0,1,…,9,?,=,…,×,@, SEP
}C3→2:Σ3→Σ∗2
E ainda temos a surpresa de ver que nenhuma palavra de código é um prefixo de outra. Portanto, o código é um código de prefixo.C3→2
Como a propriedade prefix é fechada sob a composição de códigos, o código Morse é um código de prefixo.CMorse=C2→1∘C3→2
Podemos, assim, concluir que o código Morse pode ser compreendido, e facilmente analisadas, como a composição de um prefixo de binário que codifica de um alfabeto 3 símbolos { dot
, dash
, sep
} em um alfabeto binário, e um prefixo que codifica de um 58 símbolo alfabeto (57 caracteres e um espaço) no alfabeto de 3 letras.
A composição em si é um prefixo que codifica os 58 símbolos em uma representação binária.
Comentários sobre esta análise.
É sempre difícil estabelecer que a apresentação de uma estrutura é a melhor possível. Parece, no entanto, que a análise acima atende aos critérios estabelecidos no início desta resposta: proximidade com a definição em três níveis, formalmente apresentada de acordo com a teoria atual de codificação, simplicidade e evidenciando as principais propriedades do código.
Observe que há pouco sentido em procurar propriedades de correção de erros. O código Morse pode nem detectar um erro de bit único, pois pode simplesmente transformar dois dot
em um dash
. No entanto, ele causa apenas erros locais.
Em relação à compressão, a codificação ternária foi projetada para reduzir aproximadamente o número de pontos e traços, em um tipo aproximado de codificação de Huffman . Mas os dois códigos compostos poderiam ser facilmente mais densos.
Em relação ao tamanho dos alfabetos, não há escolha para o alfabeto binário e o alfabeto de 58 símbolos. O alfabeto intermediário poderia conter mais símbolos, mas qual seria o objetivo?
No entanto, algumas pessoas estariam inclinadas a reconhecer o espaço DET
no nível 2, tornando o alfabeto quaternário , usando-o diretamente no nível 3, codificado como ele próprio no nível 2.
Isso atenderia à definição padrão, para DET
codificado em binário como 0000
. Mas isso impediria a análise da codificação binária
como um código de prefixo, tornando mais difícil mostrar que
é um código de prefixo, portanto inequívoco. C M o r e sC2→1CMorse
De fato, essa escolha tornaria a string binária 0000
ambígua, decodificável como um SEP
ou como sep
sep
. A ambiguidade teria que ser resolvida com uma regra contextual que sep
não pode seguir a si mesma, tornando a formalização mais complexa.
A importância da transição analógica para a lógica.
Esta análise baseia-se fortemente no fato de que a decomposição do sinal liga / desliga em unidades de comprimentos iguais indica claramente uma representação analógica de uma cadeia binária. Além disso, os comprimentos em unidades são exatamente corretos para a análise acima, o que parece improvável que tenha acontecido por acaso (embora seja possível).
No entanto, a partir de uma análise (muito superficial) da patente original 1647 , não parece ter sido tão precisa, com frases como (no topo da página 2):
O sinal de um numeral distinto, ou de um numeral composto, quando usado em sentenças de palavras ou de numerais, consiste em uma distância ou espaço de separação entre os caracteres em maior extensão do que a distância usada na separação dos caracteres que compõem qualquer um desses distintos ou numeral composto.
As pessoas que mais tarde enviavam à mão ou recebiam de ouvido também provavelmente não seriam tão precisas. De fato, seu punho , ou seja, seu timing, era frequentemente reconhecível. Essa visão também é suportada pelo fato de que os comprimentos de espaçamento nem sempre são respeitados , principalmente ao aprender código Morse.
Essas situações correspondem a uma visualização analógica do código como sinal curto (ponto), sinal médio (traço) e pausa curta, média e longa. A transposição direta para um alfabeto lógico daria naturalmente um alfabeto quinário , no qual os 58 símbolos devem ser codificados. Obviamente, isso não é mais uma apresentação em três níveis do código Morse.
No entanto, para fazer sentido (e possivelmente evitar ambiguidade), esse alfabeto deve ser usado com a restrição de que dois símbolos de sinal ( dot
ou dash
) não possam se seguir e que os símbolos de pausa também não possam se seguir. A análise do código e de suas propriedades seria mais complexa e a maneira natural de simplificá-lo seria fazer o que foi feito: introduza tempos adequados para transformá-lo na composição de dois códigos, levando à análise bastante simples fornecida acima ( lembre-se de que inclui mostrar o código como prefixo).
Além disso, não é estritamente necessário seguir os horários exatos na representação analógica. Como o decodificador da tradução analógica pode distinguir pausas curtas, médias e longas, por qualquer meio, deve apenas imitar o que foi feito no caso binário. Portanto, o sinal curto e médio (necessariamente seguido de uma pausa) são reconhecidos como lógicos dot
ou dash
. Pausas curtas são esquecidas, pois servem apenas para marcar o final de dot
ou dash
. Pausas médias são reconhecidas como sep
e pausas longas são reconhecidas como duas sep
em sucessão. Portanto, o sinal analógico é representado em um alfabeto ternário, que pode ser usado como antes para codificar o alfabeto de 58 símbolos. Nossa análise inicial pode ser usada mesmo quando os horários não são estritamente respeitados.
Como alternativa, a alternância de pausa de sinal pode ser usada para transformar esse alfabeto quinário em um ternário, mantendo apenas as três durações como símbolos do alfabeto e usando a análise contextual para determinar se uma determinada duração é sinal ou pausa. Mas isso é novamente um pouco complexo para analisar.
Isso apenas mostra que existem muitas maneiras de ver as coisas, mas elas não são necessariamente convenientes e nem todas se prestam facilmente à análise com as ferramentas matemáticas que foram desenvolvidas para analisar códigos.
Mais referências às patentes podem ser encontradas na Internet.
Conclusão
Dados os tempos precisos do padrão, uma boa resposta parece ser considerar o código Morse como a composição de um prefixo ternário que codifica (de 58 caracteres) em um alfabeto de 3 símbolos, composto por um prefixo binário que codifica esses três símbolos.
Sem o tempo preciso do padrão, o nível binário não pode mais ser considerado. Então a decodificação analógica para lógica ocorre naturalmente no nível do alfabeto intermediário de dot
e
dash
. No entanto, o decodificador analógico para lógico ainda pode decodificar para o alfabeto dos três símbolos anteriores, preservando a aplicabilidade de nossa análise.