Zum Inhalt

📡 Radio-Geheimnachricht

Im Kapitel über Komprimierung haben wir gelernt, wie man die Größe einer Nachricht durch verlustfreie Komprimierung reduzieren kann:

  1. Einen geeigneten Codebaum für die Binärkodierung erstellen.
  2. Die am häufigsten vorkommenden Zeichen bestimmen.
  3. Um einen kürzeren Code zu erhalten, werden diese Zeichen um eine Position nach links verschoben.
  4. Das Problem der Mehrfachbedeutungen wird gelöst, indem die seltenen Zeichen auf die freien Positionen rechts verschoben werden.

Nun wollen wir diese Methode anwenden, um eine komprimierte kodierte Nachricht von einem micro:bit zum anderen mit Hilfe eines Funksignals zu übertragen.


📝 Aufgabe: Nachrichten zwischen micro:bits per Radio senden

Sie arbeiten für einen internationalen Spionagedienst und haben herausgefunden, dass die DNA-Sequenz ATAAAAAATAGAGAAATAAACAA mit dem DNA-Replikationsprozess in Zusammenhang stehen könnte. Senden Sie diese kodierte Sequenz mit einem Radio-Signal über Ihren supergeheimen micro:bit-Sender an Ihren Kontakt.

Tipp:
Schauen Sie im Handbuch des geheimen Kommunikationssystems nach und denken Sie daran, dass Sie die Länge der Nachricht auf ein Minimum reduzieren müssen, um nicht aufgespürt zu werden.


💡 Ideen für den Radio-Code

Um zwei micro:bits V2 für die Nachrichtenkommunikation mit Python zu programmieren, können Sie die eingebaute Funkfunktionalität nutzen:

from microbit import *
import radio

# Initialize the radio
radio.on()
radio.config(channel=7)  # Choose a channel for communication

while True:
    # Check for incoming messages
    incoming = radio.receive()
    if incoming:
        display.scroll(incoming)  # Display the received message
    if button_a.was_pressed():
        radio.send("Hello, micro:bit!")  # Send a message when button A is pressed
    sleep(1000)  # Add a small delay to reduce CPU usage

Dieser Code richtet das Radio auf beiden micro:bits ein und konfiguriert sie so, dass sie auf demselben Kanal kommunizieren. Jedes micro:bit prüft kontinuierlich auf eingehende Nachrichten, und wenn eine Nachricht empfangen wird, zeigt es die Nachricht auf seinem LED-Display an. Ausserdem wird durch Drücken der Taste A die Nachricht "Hallo, micro:bit!" an das andere micro:bit gesendet.

💡 Ideen für die präfixfreie Codierung

Kopieren
# Codification
def codify_gene_sequence(sequence):
    codification = {'A': '0', 'C': '10', 'G': '110', 'T': '111'}
    codified_sequence = ''.join(codification[base] for base in sequence)
    return '01101111010110111' + codified_sequence

Example usage

gene_sequence = 'ATAAAAAATAGAGAAATAAACAA' encoded_sequence = codify_gene_sequence(gene_sequence)

print('Original Gene Sequence:', gene_sequence) print('Encoded Sequence:', encoded_sequence)

💡 Decodierung

Kopieren
# Decoding
def decode_gene_sequence(encoded_sequence):
    codification = {}
    codification_lengths = []
    codification_bits = encoded_sequence[:8]  # Read the first 8 bits for codification lengths

    # Read the codification lengths for A, C, G, and T
    for i in range(4):
        codification_length_bits = codification_bits[i*2:i*2+2]  # Read next 2 bits
        codification_length = int(codification_length_bits, 2)  # Convert binary string to integer
        codification_lengths.append(codification_length)

    # Read the codification definition for A, C, G, and T
    current_bit = 8
    for i in range(4):
        codon = encoded_sequence[current_bit:current_bit+codification_lengths[i]]  # Read next n bits based on codification length
        nucleotide = chr(ord('A') + i)  # Assume nucleotide order: A, C, G, T
        codification[codon] = nucleotide
        current_bit += codification_lengths[i]

    codified_sequence = encoded_sequence[current_bit:]  # Remove the codification information
    decoded_sequence = ''
    current = ''
    for bit in codified_sequence:
        current += bit
        if current in codification:
            decoded_sequence += codification[current]
            current = ''
    return decoded_sequence

def replace_characters(string):
    string = string.replace('A', 'A')
    string = string.replace('B', 'C')
    string = string.replace('C', 'G')
    string = string.replace('D', 'T')
    return string

📝 Aufgabe: Morsecode übermitteln

Versuchen Sie doch, den Morse-Code mittels «Radio» zu übermitteln.
Anleitungen, wie man «Radio» mit den micro:bits nutzt, finden Sie im Online-Editor.

Leider können nur Strings übermittelt werden. Sie müssen also den Morse-Code von Boolean noch in einen String übersetzen, dann können Sie alles übermitteln.

📝 Aufgabe: Morsecode decodieren

Können Sie den erhaltenen Morsecode auch decodieren?