1. Morse Codificador y decodificador

Referencia: Leon-Couch, 5–9 Señalización Pasabanda Modulada Binaria (OOK), Código Morse Wikipedia , Telégrafo Wikipedia, Recommendation ITU-R M.1677-1 (10/2009) International Morse code,

Dato Histórico – 1844 Samuel F. B. Morse muestra la línea de telégrafo en Baltimore, MD y Washington, DC

telegrafollave

El código Morse fué muy usado en telegrafía, transmisiones por radio marítimas y aéreas.

Conocido también como alfabeto Morse, cambia los caracteres alfanuméricos a códigos morse combinando puntos '.' y rayas '-'. La separación entre códigos morse se realiza con un espacio ' ', mientras que en la separación entre palabras se usan 3 espacios ' '.

Ejemplo:
un mensaje: ESPOL impulsando la sociedad del conocimiento
. ... .--. --- .-..   .. -- .--. ..- .-.. ... .- -. -.. ---   .-.. .-   ... --- -.-. .. . -.. .- -..   -.. . .-..   -.-. --- -. --- -.-. .. -- .. . -. - --- 

Un tema que permite revisar varios conceptos de telecomunicaciones es el telégrafo y el código Morse.

Los bloques de desarrollo usados en ésta sección se presentan el el siguiente diagrama

morsebloques


Codificador en Python

La traducción entre un caracter del alfabeto a un código morse se puede facilitar con una función dedicada a ésta tarea.

Para buscar un equivalente de un caracter en una tabla de conversión a código, por facilidad de usar como índice un caracter se propone usar un diccionario de python.

Algoritmo en Python

# Código Morse -  codificador
# propuesta: edelros@espol.edu.ec

def morsecodec(caracter):
    equivale={
        'A':'.-', 'B':'-...', 'C':'-.-.', 
        'CH':'----', 'D':'-..', 'E':'.', 
        'F':'..-.', 'G':'--.', 'H':'....', 
        'I':'..', 'J':'.---', 'K':'-.-',
        'L':'.-..', 'M':'--', 'N':'-.', 
        'Ñ':'--.--', 'O':'---', 'P':'.--.', 
        'Q':'--.-', 'R':'.-.', 'S':'...', 
        'T':'-', 'U':'..-', 'V':'...-',
        'W':'.--', 'X':'-..-', 'Y':'-.--', 
        'Z':'--..',
        '0':'-----', '1':'.----', '2':'..---', 
        '3':'...--', '4':'....-', '5':'.....', 
        '6':'-....', '7':'--...', '8':'---..', 
        '9':'----.', 
        '.':'.-.-.-', ',':'-.-.--', '?':'..--..', 
        '"':'.-..-.', '!':'--..--', ' ':' '}
    caracter=caracter.upper()
    codigo=equivale[caracter]
    return(codigo)

El programa para cambiar un mensaje a su versión morse se simplifica usando la función anterior.

# INGRESO
mensaje = input('un mensaje: ')
# mensaje= 'ESPOL impulsando la sociedad del conocimiento'

# PROCEDIMIENTO
n = len(mensaje)
traducido = ''
for caracter in mensaje:
    traducido = traducido + morsecodec(caracter) + ' '

# SALIDA
print(traducido)

La ejecución del programa y la función tiene el resultado mostrado en el ejemplo.

un mensaje: ESPOL impulsando la sociedad del conocimiento
. ... .--. --- .-..   .. -- .--. ..- .-.. ... .- -. -.. ---   .-.. .-   ... --- -.-. .. . -.. .- -..   -.. . .-..   -.-. --- -. --- -.-. .. -- .. . -. - --- 

Decodificador en Python

Para realizar el proceso inverso al codificador, se ingresa un código morse obtenido de un receptor a un decodificador.

Ejemplo:

mensaje en morse:
. ... .--. --- .-.. .. -- .--. ..- .-.. ... .- -. -.. --- .-.. .- ... --- -.-. .. . -.. .- -.. -.. . .-.. -.-. --- -. --- -.-. .. -- .. . -. - ---
ESPOL IMPULSANDO LA SOCIEDAD DEL CONOCIMIENTO

telegraforeceptor
telégrafo receptor

Decodificar Morse requiere usar una tabla de equivalentes descrita en el estándar internacional (ITU), en el orden contrario al codificador.

En un mensaje morse, las palabras son separadas por tres espacios ' '; en una palabra, cada código se separa por un espacio ' '.

Algoritmo en Python

La traducción de un codigo morse a un caracter del alfabeto, se puede realizar con una función.
De forma semejante al codificador, se usa la tabla de equivalentes como un diccionario.

# Código Morse -  DECOdificador
# propuesta: edelros@espol.edu.ec

def morsedeco(codigo): 
    equivale={ 
        '.-':'A', '-...':'B', '-.-.':'C', 
        '----':'CH', '-..':'D', '.':'E', 
        '..-.':'F', '--.':'G', '....':'H', 
        '..':'I', '.---':'J', '-.-':'K',
        '.-..':'L', '--':'M', '-.':'N', 
        '--.--':'Ñ', '---':'O', '.--.':'P', 
        '--.-':'Q', '.-.':'R', '...':'S', 
        '-':'T', '..-':'U', '...-':'V',
        '.--':'W', '-..-':'X', '-.--':'Y', 
        '--..':'Z',
        '-----':'0', '.----':'1', '..---':'2', 
        '...--':'3', '....-':'4', '.....':'5', 
        '-....':'6', '--...':'7', '---..':'8', 
        '----.':'9', 
        '.-.-.-':'.', '-.-.--':',', '..--..':'?', 
        '.-..-.':'"', '--..--':'!', '   ':' ', 
        ' ':' '}
    caracter=equivale[codigo]
    return(caracter)

El programa para cambiar un mensaje morse al alfabeto se simplifica usando la función anterior.

La ejecución del programa y la función tiene el resultado mostrado en el ejemplo.

# INGRESO
traducido = input('mensaje en morse: ')
# traducido='. ... .--. --- .-..   .. -- .--. ..- .-.. ... .- -. -.. ---   .-.. .-   ... --- -.-. .. . -.. .- -..   -.. . .-..   -.-. --- -. --- -.-. .. -- .. . -. - --- '
    
# PROCEDIMIENTO
mensaje  = ''
palabras = traducido.split('   ')
for unapalabra in palabras:
    letras = unapalabra.split(' ')
    for unaletra in letras:
        mensaje = mensaje+morsedeco(unaletra)
    mensaje = mensaje + ' '

# SALIDA
print('mensaje decodificado: ')
print(mensaje)

mensaje en morse:

. ... .--. --- .-.. .. -- .--. ..- .-.. ... .- -. -.. --- .-.. .- ... --- -.-. .. . -.. .- -.. -.. . .-.. -.-. --- -. --- -.-. .. -- .. . -. - ---

mensaje decodificado:
ESPOL IMPULSANDO LA SOCIEDAD DEL CONOCIMIENTO