Hallo zusammen, ich habe eine knifflige Aufgabe bekommen und bin mir noch nicht so ganz sicher ob und wie das geht. Es geht darum, das ich über den UART eines AT90CAN128 einen String oder eine Bitfolge schicke, die ich an einem anderen Controller des selben Typs wieder empfangen soll. Dieser Contoller soll die Bittfolge nun einer LSFR (Was immer das auch ist) unterziehen und wieder an den Sender zurückschicken. Dieser soll nun die Bitfehler über die Zeit ermitteln. Weiß von euch jemand was eine LSFR ist? Ist das ein bestimmtes Register oder ein Algorithmus? Wie kann ich in meinem Fall sowas am besten implimentieren? Das senden und empfangen der beiden UARTS geht schon, die Bitfehlerermittlung noch nicht..... Gibts da irgendwo C Code? Danke schon mal
Das sind Linear Feedback Shift Register. Sie werden zur Erzeugung von Pseudozufallssequenzen benutzt. Siehe auch http://www.ibrtses.com/simulations/lfsr.html
@ rene (Gast) >Das sind Linear Feedback Shift Register. Sie werden zur Erzeugung von >Pseudozufallssequenzen benutzt. Siehe auch >http://www.ibrtses.com/simulations/lfsr.html Der OP schrieb aber LSFR und nicht LFSR. Wechsstaben verbuchselt? ;-) MFG Falk
Sry... LFSR ist schon richtig. Besitzt mein AT90CAN128 ein solches Register? Kann ich mit diesem Contoller soetwas überhaupt machen?
Man kann die Funktion einfach mit Software nachbilden. Je nach Zweck nimmt man Laengere oder Kuerzere. Hier denk ich sollten 16bit genuegen.
Hi Rene, ja ich denke 16Bit sind ausreichend für meine Zwecke. Ich hab jetzt mal ein bisschen Gegoogled aber ich versteh noch nicht ganz wie das ganze funktionieren soll. Beispiel: Ich nehme die Zahl 0x15 und sende sie auf den UART. Der andere Contoller empfängt die Zahl und lässt die LFSR Funktion darüber laufen. Das Ergebiss sendet er wie der an den Sender zurück. In der zwischenzeit hat der Sender das selbe mit der 0x15 gemacht und vergleicht nun das empfangene mit dem selber berechneten. Hieraus lässt sich nun die Bitfehlerwahrscheinlichkeit bestimmen?? Hab ich das richtig verstanden? :-)
Hat irgendwer eine C Funktion auf Lager, mit der ich eine solche LFSR softwaremäßig realisieren kann? Wäre mir ne rießen Hilfe...
Das mit der Bitfehlerwahrscheinlichkeit. Ein LFSR ist ein funktion, die Eine lange Folgen von bits erzeugt, die man kennt. Ich hab den gelisteten Ansatz nicht gekannt, und auch nicht verstanden. Daher koennen beide seiten die LFSR laufen lassen, und vergleichen mit dem was kommt. Dan muss man 2 Dinge Zaehlen, alle Bits und die Falschen bits. Der Quotient ist die Fehlerrate
Also könnte ich mit einer LFSR die Bitfehlerwahrscheinlichkeit meiner Übertragungsstrecke bestimmen? Wie muss eine solche Funktion aussehen? Hat jemand Code dazu??
Hi Christoph, hast Du mit einem LSFR schonmal etwas gemacht? Wie muss eine solche Schiebefkt in C aussehen?
Mhh da die BERT`s wohl nicht mit LSFR's gemacht werden ist ein LSFR auch nicht die richtige Lösung zu meiner Übertragunsanalyse, sehe ich das richtig?
LFSR kann man auch als Pseudo Zufalls Generator betrachten, und mit sowas kann man BERT machen. Wenn du jetzt noch für dein LFSR die richtigen Polynome und Seeds auswählst entsteht eine MLS -> http://de.wikipedia.org/wiki/Maximum_Length_Sequence Und wenn du dir das mal durchliest so erkennst du das statistisch betrachtet eine solche MLS alle machbaren Bitkombinationen im Bitstrom enthält, also ideal als Generator für BERT. Er simuliert also sehr gut die auftretenden Wahrscheinlichkeiten an Bitkombinationen die später bei deiner Kommunikation auftreten könnten. Ein LFSR mit 8Bit oder 16Bit wäre eine gute Wahl. Gruß Hagen
Hey voll gut das sich immer einer von euch auskennt :-) Danke Hagen. Wo bekomme ich jetzt am besten eine C Funktion her, die mir eine solche LFSR mit 8 oder 16 Bit macht? Habe selber keine Ahnung, wie ich da am besten beim programmieren vorgehen würde...
Beginner wrote: > Hey voll gut das sich immer einer von euch auskennt :-) Danke Hagen. > Wo bekomme ich jetzt am besten eine C Funktion her, die mir eine solche > LFSR mit 8 oder 16 Bit macht? Habe selber keine Ahnung, wie ich da am > besten beim programmieren vorgehen würde... Das das immer wieder soooooooo wahnsinnig schwer ist. Du gibst in http://www.google.com die Suchbegriffe "LFSR C" ein und findest ein paar Links in denen jemand Code veröffentlicht hat.
Programmieren ist viel zu früh bei deinem Wissensstand. Als erstes mal musst du lernen was LFSRs sind, und wie man sie "berechnet". Denn die richtige Wahl und das korrekte Berechnen von nicht reduzierbaren Polynomen für die LFSRs steht auch noch auf dem Stundenplan. Ohne solche Polynome bekommst du nämlich keine MLS und somit nicht die statistischen Eigenschaften der LFSRs die du benötigst. Um solche Polynome zu berechnen benötigst du Berechnungen im Galois Field zur Basis 2. Dann musst du auch in der Lage sein solche GFs zu faktorisieren. Je nach Größe des LFSRs entsteht dann ein Testbitstrom den du komplett durchlaufen lassen musst. EIn 8 Bit LFSR als MLS erzeugt also einen 2^8-1 Bit langen Datenstrom den du über die Leitung schicken musst. Wenn alles bei dir richtig läuft wirst du bei den möglichen Polynomen für 8 Bit LFSRs feststellen das es exakt nur 16 solcher Polynome gibt, bzw. 8 und diese als invertierte Kopien nochmal 8 Stück. Bei 12 Bit LFSRs gibt es nur 144 solcher Polynome. Gruß Hagen
Ok, nun mal angenommen ich erzeuge mit einem 8 Bit LSFR Schieberegister und einem Polynom eine folge von Zufallszahlen. Wie kann ich dann am besten meine Übertragungsstrecke testen? Wenn ich die Zahlen einfach über den UART und den Transceiver schicke, weiß ich auf der Empfängerseite ja nicht was ich gesendet habe, ob es nun die richgige Zahl ist oder die falsche? Wie mach ich das am besten? Muss der Empfänger die selben Zahlen erzeugen und dann immer mit den empfangenen vergleichen? Wie berechne ich nun meine Bitfehlerwahrscheinlichkeit?
Es sind deterministische Funktionen, wie bei Wikipedia schon geschrieben. Dh. sie sind zu jeder Zeit nach- bzw. sogar vorausberechenbar, und das immer wieder. Was würde passieren wenn zwei Computer nun zum gleichen Zeitpunkt unabhängig voneinander das gleiche LFSR benutzen und damit einen Bitstrom erzeugen ? Ja, die beiden Bitströme auf Sender und Empfänger Seite wären dann synchron. Bitfehlerwahrscheinlichkeit: Du zählst die falsch empfangenen Bits und diese Anzahl geteilt durch die maximale Länge der MLS (LFSRs) ergibt deinen Gesamtfehler. Die Bitfehlerwahrscheinlichkeit ist im Grunde wohl ein falscher Ausdruck, auf ein Bit bezogen ist sie nämlich immer 50% aus math. Sicht. Gruß Hagen
Beginner wrote: > Ok, > nun mal angenommen ich erzeuge mit einem 8 Bit LSFR Schieberegister und > einem Polynom eine folge von Zufallszahlen. > Wie kann ich dann am besten meine Übertragungsstrecke testen? > Wenn ich die Zahlen einfach über den UART und den Transceiver schicke, > weiß ich auf der Empfängerseite ja nicht was ich gesendet habe, ob es > nun die richgige Zahl ist oder die falsche? Genau. Was folgt jetzt daraus? Es werden wohl beide Seiten die gleichen Berechnungen anstellen muessen. Die Ergebnisse der Berechnungen werden ausgetauscht und mit der jeweils eigenen verglichen. Wenn es keinen Fehler auf der Übertragunsstrecke gab, dann muessen diese identisch sein. Sind sie es nicht, dann gab es daher einen Fehler. > Wie berechne ich nun meine Bitfehlerwahrscheinlichkeit? Indem du die Anzahl der fehlerhaft übertragenen Bits in Relation zu den insgesamt übertragenen Bits setzt. Wenn du 100 Bits übertragen hast und davon waren 5 fehlerhaft, wie groß ist dann der Prozentuale Anteil? Frag jetzt aber bitte nicht nach, wie man einen Prozentwert ausrechnet :-)
Sorry der Nachfrage, es programmiert eben nicht jeder schon seit 20 Jahren Mikrocontroller in C.... Vielen Dank an euch alle, ich denke das müsste ich jetzt in den Griff bekommen, hab jedenfalls ziemlich viel dazu gelernt.
Beginner wrote: > Sorry der Nachfrage, > > es programmiert eben nicht jeder schon seit 20 Jahren Mikrocontroller in > C.... Das hat nichts mit C oder programmieren zu tun sondern mit nachdenken. Die Antwort wäre diesselbe, wenn 2 deiner Kumpels als Endstellen fungieren und die zu testende Strecke eine Telephonverbindung wäre.
Wenn nur der Sender per LFSR seinen Bitstrom erzeugt dann müsste der Empfänger einfach nur ein Echo machen. Also alles was er empfängt sendet er direkt zurück. Da die gleiche Sequenz an Bits nun zweimal übertragen wird musst du deine berechnete Fehlerrate natürlich anpassen ;) Gruß Hagen
Der Link von Rene enthaelt die Xilinx Application Notes, die die Polynome fuer die Maximum Length Shift Register beschreibt. Die Polynome kann man ja nun programmieren. Sollt aufgrund des Schaltbildes nicht allzu schwierig sein.
Wenn der Empfaenger nur ein Echo macht, kann man die Fehler der beiden Richtungen nicht mehr getrennt erfassen. Muss man das denn ueberhaupt ? Wenn nur 2m Kabel dazwischen sind macht das wenig Sinn. Wenn eine Funkstrecke, oder ein Internet dazwischen ist moeglichrweise schon.
Sind so 20 Meter Kabel dazwischen, bzw. werde ich testen, wieviel Kabel ich daziwschen hängen kann, bevor nur noch Müll ankommt..
>Wenn der Empfaenger nur ein Echo macht, kann man die Fehler der beiden >Richtungen nicht mehr getrennt erfassen. Muss man das denn ueberhaupt ? Das ist eben die Frage. Ich denke das ein Echo ausreicht wenn man ein Kabel austesten möchte. Die Fehlerrate für eine Datebrichtung ist halt dann die Hälfte der gemessenen Fehlerrate für beide Datenrichtungen. Bei einem Kabel wäre das rechnerisch gesehen dann egal, da beide Richtungen über das selbe Kabel gehen. Falls aber 2 Kabel, jeweils für eine Datenrichtung ein eigenes mit unterschiedlichen Eigenschaften benutzt werden dann ändert sich der Sachverhalt. Ich denke aber das der Lehrmeister (oder wer auch immer) es nicht noch komplizierter machen will als notwendig. Die Aufgabe soll es wohl sein sich mit LFSRs auseinander zu setzen, und das halte ich für eine gute Aufgabe. Das AHA-Erlebnis bei Beginner wird nämlich sein das er sich stundenlang mit komplizierter Theorie über LFSRs, Polynomartihmetik in GF(2) usw. beschäftigt hat und am Ende einen 5 Zeiler als Source vorsich sieht ;) Gruß Hagen
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.