mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Scrambler für Funkstrecke


Autor: Peterle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte die Daten die ich mit einem RFM12 Modul übertrage vorher 
durch einen Scrambler schieben, um ein gleichanteilsfreies Signal zu 
haben. Recherchen im Netz haben ergeben dass man so etwas mit linear 
rückgekoppelten Schieberegistern (LFSR) macht.
http://de.wikipedia.org/wiki/Scrambler_%28Telekomm...
Es gibt auch noch verschiedene Untertypen (additive und multiplikative) 
Scrambler, nur bin ich mir unschlüssig welcher Typ und welche 
Polynomlänge für meinen Zweck der geeignete ist. Es gibt seit langem 
einen "prominenten" Vertreter, nämlich den G3RUH Scrambler für 9k6 
Packet Radio im Amateurfunk. In einer Beschreibung dieses Scramblers 
heißt es dass "der Scrambler als rückgekoppeltes Schieberegister 
realisiert wird, der Descrambler als nicht-rückgekoppeltes". Wie 
funktioniert das?

Autor: Andreas K. (derandi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Woher stammen die Daten?

Autor: Peterle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Übertragung zwischen Fernbedienung und Messeinheit, d.h. es werden 
Steuerkommandos und Messwerte übertragen

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peterle schrieb:
> vorher
> durch einen Scrambler schieben, um ein gleichanteilsfreies Signal zu
> haben.

Das verstehe ich jetzt nicht.

Autor: Benjamin S. (recycler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Willst du die Daten selbst modulieren? Das macht doch alles dein RFM 12

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Darum verstehe ich´s ja nicht ;-)

Autor: Peterle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Willst du die Daten selbst modulieren? Das macht doch alles dein RFM 12
Ja, der RFM12 moduliert die Daten die ihm gegeben werden als FSK. Das 
funktioniert meines Erachtens folgendermaßen; man hat eine 
Mittenfrequenz f0, z.B. 434,700 MHz. Würde man nun eine Dauer-0 senden, 
so hätte man im Frequenzspektrum einen Strich, ausgehend von 180 kHz 
Frequenzhub, bei 434,610 MHz, bei einer Dauer-1 bei 434,790 MHz. Der 
Empfänger muss nun anhand des empfangenen Signals entscheiden, ob es 
sich um eine 1 oder eine 0 handelt. Da f0 von TX und RX nie gleich sind 
(Quarz, Temperatur, Toleranzen...), gibt es im RX eine AFC (automatische 
Frequenznachführung). Diese AFC funktioniert aber nicht, wenn der RX die 
ganze Zeit nur eine Dauer-0 oder 1 empfangen würde, weil der RX dann f0 
nicht "sieht". Genau aus diesem Grund gibt es auch die Präambel (0xAA) 
am Anfang, damit die AFC schon mal einregeln kann. Bei langen 0- oder 
1-Folgen driftet also der RX weg, weshalb man versucht das zu sendende 
Signal "gleichanteilsfrei" zu machen. Eine Dauer-0 oder 1 wäre quasi DC, 
0xAA oder 0x55 die höchste vorkommende Frequenz im Spektrum des 
Datensignals. Ein Scrambler macht nun aus den Eingangsdaten des TX (auch 
z.B. Dauer-0) eine Pseudozufallsfolge, um das Spektrum im unteren 
Frequenzbereich zu beschränken.
Eigentlich ist das ganze um o.g. Link schon ganz gut erklärt, nur ist 
mir die Ausführung noch etwas unklar, nach der ich hier gefragt habe...

Autor: Jobst M. (jobstens-de)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Peterle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kenne ich, allerdings dann nur noch halbe Bitrate :-( ...

Autor: Jobst M. (jobstens-de)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei selber Bitrate wirst Du immer ein Muster finden, welches nur 1en 
oder 0en am Ausgang erzeugt. Oder Du benötigst auf Empfängerseite eine 
Glaskugel ...


Gruß

Jobst

Autor: Jobst M. (jobstens-de)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alternative wäre noch die
http://de.wikipedia.org/wiki/Eight-to-Fourteen-Modulation


Gute Nacht

Jobst

Autor: oszi40 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Statt viel Aufwand in den Scrambler zu stecken, würde ich lieber mehr 
Prüfzahlen verschicken um kaputte Datenpakete rechtzeitig zu erkennen.

Das ist zwar nicht Deine Lösung, aber die Erkenntnis, daß verschlüsseln 
und scrambeln auch Zeit kostet und mehr Fehlermöglichkeiten bietet.

Autor: Stuntman Bob (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ein Scrambler macht nun aus den Eingangsdaten des TX (auch
>z.B. Dauer-0) eine Pseudozufallsfolge, um das Spektrum im unteren
>Frequenzbereich zu beschränken.

Ein Scrambler vertauscht lediglich Datenpakete in der Reihenfolge 
ähnlich wie bei einer Permutation. Das nützt die aber nichts. Für deine 
Zwecke reicht es völlig aus, wenn du die zu übertragenden Bytes statisch 
mit einer alterniernden Bitzahlenfolge verknüpfst (xor). Die einfachste 
Form wäre das 1. Byte mit 0x55 zu verbinden und das zweite mit 0xaa. 
Besser ist es mehrere Bytes zu definieren, z.B. 8 Bytes in einer Tabelle 
oder eben den LFSR (bzw. ein CRC-Summengenerator) zu benutzen. Ich 
empfehle dir einfach 8 Zufallsbytes die du statisch wählen kannst.

Autor: Udo Schmitt (urschmitt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal ein ganze blöde Idee:
Du willst doch nur dauer 1sen und dauer 2en vermeiden wegen der 
Frequenznachführung.
Warum machst du nicht einfach eine RLE Kompression? Dann sparst Du bei 
vielen 1 oder 0 sogar extrem Zeit und RLE ist sehr einfach zu 
implementieren und braucht wenig Rechenzeit.
Edit: Mit der gesparten Zeit kannst Du dann ggf. noch mit den hier schon 
beschriebenen Methoden zusätzlich eine noch bessere Gleichverteilung 
erzielen.
Edit2: Du kannst natürlich auch bessere Kompressionsverfahren nutzen. 
Die haben dann die angenehme Eigenschaft, daß man eher verteilte 1sen 
und 0en bekommt, brauchen halt aber auch mehr Rechenzeit und 
Programmieraufwand.

Autor: Peterle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Besser ist es mehrere Bytes zu definieren, z.B. 8 Bytes in einer Tabelle
>oder eben den LFSR (bzw. ein CRC-Summengenerator) zu benutzen.
Genau das meine ich; es geht ja darum, dass die Warscheinlichkeit, dass 
nach dem Scrambler nur noch Nullen oder Einsen rauskommen möglichst 
gering ist, und das geht mit einem Scrambler am "vollendetsten". Einfach 
mit 0xAA55 verxodern ist vom Prinzip her das Gleiche, nur primitiver, so 
dass die o.g. Warscheinlichkeit viel größer ist. Ausserdem sollte doch 
durch vernünftiges Scrambeln die Biterrorrate geringer werden?

Mal ganz konkret gefragt, wie implementiert man das hier am besten in C 
(irgendwie krieg ich's auch hin, die Betonung liegt hier auf "am 
besten"), und vor allem das Wichtigste, womit muss das LFSR 
initialisiert werden?

http://www.amsat.org/amsat/articles/g3ruh/109/fig03.gif

Schönen Gruß
Peterle

Autor: Frank Schrader (herrschrader)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Schau mal auf Seite 32 vom Datenblatt des CC1100.
Dort nennt sich das Verfahren "Data Whitening". Es wird eine 9-bit 
Pseudo-Zufallssequenz benutzt. Die 9 Bit werden alle mit 1 
initialisiert.

Zur Implementierung in C steht etwas bei Wikipedia (die englische!) 
unter "Linear Feedback Shift Register".
In C sind Galois LFSR wohl besonders effizient zu implementieren.

Autor: Jobst M. (jobstens-de)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die oben von mir genannte EFM ist genau für den Zweck entwickelt worden.

8-Bit Information werden in 14-Bit untergebracht.

Dabei hat man Mindest- und Maximalzeiten bei den Pegeln.
Mindestzeit ist 3 Bits, Maximalzeit 11 Bits.
Die Mindestzeit legt damit die höchste Frequenz und die Maximalzeit die 
niedrigste Frequenz fest.
Da die Mindestzeit 3 Bit beträgt, kann die Maximale Kanalbitrate 6mal so 
hoch sein, wie die höchste übertragbare Frequenz. Durch die 
Kanalcodierung erhält man allerdings keine großartig höhere Datenrate.

Gesichert ist aber in jedem Fall der Wechsel des Pegels nach 11-Bit.


Eine weitere Methode, die mir gerade im Kopf umherschwirrt, ist die 
Übermittlung eines 9. Bits zu den 8 Datenbits, welches die Polarität der 
Daten anzeigt.
Der Sender entscheidet anhand der vorherigen Daten und des aktuellen 
Datenworts, ob er dieses Invertiert oder nicht.


Gruß

Jobst

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.