📡 Radio-Geheimnachricht¶
Im Kapitel über Komprimierung haben wir gelernt, wie man die Größe einer Nachricht durch verlustfreie Komprimierung reduzieren kann:
- Einen geeigneten Codebaum für die Binärkodierung erstellen.
- Die am häufigsten vorkommenden Zeichen bestimmen.
- Um einen kürzeren Code zu erhalten, werden diese Zeichen um eine Position nach links verschoben.
- 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?