Benutzer-Werkzeuge

Webseiten-Werkzeuge


ss15:taktrueckgewinnung_1.1

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:taktrueckgewinnung_1.1 [2015/10/02 22:52]
m.schramm [2. clockrec]
ss15:taktrueckgewinnung_1.1 [2016/05/10 14:46] (aktuell)
Zeile 3: Zeile 3:
 Die Taktrückgewinnung wurde hier durch ''​clockrec''​ realisiert, die Funktion liefert die Taktverschiebung der Aufnahme. Mit Taktverschiebung ist hier der Abstand bis zum Anfang des ersten vollen Takts der Aufnahme gemeint, hier als ''​dt''​ bezeichnet. Ausgehend von dieser kann man den übrigen Teil der Aufnahme in Abschnitte mit der Länge eines Takts einteilen. Dabei bleibt allerdings auch am Ende der Aufnahme ein Rest übrig, welcher nicht verarbeitet werden kann und entweder weg fällt oder im darauf folgenden Aufnahmestück verarbeitet wird. Die Taktrückgewinnung wurde hier durch ''​clockrec''​ realisiert, die Funktion liefert die Taktverschiebung der Aufnahme. Mit Taktverschiebung ist hier der Abstand bis zum Anfang des ersten vollen Takts der Aufnahme gemeint, hier als ''​dt''​ bezeichnet. Ausgehend von dieser kann man den übrigen Teil der Aufnahme in Abschnitte mit der Länge eines Takts einteilen. Dabei bleibt allerdings auch am Ende der Aufnahme ein Rest übrig, welcher nicht verarbeitet werden kann und entweder weg fällt oder im darauf folgenden Aufnahmestück verarbeitet wird.
 ===== 2. clockrec ===== ===== 2. clockrec =====
-Wichtig ist, dass der Funktion mitgeteilt wird mit welcher Taktlänge und auf welcher Taktfrequenz gesendet wird. Das wird hier am Anfang der Funktion ​festgelegt, kann aber auch über globale Variablen geschehen. Nun wird über einen digitalen [[https://​de.wikipedia.org/​wiki/​Butterworth-Filter|Butterworth-Filter]] das Signal mit der Taktfrequenz aus der Aufnahme herausgefiltert. Dabei sind ''​a''​ und ''​b''​ Variablen, die von der Filter-Funktion benötigt werden, welche dann das gefilterte Signal ''​yf''​ zurück liefert. Jetzt wird die Hüllkurve um den positiven Bereich des gefilterten Signals gebildet. Das geschieht mithilfe der [[https://​de.wikipedia.org/​wiki/​Hilbert-Transformation|Hilbert-Transformation]]. Das so erhaltene Signal ''​yh''​ ist ein binäres Signal, welches die zwei Zustände An und Aus annehmen kann und dem gesendeten Taktsignal entspricht. Daraus wollen wir jetzt die Zeitpunkte der Taktgrenzen ermitteln.+Wichtig ist, dass der Funktion mitgeteilt wird mit welcher Taktlänge und auf welcher Taktfrequenz gesendet wird. Das wird hier für eine bessere Übersichtlichkeit mit lokalen Variablen ​festgelegt, kann sonst aber auch über globale Variablen geschehen. Nun wird über einen digitalen [[https://​de.wikipedia.org/​wiki/​Butterworth-Filter|Butterworth-Filter]] das Signal mit der Taktfrequenz aus der Aufnahme herausgefiltert. Dabei sind ''​a''​ und ''​b''​ Variablen, die von der Filter-Funktion benötigt werden, welche dann das gefilterte Signal ''​yf''​ zurück liefert. Jetzt wird die Hüllkurve um den positiven Bereich des gefilterten Signals gebildet. Das geschieht mithilfe der [[https://​de.wikipedia.org/​wiki/​Hilbert-Transformation|Hilbert-Transformation]]. Das so erhaltene Signal ''​yh''​ ist ein binäres Signal, welches die zwei Zustände ​'An' ​und 'Aus' ​annehmen kann und dem gesendeten Taktsignal entspricht. Daraus wollen wir jetzt die Zeitpunkte der Taktgrenzen ermitteln. ​Dazu muss eine Schranke ''​s''​ festgelegt werden, die darstellt ab wann ein Signal als '​An'​ gilt. Diese berechnet sich hier als ein Fünftel des Maximalwerts der Hüllkurve. Nun werden die Indizes ermittelt, bei welchen diese Schranke (mit einer Toleranz ''​tol''​) durchschritten wird. Das sind die Stellen wo ein Takt endet und der nächste anfängt. Wenn man diese Werte in ''​idx''​ ganzzahlig durch die Taktlänge in Samples teilt erhält man die Taktverschiebung. Aus diesen vielen Werten in ''​dt''​ wird jetzt noch der Mittelwert gebildet und man erhält die gesuchte Taktverschiebung,​ die für die Decodierung benötigt wird. 
 + 
 +{{:​ss15:​phase_1.jpg?​direct&​200|ursprüngliche Aufnahme}} **⇒** {{:​ss15:​phase_2.jpg?​direct&​200|Filterung der Takt-Frequenz}} **⇒** {{:​ss15:​phase_3.jpg?​direct&​200|Umwandlung in Beträge}} **⇒** {{:​ss15:​phase_4.jpg?​direct&​200|Hillbert-Kurve}} 
 <code python> <code python>
 def clockrec(y):​ def clockrec(y):​
Zeile 10: Zeile 13:
  f_takt = 12600  f_takt = 12600
  
- b, a = signal.butter(4,​ [(f_takt-100)*2./​RATE,​ (f_takt+100)*2./​RATE],​ btype="​bandpass"​) + b, a = signal.butter(4,​ [(f_takt-100)*2./​RATE,​ (f_takt+100)*2./​RATE],​ btype="​bandpass"​) ​# Parameter für Butterworth-Filter 
- yf = signal.lfilter(b,​a,​y) + yf = signal.lfilter(b,​a,​y) ​# Taktfrequenzfilter 
- yh = np.abs(signal.hilbert(yf))+ yh = np.abs(signal.hilbert(yf)) ​# Hilbert-Transformation
  
  ma = max(y)  ma = max(y)
Zeile 23: Zeile 26:
  return dt  return dt
 </​code>​ </​code>​
 +{{:​ss15:​takt.png?​direct&​700 |Taktsignal mit Schranken}}
ss15/taktrueckgewinnung_1.1.1443819161.txt.gz · Zuletzt geändert: 2016/05/10 14:46 (Externe Bearbeitung)