Forum: Digitale Signalverarbeitung / DSP / Machine Learning Barker Code, Autokorrelation


von jameson (Gast)


Lesenswert?

hallo,

ich experimentiere gerade mit den Pollin Funkmodulen.
Um die Übertragungssicherheit zu verbessern, habe ich ganz vorbildlich 
das Forum durchforstet und bin
auf http://www.mikrocontroller.net/articles/Codierte_%C3%9Cbertragung 
gestoßen.
Ein Abgleich mit dem Autokorrelationsartikel auf Wiki hat aber 
erschütterndes zu Tage gefördert: Ich
hab glaub ich dieselbe noch nie verstanden :-o. Jedenfalls kann ich 
nicht nachvollziehen, wie
die Autokorrelationskurve (AK) 
http://en.wikipedia.org/wiki/File:Barker7corr.svg entsteht.

Ich bitte um Hilfe!

Vorweg die Frage: zur Berechnung der AK multipliziere ich eine Funktion 
mit ihrer selbst, nur verschoben,
und integriere das Ergebnis. Bei digitaler Kurve also summieren. Was 
kommt bei der um t verschobenen Kurve
rein? Nullen? (bzw -1) Also würde mich allgemein Interessieren nicht nur 
auf +1/-1 Folgen bezogen auch klassische 0/1 Folgen - im
angehängt gedachten Bereich wird die Funktion zu 0 angenommen?

Konkret so wie ich mir vor Wiki die AK des Barker codes der Länge 7 
vorgestellt hatte....


+1 +1 +1 -1 -1 +1 -1  //code


//Auffüllen???       //code           //auffüllen???
0  0  0  0  0  0  0 +1 +1 +1 -1 -1 +1 -1 0  0  0  0  0  0  0




0  0  0  0  0  0  0 +1 +1 +1 -1 -1 +1 -1 0  0  0  0  0  0  0  //t=0
-------------------------------------------------------------
0  0  0  0  0  0  0 +1 +1 +1 +1 +1 +1 +1 0  0  0  0  0  0  0  //Summe 7 
ok aber warum findet sich das bei t=7?
                                //Frage, ob summe von -t/2 bis t/2 oder 
0 bis t?



0  0  0  0  0  0  0  0 +1 +1 +1 -1 -1 +1 -1 0  0  0  0  0  0  //t=1
------------------------------------------------------------
0  0  0  0  0  0  0  0 +1 +1 -1 +1 -1 -1  0 0  0  0  0  0  0 //Summe 0


0  0  0  0  0  0  0  0 +1 +1 +1 -1 -1 +1 -1 0  0  0  0  0  0  //t=2
------------------------------------------------------------
0  0  0  0  0  0  0  0  0 +1 -1 +1 -1 -1  0 0  0  0  0  0  0  //Summe -1


0  0  0  0  0  0  0  0  0 +1 +1 +1 -1 -1 +1 -1 0  0  0  0  0  //t=3
------------------------------------------------------------
0  0  0  0  0  0  0  0  0 +1 -1 -1 -1 +1  0  0 0  0  0  0  0  //Summe 
-1, sollte aber 0 sein?


Verwirrung komplett, oder ist es klar geworden wo mein Problem ist? 
Vielleicht zeigt ihr mir mal, wie
die Autokorrelation entsteht und wieso das max bei 7 und nicht 0 ist?


habt Dank

von Detlef _. (detlef_a)


Lesenswert?

>>Was kommt bei der um t verschobenen Kurve rein? Nullen? (bzw -1)

Die Kurve selbst: periodisch fortsetzen.
Das wird mit +/-1 gemacht, nicht mit 1/0 .
Das von Dir zitierte Bild verstehe ich allerdings nicht: wie kann bei 
einem
Barker Code der Länge 7 das Ergebnis 0 rauskommen, eine Summe von 7 
Zahlen die entweder 1 oder -1 sind kann doch nicht 0 werden !?

Naja
Cheers
Detlef

clear
a=[1 1 1 -1 -1 1 -1 ];
b=[a a];
%a=[a zeros(1,7)];
a=[a zeros(1,7)];

for(k=1:7)
  disp(sprintf('%d ',b))
  disp(sprintf('%d ',a))
  disp(sprintf('%d ',sum(a.*b)))
  a=[a(2:end) a(1)];
end;
return

1 1 1 -1 -1 1 -1 1 1 1 -1 -1 1 -1
1 1 1 -1 -1 1 -1 0 0 0 0 0 0 0
7
1 1 1 -1 -1 1 -1 1 1 1 -1 -1 1 -1
1 1 -1 -1 1 -1 0 0 0 0 0 0 0 1
-1
1 1 1 -1 -1 1 -1 1 1 1 -1 -1 1 -1
1 -1 -1 1 -1 0 0 0 0 0 0 0 1 1
-1
1 1 1 -1 -1 1 -1 1 1 1 -1 -1 1 -1
-1 -1 1 -1 0 0 0 0 0 0 0 1 1 1
-1
1 1 1 -1 -1 1 -1 1 1 1 -1 -1 1 -1
-1 1 -1 0 0 0 0 0 0 0 1 1 1 -1
-1
1 1 1 -1 -1 1 -1 1 1 1 -1 -1 1 -1
1 -1 0 0 0 0 0 0 0 1 1 1 -1 -1
-1
1 1 1 -1 -1 1 -1 1 1 1 -1 -1 1 -1
-1 0 0 0 0 0 0 0 1 1 1 -1 -1 1
-1

