Forum: Mikrocontroller und Digitale Elektronik Scrambler für Funkstrecke


von Peterle (Gast)


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_%28Telekommunikation%29
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?

von Andreas K. (derandi)


Lesenswert?

Woher stammen die Daten?

von Peterle (Gast)


Lesenswert?

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

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

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

Das verstehe ich jetzt nicht.

von Benjamin S. (recycler)


Lesenswert?

Willst du die Daten selbst modulieren? Das macht doch alles dein RFM 12

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Darum verstehe ich´s ja nicht ;-)

von Peterle (Gast)


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...

von Jobst M. (jobstens-de)


Lesenswert?


von Peterle (Gast)


Lesenswert?

Kenne ich, allerdings dann nur noch halbe Bitrate :-( ...

von Jobst M. (jobstens-de)


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

von Jobst M. (jobstens-de)


Lesenswert?

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


Gute Nacht

Jobst

von oszi40 (Gast)


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.

von Stuntman Bob (Gast)


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.

von Udo S. (urschmitt)


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.

von Peterle (Gast)


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

von Frank S. (herrschrader)


Angehängte Dateien:

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.

von Jobst M. (jobstens-de)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.