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?
Übertragung zwischen Fernbedienung und Messeinheit, d.h. es werden Steuerkommandos und Messwerte übertragen
Peterle schrieb: > vorher > durch einen Scrambler schieben, um ein gleichanteilsfreies Signal zu > haben. Das verstehe ich jetzt nicht.
Willst du die Daten selbst modulieren? Das macht doch alles dein RFM 12
>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...
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
Alternative wäre noch die http://de.wikipedia.org/wiki/Eight-to-Fourteen-Modulation Gute Nacht Jobst
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.
>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.
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.
>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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.