mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Barker Code, Autokorrelation


Autor: jameson (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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_%... 
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

Autor: Detlef _a (detlef_a)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: jameson (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Detlef _a (detlef_a)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: jameson (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Franz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.