von jameson (Gast)


Lesenswert?

hm. verstehe ich irgendwie nicht wirklich.
Also von vorne: Kurve wird zyklisch fortgesetzt, auf doppelte Länge, 
damit verschoben Gegenelemente vorhanden sind.
Die zu multiplizierende Funktion hast du aber doch mit Nullen aufgefüllt 
und dann über die ganze Länge multipliziert wie es scheint.
Ist das so weit richtig?
Dann kann doch 0 rauskommen, ich habe ja Elemente die mit Null 
multipliziert werden.
Dennoch bekommst du konstant -1 heraus wie ich die Darstellung 
verstehe...

Ich bin ich restlos verwirrt kannst du mich auf Kurs bringen, bitte? 
Brett vorm Kopf muss abgeschraubt werden

von Detlef _. (detlef_a)


Lesenswert?

jameson schrieb:

> Also von vorne: Kurve wird zyklisch fortgesetzt, auf doppelte Länge,
> damit verschoben Gegenelemente vorhanden sind.
jawohl

> Die zu multiplizierende Funktion hast du aber doch mit Nullen aufgefüllt
> und dann über die ganze Länge multipliziert wie es scheint.
> Ist das so weit richtig?

ja, das ist richtig. Wenn ich nicht mit Nullen auffülle, sondern auch 
die zu korrelierende Kurve zyklisch fortsetze ändert sich nichts, ausser 
daß die Ergebnisse alle verdoppelt werden, siehe angehängtes Ergebnis.

> Dann kann doch 0 rauskommen, ich habe ja Elemente die mit Null
> multipliziert werden.

Es sind immer 7 Summanden entweder 1 oder -1, da kann nie 0 rauskommen.

> Ich bin ich restlos verwirrt kannst du mich auf Kurs bringen, bitte?
> Brett vorm Kopf muss abgeschraubt werden

Kein Grund zur Verzweifelung, einfach mal reichlich Karopapier, 
Bleistift, Spitzer und Radiergummi zur Hand nehmen, das lichtet den 
Nebel dann schon.


Cheers
Detlef

clear
a=[1 1 1 -1 -1 1 -1 ];
b=[a a];
%a=[a zeros(1,7)];
a=[a a];

for(k=1:7)
  disp(sprintf('%d ',b))
  disp(sprintf('%d ',a))
  disp(sprintf('%d ',sum(a.*b)))
  a=[a(2:end) a(1)];
end;
return

1 1 1 -1 -1 1 -1 1 1 1 -1 -1 1 -1
1 1 1 -1 -1 1 -1 1 1 1 -1 -1 1 -1
14
1 1 1 -1 -1 1 -1 1 1 1 -1 -1 1 -1
1 1 -1 -1 1 -1 1 1 1 -1 -1 1 -1 1
-2
1 1 1 -1 -1 1 -1 1 1 1 -1 -1 1 -1
1 -1 -1 1 -1 1 1 1 -1 -1 1 -1 1 1
-2
1 1 1 -1 -1 1 -1 1 1 1 -1 -1 1 -1
-1 -1 1 -1 1 1 1 -1 -1 1 -1 1 1 1
-2
1 1 1 -1 -1 1 -1 1 1 1 -1 -1 1 -1
-1 1 -1 1 1 1 -1 -1 1 -1 1 1 1 -1
-2
1 1 1 -1 -1 1 -1 1 1 1 -1 -1 1 -1
1 -1 1 1 1 -1 -1 1 -1 1 1 1 -1 -1
-2
1 1 1 -1 -1 1 -1 1 1 1 -1 -1 1 -1
-1 1 1 1 -1 -1 1 -1 1 1 1 -1 -1 1
-2

von jameson (Gast)


Lesenswert?

Danke dir wird erledigt der Paperkram, vielleicht mal am WE in Ruhe. 
Aber der Link am Anfang von mir - der lässt schlimmes befürchten bezgl 
Wiki? Die Autokorrelationsfunktion sollte ja dann schlicht verkehrt 
sein. :-o

von Franz (Gast)


Lesenswert?

Hallo,

schau dir mal das Programm für Barkercode an. Dann wirds vielleicht 
klarer.

https://www.telecom.hs-mittweida.de/index.php?id=4486

Vereinfacht schauts so aus :

Jedes bit von dir wird mit den 11 bits vom Barkercode multipliziert -> 
daraus werden 11 bit pro bit.

Dann wird aus den übertragenen 11 bit mittels Autokorrelation wieder das 
Original-bit zurückgewonnen.

Ciao

Franz

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.