Benutzer-Werkzeuge

Webseiten-Werkzeuge


ss15:tonerzeugung

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
ss15:tonerzeugung [2015/09/23 16:07]
m.schramm [1.Ziel]
ss15:tonerzeugung [2016/05/10 14:46] (aktuell)
Zeile 2: Zeile 2:
  
 ===== 1.Ziel ===== ===== 1.Ziel =====
-Die Funktion zur Tonerzeugung soll zwei Aufgaben erfüllen: Sie soll eine Liste mit den zu sendenden Bits in eine Sequenz von Sinustönen umwandeln. Diese Sequenz besteht aus einer Abfolge von zwei Tönen mit jeweils einer Frequenz für die ''​0''​ und die ''​1''​ und einer festgelegten Taktlänge. Zum anderen soll sie auf einer dritten Frequenz eine Folge von Tönen und Pausen senden, deren Länge jeweils dem Sendetakt entsprechen. Diese Taktfrequenz wird zur Taktrückgewinnung bei der [[Tonverarbeitung]] genutzt.+Die Funktion zur Tonerzeugung soll zwei Aufgaben erfüllen: Sie soll eine Liste mit den zu sendenden Bits in eine Sequenz von Sinustönen umwandeln. Diese Sequenz besteht aus einer Abfolge von zwei Tönen mit jeweils einer Frequenz für die ''​0''​ und die ''​1''​ und einer festgelegten Taktlänge. Zum anderen soll sie auf einer dritten Frequenz eine Folge von Tönen und Pausen senden, deren Länge jeweils dem Sendetakt entsprechen. Diese Taktfrequenz wird zur [[Tonverarbeitung#​Taktrückgewinnung|Taktrückgewinnung]] ​bei der [[Tonverarbeitung]] genutzt.
 ===== 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>
 +def code(l):
 + '''​erzeugt aus der Bit-Liste l Töne und Taktsignal'''​
 + f_0 = 13000 # Frequenz zur codierung der 0
 + f_1 = 12800 # Frequenz zur codierung der 1
 + f_takt = 12600 # Taktfrequenz
 + dauer_bit = 0.05 # Dauer des Signals für 1 Bit in Sekunden
 + t = [] # List zur Speicherung des Taktsignals
 +
 + for i in range(0, len(l)): # Erzeugung des Taktsignals mit der Länge von l
 + t.append(i%2)
 +
 + # Erzeugen der Sinus-Signale
 + signale=[sinewave(f_0,​ RATE, dauer_bit),​sinewave(f_1,​ RATE, dauer_bit)]
 + taktsignale=[sinewave(f_takt,​ RATE, dauer_bit), np.zeros(dauer_bit*RATE)]
 +
 + signal=np.concatenate([signale[x] for x in l])
 + taktsignal = np.concatenate([taktsignale[x] for x in t])
 +
 + signal = (signal+taktsignal)/​2
 + playsnd(signal,​RATE)
 +</​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 33: 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]}}
ss15/tonerzeugung.1443017252.txt.gz · Zuletzt geändert: 2016/05/10 14:46 (Externe Bearbeitung)