Manchester: Unterschied zwischen den Versionen
Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
KKeine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
(17 dazwischenliegende Versionen von 10 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
Manchester Codierung | Die '''Manchester-Codierung''' ist ein Verfahren um einen Bitstrom mit beliebig verteilten Einsen und Nullen "gleichspannungsfrei" zu machen. Das bedeutet dass auch bei einer laufenden Folge von gleichen Pegeln im Ausgangssignal regelmäßig ein Wechsel stattfindet und das Verhältnis zw. HI und LOW immer 50:50 beträgt. Das Verfahren wird besonders zur Funkübertragung von Daten benutzt, da eine Funkstrecke nur regelmäßig wechselnde Pegel übertragen kann. Zusätzlicher Vorteil ist, dass aus dem Datensignal auch gleich ein Takt zurückgewonnen werden kann. Als Nachteil wäre die Verdoppelung der Datenrate zu nennen. Der Manchestercode entsteht, wenn man das Datensignal mit einem Takt [[Logische Verknüpfungen#XOR|XOR-verknüpft]]. | ||
== Beispielcode (Matlab/Octave) == | |||
Encoder: | |||
<pre> | |||
function [encoded] = manchester_encode(source) | |||
encoded = []; | |||
for i=1:length(source) | |||
encoded(2*i - 1) = (source(i) == 1); | |||
encoded(2*i) = (source(i) == 0); | |||
end | |||
</pre> | |||
Decoder: | |||
<pre> | |||
function [decoded] = manchester_decode(coded) | |||
decoded = []; | |||
for i=1:(length(coded)/2) | |||
if coded(2*i - 1) == 0 && coded(2*i) == 1 | |||
decoded(i) = 0; | |||
else | |||
decoded(i) = 1; | |||
end | |||
end | |||
</pre> | |||
Beispiel: | |||
<pre> | |||
octave:22> manchester_encode([0 1 0 0 0 1 1 1]) | |||
ans = | |||
0 1 1 0 0 1 0 1 0 1 1 0 1 0 1 0 | |||
octave:23> manchester_decode(ans) | |||
ans = | |||
0 1 0 0 0 1 1 1 | |||
</pre> | |||
== Weblinks == | |||
* [http://www.mikrocontroller.net/topic/240848#2448107 Forum mit Codebeispiel] | |||
* [http://de.wikipedia.org/wiki/Manchester-Code Manchester-Code] bei Wikipedia | |||
* [http://atmel.com/dyn/resources/prod_documents/doc9164.pdf Application Note "Manchester Coding Basics"] von Atmel | |||
[[Category:Datenübertragung]] |
Aktuelle Version vom 30. Juli 2014, 14:00 Uhr
Die Manchester-Codierung ist ein Verfahren um einen Bitstrom mit beliebig verteilten Einsen und Nullen "gleichspannungsfrei" zu machen. Das bedeutet dass auch bei einer laufenden Folge von gleichen Pegeln im Ausgangssignal regelmäßig ein Wechsel stattfindet und das Verhältnis zw. HI und LOW immer 50:50 beträgt. Das Verfahren wird besonders zur Funkübertragung von Daten benutzt, da eine Funkstrecke nur regelmäßig wechselnde Pegel übertragen kann. Zusätzlicher Vorteil ist, dass aus dem Datensignal auch gleich ein Takt zurückgewonnen werden kann. Als Nachteil wäre die Verdoppelung der Datenrate zu nennen. Der Manchestercode entsteht, wenn man das Datensignal mit einem Takt XOR-verknüpft.
Beispielcode (Matlab/Octave)
Encoder:
function [encoded] = manchester_encode(source) encoded = []; for i=1:length(source) encoded(2*i - 1) = (source(i) == 1); encoded(2*i) = (source(i) == 0); end
Decoder:
function [decoded] = manchester_decode(coded) decoded = []; for i=1:(length(coded)/2) if coded(2*i - 1) == 0 && coded(2*i) == 1 decoded(i) = 0; else decoded(i) = 1; end end
Beispiel:
octave:22> manchester_encode([0 1 0 0 0 1 1 1]) ans = 0 1 1 0 0 1 0 1 0 1 1 0 1 0 1 0 octave:23> manchester_decode(ans) ans = 0 1 0 0 0 1 1 1
Weblinks
- Forum mit Codebeispiel
- Manchester-Code bei Wikipedia
- Application Note "Manchester Coding Basics" von Atmel