Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ss15:tonerzeugung [2015/09/26 16:51] m.schramm [2.1 Variante A] |
ss15:tonerzeugung [2016/05/10 14:46] (aktuell) |
||
---|---|---|---|
Zeile 5: | Zeile 5: | ||
===== 2. code-Funktion ===== | ===== 2. code-Funktion ===== | ||
==== 2.1 Variante A ==== | ==== 2.1 Variante A ==== | ||
+ | Es wird zuerst über den Rest der Teilung der Indizes von ''l'' durch 2 eine Folge von abwechselnd Nullen und Einsen erzeugt. Diese Liste besitzt die gleiche Länge wie ''l'' und dient zur Erzeugung des Taktsignals. Dann werden jeweils eine Liste für das Datensignal (''signale'') und das Taktsignal (''taktsignale'') angelegt. Diese Listen enthalten die Daten für die Erzeugung der jeweils zwei verschiedenen Elemente der Signale. Also zwei verschiedene Sinustöne beim Datensignal und ein Sinuston und eine Pause beim Taktsignal. Mithilfe dieser Listen werden nun die endgültigen Signale in Form der Listen ''signal'' und ''taktsignal'' erstellt. Dafür wird jeweils die Liste ''l'' bzw. ''t'' durchgegangen. Je nach dem ob es dich um eine ''0'' oder ''1'' handelt wird der entsprechende Ton der jeweiligen Liste hinzugefügt. Zum Schluss werden die beiden endgültigen Signale noch überlagert und mit ''playsnd'' aus ''schallwerkzeuge.py'' abgespielt. | ||
<code python> | <code python> | ||
def code(l): | def code(l): | ||
'''erzeugt aus der Bit-Liste l Töne und Taktsignal''' | '''erzeugt aus der Bit-Liste l Töne und Taktsignal''' | ||
- | f_0 = 12900 # Frequenz zur codierung der 0 | + | f_0 = 13000 # Frequenz zur codierung der 0 |
f_1 = 12800 # Frequenz zur codierung der 1 | f_1 = 12800 # Frequenz zur codierung der 1 | ||
f_takt = 12600 # Taktfrequenz | f_takt = 12600 # Taktfrequenz | ||
dauer_bit = 0.05 # Dauer des Signals für 1 Bit in Sekunden | dauer_bit = 0.05 # Dauer des Signals für 1 Bit in Sekunden | ||
t = [] # List zur Speicherung des Taktsignals | t = [] # List zur Speicherung des Taktsignals | ||
+ | |||
for i in range(0, len(l)): # Erzeugung des Taktsignals mit der Länge von l | for i in range(0, len(l)): # Erzeugung des Taktsignals mit der Länge von l | ||
- | if i % 2 == 0: | + | t.append(i%2) |
- | t.append(0) | + | |
- | else: | + | |
- | t.append(1) | + | |
# Erzeugen der Sinus-Signale | # Erzeugen der Sinus-Signale | ||
Zeile 30: | Zeile 29: | ||
</code> | </code> | ||
==== 2.2 Variante B ==== | ==== 2.2 Variante B ==== | ||
+ | Die Variante B funktioniert ähnlich wie Variante A, allerdings wird hier von Anfang an die vier auftretenden Fälle unterschieden und ausgehend davon die Töne erzeugt. | ||
Wir wissen, dass jeder Datentyp ein Vielfaches von 4 als Bit-Anzahl besitzt und damit eine gerade Anzahl hat. So endet bei einem ständigen Wechsel zwischen An/Aus die Takt-Frequenz immer gleich. Wenn wir nun neben der 0 und 1 Codierung eine Takt-Frequenz als zusätzliche Info miteinbringen wollen, so kommen wir auf 4 verschiedene Kombinationen an Tönen. Die erhaltene Bit-Liste aus der Datei wird deshalb umgeschrieben. Durch die Hinzugabe der Takt-Frequenz geht die 0 und 1 Codierung auch nicht verloren, da die Frequenzen keine Auswirkungen aufeinander haben. Sehr wichtig ist, dass auf jeder geraden Stelle der Liste die Takt-Frequenz gespielt wird, damit es auch damit endet. Dies ist für die Taktrückgewinnung relevant! | Wir wissen, dass jeder Datentyp ein Vielfaches von 4 als Bit-Anzahl besitzt und damit eine gerade Anzahl hat. So endet bei einem ständigen Wechsel zwischen An/Aus die Takt-Frequenz immer gleich. Wenn wir nun neben der 0 und 1 Codierung eine Takt-Frequenz als zusätzliche Info miteinbringen wollen, so kommen wir auf 4 verschiedene Kombinationen an Tönen. Die erhaltene Bit-Liste aus der Datei wird deshalb umgeschrieben. Durch die Hinzugabe der Takt-Frequenz geht die 0 und 1 Codierung auch nicht verloren, da die Frequenzen keine Auswirkungen aufeinander haben. Sehr wichtig ist, dass auf jeder geraden Stelle der Liste die Takt-Frequenz gespielt wird, damit es auch damit endet. Dies ist für die Taktrückgewinnung relevant! | ||
Zeile 57: | Zeile 57: | ||
playsnd(signal,RATE) | playsnd(signal,RATE) | ||
</code> | </code> | ||
+ | {{:ss15:code.png?direct&700 |erzeugtes Signal zur Bit-Liste [0,1,1,0,0,1,0,0,0,1,0,1,0,0,1,1]}} |