Forum: Mikrocontroller und Digitale Elektronik Codierte Funkuebertragung (war: "Korrelation ist besser...")


von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Hallo!

Das hier geht in die selbe Richtung wie der beruechtigte "Korrelation 
ist besser als..."-Thread, den wollte ich aber lieber nicht 
wiederbeleben g

Ich habe gestern mal ein wenig mit den 433 MHz FSK-Funkmodulen von Aurel 
(Conrad) experimentiert. Am Sender habe ich mit einem AVR Codes mit 
einer Laenge von 1000-4000 Chips gesendet (Pseudozufallssequenz, 
"m-Sequenz"), Rate 8000 Chips/s. Ich habe den Code einfach immer 
wiederholt, um damit Daten zu uebertragen muesste man den Code jeweils 
invertiert/nicht invertiert senden. Ergibt in diesem Fall nur 8 Bit/s, 
aber das laesst sich steigern, und z.B. fuer eine Wetterstation ist es 
voellig ausreichend.

Den Empfaenger habe ich an den Line in meines Notebooks angeschlossen, 
eine Wav-Datei aufgenommen, diese in Octave geladen und mit der 
Codesequenz korreliert.

Als Antennen habe ich einfach einen 14cm-Draht genommen, beide Module 
sind auf Steckbrettern, ich habe keine Versuche zur Antennenanpassung 
unternommen. Den Sender hab ich ans Fenster gestellt, den Empfaenger ins 
Auto, und bin damit ein wenig rumgefahren und habe an verschiedenen 
Punkten Wav-Dateien aufgenommen.

In 1 km Entfernung vom Sender (dazwischen teilw. bewaltetes und bebautes 
Gebiet) war mit dem blossen Auge nur noch Rauschen am Line in zu 
erkennen:
http://www.mikrocontroller.net/wikifiles/a/a1/Signalla4.png

Nach Korrelation mit der Codesequenz (l=2000):
http://www.mikrocontroller.net/wikifiles/a/af/Nachkorrelationmitcodeluk2.png

Wie man sieht ragen die Spitzen noch sehr weit aus dem Rauschen heraus, 
d.h. es ist einwandfreier Empfang moeglich (bei kuerzerem Code mit 
l=1000 ist das Ergebnis nicht wesentlich schlechter). Mehr als 1 km habe 
ich noch nicht getestet. Groessere Codelaengen bringen nach meinen 
kurzen Tests wenig, vielleicht ist der Takt am Sender/Empfaenger nicht 
synchron genug. Ich werde vor weiteren Tests erst mal einen tragbaren 
Empfaenger mit einem AVR bauen, das Notebook rumzufahren ist zu 
umstaendlich, und wegen der niedrigen Bandbreite des Line in kann ich 
die Chiprate nicht weiter erhoehen.

Gruss
Andreas

von Philipp B. (philipp_burch)


Lesenswert?

Wow, ist ja echt cool!

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Nochwas zur Korrelation:
normalerweise multipliziert man ja die Codefolge elementweise mit der 
empfangenen Folge und summiert die Produkte auf, das ganze macht man 
fuer jede moegliche Verschiebung; dadurch bekommt man die Spitzen die 
anzeigen an welcher Stelle (=bei welcher Verschiebung) grosse 
Uebereinstimmung vorliegt. Das ist ein immenser Rechenaufwand und so auf 
dem AVR nicht zu realisieren.

Um die Korrelation selbst auf dem AVR zu beschleunigen und Speicher zu 
sparen, kann man mit Binaerwerten rechnen (macht das Ergebnis nur 
unwesentlich schlechter). Also: Abtastwerte auf -1/1 quantisieren, jeden 
Abtastwert in 1 Bit abspeichern (-1 als 1, 1 als 0), damit passen 8 
Werte in ein Byte; das selbe fuer die Codefolge. Da eine Multiplikation 
in der Menge (-1,1) einer XOR-Operation in (1,0) entspricht, kann man 
nun 8 Multiplikationen durch ein einfaches XOR ersetzen. Mit einer 
Lookup-Tabelle kann man dann in ein paar Takten die Summe des 
Ergebnisses berechnen. Das macht man fuer die gesamte Codelaenge. Dann 
hat man aber erst EINEN Wert der Korrelation, man muss das alles fuer 
jede verschobene Version der Codefolge wiederholen...

Die gute Nachricht ist, dass man das nur am Anfang machen muss um das 
Signal zu akquirieren. D.h. man speichert einen Ausschnitt der 2* so 
lang wie der Code ist und macht in Ruhe die komplette Korrelation. Im 
Hintergrund laeuft ein Timer mit. Wenn man dann einen Peak in der 
Korrelation hat, also eine Grenze zwischen zwei Codebloecken erkannt 
hat, weiss man genau "um wieviel Uhr" der naechste Block anfaengt, und 
man muss nur vielleicht 10 Korrelationswerte um diesen Punkt herum 
ausrechnen um den Peak zu finden.

So hab ich mir das jedenfalls gedacht, mal schaun wie das in der Praxis 
funktioniert...

von Detlef _. (detlef_a)


Lesenswert?

>> Das [Korrelation] ist ein immenser Rechenaufwand und so auf dem AVR nicht zu 
realisieren. <<

Der Aufwand (Anzahl der Multiplikationen) zur Berechnung der 
Korrelation, so wie Du ihn beschreibst, ist proportional zu n*n mit n 
als der Anzahl der Abtastwerte der Signale. Das läßt sich senken auf 
Proportionalität zu n*log(n) mit der Identität

Corr(x,y)= IFFT(FFT(x)*FFT(y)),

i.e. beide Signale fouriertransformieren, multiplizieren und 
zurücktransformieren.

Aber auch das wird AVR überfordern.

Cheers
Detlef

von holzi (Gast)


Lesenswert?

Allenfalls kann ein CPLD da etwas helfen. Der CPLD korreliert das Signal 
mit einer Anzahl verschobener Modulationssignale gleichzeitig in 
Echtzeit und steuern den Empfangs-PLL. Die Datenfrequenz muss vom der 
Sendefrequenz durch Division abgeleitet sein.

holzi

von Markus (Gast)


Lesenswert?

> bei kuerzerem Code mit l=1000 ist das Ergebnis nicht wesentlich schlechter

Wieviel ist "nicht wesentlich schlechter"? 30% schlechter würde mich 
jetzt nicht überraschen (70% Amplitude = sqrt(1000/2000) ).

Die Module werden bei Conrad mit 200m Reichweite beworben. Hast Du das 
mal überprüft? Dann könnte man den Reichweitengewinn durch die 
Korrelation genauer ausrechnen.

Markus

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

FFT ist hier den Aufwand nicht wert, man hätte erstens den höheren 
Speicherbedarf dadurch dass man ganze Bytes verwenden muss (1000 Chips, 
4 Abtastwerte pro Chip ergibt schon mal 4 kByte), und außerdem braucht 
man die vollständige Korrelation ja nur ein einziges Mal am Anfang.

"Wieviel besser?" Das Verhältnis von Peak zu Rauschen scheint auf den 
ersten Blick fast gleich zu sein, ich habe noch nicht nachgemessen. Man 
könnte die Höhe des Peaks² zur Varianz des Rauschens in Beziehung setzen 
um so ein Maß für die Empfangsqualität zu bilden... den Faktor 2 würde 
man aber wahrscheinlich nicht sehen, da wie schon gesagt die Frequenzen 
auf Sender- und Empfängerseite anscheinend nicht genau genug 
übereinstimmen und die Codes dadurch nicht mehr synchron sind.

Das mit der "Reichweite" ist halt stark davon abhängig wie viel Fehler 
man akzeptiert, welche Antenne man verwendet, ... deswegen würde ich auf 
so einen Katalogwert nicht viel geben. Ich sollte vielleicht mal die 
Bitfehlerrate in Abhängigkeit von Entfernung/Ort aufnehmen, dann könnte 
man auf einen Blick sehen wie gut das Modul ist.

Ich habe die Messungen Sonntag abends in einer eher dünn bebauten 
Wohngegend gemacht, kann durchaus sein dass werktags, mitten in der 
Stadt, mit all den anderen 433 MHz-Umweltverschmutzern, das Ergebnis 
sehr viel schlechter ist.

von Philipp Sªsse (Gast)


Lesenswert?

Aus dem Bauch heraus: keine 1-Bit-Quantisierung, keine FFT, sondern 
Summation im Zeitbereich mit 8-Bit-Werten: die 4000 Werte durchgehen und 
entsprechend dem eingespeisten Bitmuster entweder addieren oder 
substrahieren. Also quasi eine Multiplikation 1 Bit * 8 Bit. Das dürfte 
gar nicht viel aufwendiger sein als die Bitschieberei, aber sollte 
wesentlich mehr Information enthalten, wenn man bedenkt, wie selten es 
einem kleinen Informationsanteil im Signal gelingen wird, das MSBit zu 
kippen.

Statistisch bekomme ich also 256-mal häufiger eine Änderung vom einem 
256stel Amplitude. Vom Betrag her tut sich also nichts, aber es ist 
schneller statistisch signifikant, oder?

Da das nicht mein Fachgebiet ist, lasse ich mich gerne eines besseren 
belehren ...

von Hagen R. (hagen)


Lesenswert?

>>man aber wahrscheinlich nicht sehen, da wie schon gesagt die Frequenzen
>>auf Sender- und Empfängerseite anscheinend nicht genau genug
>>übereinstimmen und die Codes dadurch nicht mehr synchron sind.

Diese Synchronisation kannst du hinbekommen wenn du das Eingangssignal 
gleich mit zwei Signalen korrelierst. Beide Signale sind identisch, also 
deine Chirps (heisen diese Code nicht eigentlich Chips?), nur das sie 90 
Grad Phasenverschoben sind in ihrer Trägerfrequenz. Beide Korrelationen 
stellt ja Lockin-Amplifier mit anschließender Integration über die 
gesammte Chip-Länge dar. Deren DC Ausgangssignale können nun mit r = 
Sqrt(A^2 + B^2) in ein phasenunabhängiges und exakt synchrones Signal 
umgewandelt werden.

Die Vartianz über das Rauschen im Verhältnis zu DC-Ausgangssignal r ist 
dann die effektive Verstärkung. Sie müsste im Grunde exakt gleich zu 
Sqrt(Chip-Länge) sein.

Beim WLAN und Radar benutzt man solche Chips->Codes die die Eigenschaft 
besitzen das sie minimale Eigenredundanzen zu sich selber haben.

Gruß Hagen

von Hagen R. (hagen)


Lesenswert?

>>Nochwas zur Korrelation:
>>normalerweise multipliziert man ja die Codefolge elementweise mit der
>>empfangenen Folge und summiert die Produkte auf, das ganze macht man
>>fuer jede moegliche Verschiebung; dadurch bekommt man die Spitzen die
>>anzeigen an welcher Stelle (=bei welcher Verschiebung) grosse
>>Uebereinstimmung vorliegt. Das ist ein immenser Rechenaufwand und so auf
>>dem AVR nicht zu realisieren.

Bei binären Chips kann man die Multiplikation ersetzten durch eine 
einfache Negierung. Denn unsere Korrelationssignale können ja nur binäre 
Werte sein, also zb. +1 und -1. Eine Multiplikation mit -1 ist eine 
einfach Negation.

Man bekommt dann einen "synchronen" getakteten Gleichrichter. Über die 
Länge der Chips entsteht eine Integration da wir ja nun nur noch 
Länge-Chips * Additionen auf einem Akkumlator durchführen. Verschiebst 
du nun das Korrelations-Signal um exakt 1/4 Chip-Länge und akkumulierst 
du das separat so hast du eine um 90 Grad phasenverschobene getaktete 
Gleichrichtung des Eingangssignal. r = Sqrt(A^2 + B^2) -> A das Resultat 
der Gleichrichtung mit dem ürsprünglichen Refernezsignal und B das 
Resultat mir dem um 1/2 Chiplänge um 90 Grad phasenverschobenem Signal. 
r ist dann das phasenunabhängige und synchrone Signal.

Ergo: bei zb. Chip-Längen von 1024 Bits benötigst du exakt 2 * 1024 
Akkumulationsregister die pro Messung 1024 Bit an Chips akkumuliert 
werden. Das Refernez-Chip Signal wird dabei wie in einem Ringbuffer pro 
Akkumulator um 1 Chip rotiert abgegriffen. Die 2'te Staffel von 1024 
Akkumulatoren benutzt diese Chipsequenz um 1/4 Chipdauer 
phasenverschoben.

Gruß Hagen

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Hagen Re wrote:
>>>man aber wahrscheinlich nicht sehen, da wie schon gesagt die Frequenzen
>>>auf Sender- und Empfängerseite anscheinend nicht genau genug
>>>übereinstimmen und die Codes dadurch nicht mehr synchron sind.
>
> Diese Synchronisation kannst du hinbekommen wenn du das Eingangssignal
> gleich mit zwei Signalen korrelierst. Beide Signale sind identisch, also
> deine Chirps (heisen diese Code nicht eigentlich Chips?),

Chip heißen die einzelnen "Bits" des Codes, Chirp ist was anderes.

> nur das sie 90
> Grad Phasenverschoben sind in ihrer Trägerfrequenz. Beide Korrelationen
> stellt ja Lockin-Amplifier mit anschließender Integration über die
> gesammte Chip-Länge dar. Deren DC Ausgangssignale können nun mit r =
> Sqrt(A^2 + B^2) in ein phasenunabhängiges und exakt synchrones Signal
> umgewandelt werden.

Ähm, mal langsam. Ich weiß nicht ob wir uns hier richtig verstehen. Die 
Trägerfrequenz ist nicht das Problem, und daran könnte ich auch bei dem 
Modul garnix drehen, alles was das ausgibt ist, ob es das gesendete 
Signal eher für eine 1 oder für eine 0 hält. Es geht nur darum dass der 
Chiptakt auf Sender- und Empfängerseite nicht exakt synchron ist.

von Hagen R. (hagen)


Lesenswert?

Korrekt, und wenn du diesen Takt synchron bekommen möchtest dann geht 
das mit obiger Methode.

Die Formel r = Sqrt(A^2 + B^2) ist geometrisch einfach der Satz des 
Pythagoras ;)

Das "korrelierte" Ausgangsignal A ist dabei die effektive Amplitude und 
das Signal B die Amplitude der Phasendifferenz/verschiebung. Wenn also 
Signal B immer 0 ist so sind Empfängertakt und Sendertakt absolut 
synchron zu einander. Man muß aber garnicht eine "zeitliche" 
Synchronisieung durchführen, sondern rechnet das einfach mit obiger 
Formel raus.

Du musst also dein Referenz-Chip-Signal im Takt nur 90 Grad verschieben 
-> 1/4'tel Chiptakt, und ebenfalls durch den Lockin-Amplifier-Integrator 
durchschicken. Beide Ausgangssignale dann mit obiger Formel wieder 
kombinieren, und schon hast du ein absolut Taktsynchrones Signal ohne 
das die Takte synchronisiert werden müssen. Klar beide, Sender & 
Empfänger müssen noch einen in der Frequenz exakten Chip-Takt benutzen, 
aber nicht mehr Phasensynchron.

Gruß hagen

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Nein, ich meine tatsächlich einen Frequenzunterschied. Ich nehme sowieso 
schon mehrere Samples pro Chip, da ist der Phasenunterschied kein 
Problem.

von Andreas S. (andreas) (Admin) Benutzerseite


Angehängte Dateien:

Lesenswert?

Nach Ausgleich des Frequenzoffsets hat sich das Ergebnis noch einmal 
drastisch verbessert. Im Anhang ein Plot der Höhe des größten Peaks in 
Abhängigkeit von der Korrektur. 0 entspricht keiner Korrektur, 2 
bedeutet dass der Code vor der Korrelation um 2 Chips in die Länge 
gezogen (resampled) wurde. Codelänge ist 2000, abgetastet wurde mit 6 
samples pro Chip (Soundkarte).

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Oha. Damit kann ich nun auch an einem Ort in 1.6 km Entfernung den Code 
erkennen. Hinter einem bewaldeten Berg. Das wird wirklich immer 
vielversprechender...

von Hagen R. (hagen)


Lesenswert?

hast du auch mal versucht die Phasendifferenz auszugleichen ? Ich 
vermute das die nochmals die Empfindlichkeit um 1.4 bis 2 verbessern 
könnte.

Man muß auch dazu sagen das je länger die Chips werden desto größer wird 
die Empfindlichkeit. Man kann das theoretisch also noch viel weiter 
treiben, zu ungunsten der Datenrate. Auch die Frage welche Chip 
Kodierung man benutzt ist essentiell. Die Chips sollten zu sich selber 
nicht redundant sein. Also egal wie man diese Chips faltet die 
Eigenkorrelation ist dann immer sehr gering. Allerdings sind nur Codes 
bis 11 Bit bekannt die diese Eigenschaft haben, (ich komme einfach nicht 
mehr auf den Namen dieser Codes, shit)

Gruß Hagen

von Joachim B. (joachimb)


Lesenswert?

Sicher meinst Du die Barker Codes,
die es mit bis zu 13 Bit gibt.

Gruß
Joachim

von rene (Gast)


Lesenswert?

Die Selektion von Codes beim GPS die gegeneinander am Wenigsten 
korrelieren heissen Goldcodes. Bei kurzen codes kann man die Korrelation 
auch selbst machen. Ein PC schafft das noch.

rene

von Hagen R. (hagen)


Lesenswert?

Ja, Barker und Goldcodes.

Gruß Hagen

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Da es nur einen Sender gibt kommt es nur auf die Autokorrelation an. Ich 
verwende eine m-Sequenz, die sollte nahezu perfekte Eigenschaften haben. 
Gold-Codes sind in dieser Hinsicht schlechter. Wollte man CDMA machen 
(wäre auch eine interessante Idee, muss mir aber erst mal einen zweiten 
Sender besorgen), dann wären Gold-Codes besser.

Ich gleiche die Phasenverschiebung ja schon indirekt aus, indem ich 
einfach mehrere (6) Samples pro Chip nehme. Ich kann also mit dem Peak 
höchstens um 1/12 Chip daneben liegen... ich denke das ist 
vernachlässigbar. Mit deinem Verfahren (dem ich noch nicht ganz traue, 
den Begriff "getakteter Gleichrichter" kenne ich nicht, und Google gibt 
in dem Zusammenhang auch nichts her) könnte ich, wenn ich von den 
gleichen Samples ausgehe, allenfalls Rechenzeit sparen, das Ergebnis 
kann dadurch IMO nicht besser werden.

von Hagen R. (hagen)


Lesenswert?

Such mal nach "Lock-in apmlifier" "PSD" "Phase sensitive detection" 
"digital switching rectifier" "digital switching multiplier"

Das Prinzip ist immer das gleiche nur es gibt sehr viele Namen dafür.
Essentiell ist es eine "getaktete Gleichrichtung". Ein Eingangssignal 
wir im Takt eines Referenzsignales gleichgerichtet. Nimmt man rein 
analoge Multiplizierer dann kann man nicht mehr vonb "gleichrichtung" 
sprechen.

Der Aufwand dürfte mit dem Verfahren in meinem Posting geringer sein als 
bei deinem Oversampling. Die Abtastrate beträgt exakt der deiner 
Chip-Moldulations-Frequenz. Bis auf den Punkt das du eben das 90Grad 
Phasenverschobene Signal benötigst.

http://www.cpm.uncc.edu/lock_in_1.htm

und über das hier bin ich selber auf diese Technik gestoßen:

http://www.cappels.org/dproj/selflocksyncdet/Synchronous_Detector.html
http://cappels.org/dproj/dlmom/dlmom.html

benutzt habe ich's experimentel auf dem PC zur Dekodierung stark 
gestörter DTMF Signale aufgenommen über die Soundkarte, hat prächtig 
funktioniert. Im Gegensatz zu digitalen Filtern oder der FFT ist die 
Performance weitaus besser, mal abgesehen das man größere Buffer 
benötigt. Man braucht im Grudne nur Addition/Subtraktionen und am Schluß 
eben Quadrierung/Wurzel.

Gruß hagen

von Hagen R. (hagen)


Lesenswert?


von Mario (Gast)


Lesenswert?

Hallo Andreas,

das was Du machst nennt man Spreiz-Technik, oder Spreizspektrum (engl. 
spread spectrum) Methode. Genau das wird beim CDMA-UMTS gemacht. Der 
Lock-In Verstäker macht im Prinzip dasselbe, mittelt (integriert) jedoch 
über eine große Anzahl von Perioden eines periodischen Signals.

Die Verbesserung die Du siehst ist der sog. Spreizgewinn. Er errechnet 
sich aus der Bandbreite die du tatsächlich benutzt (8000Chips=bits pro 
s) durch die Bandbreite deiner Datenübertragung (8 bit pro s), also 
8000\8=1000.

Das ganze findest Du beispielsweise hier bestens erklärt:
http:\\www.ant.uni-bremen.de\teaching\index.html

mario

von Hagen R. (hagen)


Lesenswert?

Das ist eine zu einfache Betrachtung, meiner Meinung nach. Wenn man wie 
Andreas nun eine Codierung benutzt, möglichst wenig korrelierbar mit 
sich selber, und auf Empfängerseite quasi synchon 
dekodiert/gleichrichtet dann ist das auch eine Form der aktiven 
Filterung bei der auch die Mathematik der Fourier Transformationen 
wirken. Es ist ein sehr weites Themenfeld der Anwednung, Radar, 
Optoelektronik, Funksysteme wie GPS, UMTS, WLAN usw. Kernpunkt ist 
meiner Meinung nach immer wieder die PSD -> Phase Sensitive Detection 
oder synchrone Gleichrichtung und Integration.

Gruß Hagen

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Mario wrote:
> das was Du machst nennt man Spreiz-Technik, oder Spreizspektrum (engl.
> spread spectrum) Methode.

Danke, das ist mir nach diversen Vorlesungen bestens bekannt ;)
Wo ich wie man sieht noch aufzuholen habe ist bei der 
schaltungstechnischen Umsetzung, da gibt es sicher noch einige 
praktischere Möglichkeiten als eine Überabtastung+Korrelation. Ich 
möchte aber erstmal herausfinden wie viel Leistung sich rausholen lässt, 
wie sich verschiedene Codelängen, Störer, gleichartige Sender mit 
anderen Codes usw. auswirken, usw. Ich habe kein konkretes Projekt mit 
Funkübertragung vor, deshalb kann die praxistaugliche Umsetzung noch ein 
wenig warten.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Hagen Re wrote:
> Das ist eine zu einfache Betrachtung, meiner Meinung nach. Wenn man wie
> Andreas nun eine Codierung benutzt, möglichst wenig korrelierbar mit
> sich selber, und auf Empfängerseite quasi synchon
> dekodiert/gleichrichtet dann ist das auch eine Form der aktiven
> Filterung bei der auch die Mathematik der Fourier Transformationen
> wirken.

Kommt aufs gleiche raus, ist nur eine andere Betrachtungsweise. Die 
Korrelation ist ja im Grunde das selbe wie ein Filter.

> Es ist ein sehr weites Themenfeld der Anwednung, Radar,
> Optoelektronik, Funksysteme wie GPS, UMTS, WLAN usw. Kernpunkt ist
> meiner Meinung nach immer wieder die PSD -> Phase Sensitive Detection
> oder synchrone Gleichrichtung und Integration.

Kernpunkt ist von meinem Standpunkt aus die Korrelation - kommt wohl 
drauf an aus welcher Richtung man kommt.

von Hagen R. (hagen)


Lesenswert?

Ich bin schon seit tagen auf meinem Rechner am suchen, denn ich weis das 
ich irgendwo ein PDF hatte das sich exakt mit diesem Thema befasste. Das 
Problem ist ja nicht nur der Lock-In Amplifier und die Barker/GoldCodes 
sondern eben das optimierte und quasi parallele Abfragen der zueinander 
versetzten Codes, die Autokorrelation. Wenn ich dich richtig verstanden 
habe sendest du deinen 1024 Bit Code und musst diesen im Empfänger am 
besten in einem Rutsch so autokorrelieren das du 1024 Bits des Code mit 
den um bis zu 1024 Bit mal rotierten Korrelationscodes gegenrechnen 
musst. In dem besagten PDF wurde eine einfache Methode vorgestellt die 
genau dieses macht aber mit nur O(n) an Speicher auskam und weniger 
Rechenoperationen benötigte. D.h. man benötigte nur Speicher der eine 
zb. 1024 Bit Codesequenz aufnahm obwohl man das Eingangssignal ja mit 
1024 verschobenen Codesequenzen auswerten musste. Du musst ja jedes Bits 
deines 1024 Bit Codes mit jedem Bit des Referenzcodes korrelieren, 
richtig ? Wenn ich mich recht erinnere teilen die das Problem immer in 2 
teile rekursiv auf. Also 2*512 -> 4*256 -> 8*128 usw. und kamen dann zu 
einer sehr einfachen Formel, so ähnlich wie der FFT Algorithmus, es war 
aber definitiv keine FFT sondern arbeitete mit einfachen 
Additionen/Subtraktionen auf Akkumulatoren. Das Resultat war dann der 
Index in den Bitcode mit der höchsten Übereinstimmung/Amplitude. Shit, 
wenn man 1000'ende von PDFs sammelt und nicht gleich Ordnung einhält.

Gruß Hagen

von holzi (Gast)


Lesenswert?

Solche Signale sollte man in Echtzeit korrelieren, Aufzeichen bringt 
wenig. Ein CPLD oder FPGA sollte das so koennen. Ueblicherweise laesst 
man den Referenzcode am Receiver schneller laufen bis er einrastet.

holzi

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Wenn man unbedingt zusätzlichen Hardwareaufwand betreiben will...

von Andreas S. (andreas) (Admin) Benutzerseite


Angehängte Dateien:

Lesenswert?

Neuer Rekord: 3.1 km (von 50.246695,10.9558483333333 nach 
50.2644083333333,10.9892933333333). Das Signal ist noch erstaunlich gut, 
siehe Anhang.

von Martin S. (werwurm)


Lesenswert?

Hahaaa!

Jetzt weiß ich, wo dein Haus wohnt! :D muhaha
http://www.google.de/maps?near=%2B50%C2%B014'48.10''%2C%20%2B10%C2%B057'21.05

na gut .. ich hätte das auch im Impressum nachlesen können .. aber pssst 
;)

von Steff (Gast)


Lesenswert?

@ Andreas:
Könntest du deinen Programmcode hier veröffentlichen?
Ist das Verfahren auch mit AM-Funkmodulen möglich?

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Den Code und die aufgenommenen wav-Dateien hab ich gerade hier 
hochgeladen:
http://www.mikrocontroller.net/download/funk/
Ist etwas chaotisch, aber das meiste davon brauchst du nicht. Am Sender 
brauchst du nur einen AVR mit dem Programm aus sender, am Empfänger 
eine Soundkarte, die aufgenommene wav-Datei wird in Octave mit dem 
Programm decoder.m ausgewertet.

Das Verfahren ist im Prinzip auch bei AM möglich, das Empfängermodul 
muss aber empfindlich genug sein. Bei den billigsten kommt einfach 
nichts mehr an wenn der Sender weiter als ein paar 100m weit weg ist, da 
hilft auch kein Code mehr. Probier's einfach mal aus und sag dann 
Bescheid.

von Markus K. (markus-)


Lesenswert?

Welche Funk-Module hast Du denn genau benutzt?
FM-Empfänger 190300 und Sender 190312?
Conrad hat bis zum 26.12. (24Uhr) gerade die Keine-Versandkosten-Aktion.

Thema AM:
Bei Conrad gibt es auch AM-Empfänger, die mit -107dBm angegeben sind 
(Art-Nr. 190252) und Empfänger die mit +10dBm angegeben sind (190224), 
wodurch man ebenfalls angeblich 200m Reichweite erreichen können soll. 
Sie haben allerdings nur 4kHz Bandbreite, während die o.g. FM-Module mit 
600kHz angegeben sind.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Genau, 190300 und 190312 von Conrad.

Die Daten sollte man bei den Aurel-Empfängern an Pin 13 abgreifen, vor 
dem Komparator (siehe Blockschaldbild im Datenblatt). Das sollte 
theoretisch das Ergebnis verbessern.

von Steff (Gast)


Lesenswert?

Danke für den Code.

Da die Module digital arbeiten bekommt man ein Signal, das wie hier 
beschrieben aufgebaut ist, richtig?

http://de.wikipedia.org/wiki/Puls-Code-Modulation

Wie groß ist denn dann die Abtastfrequenz, bzw. wie viele bits werden 
übertragen, bis ein Wert feststeht?

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Mit PCM hat das eigentlich nichts zu tun... die Frage verstehe ich auch 
nicht. Eigentlich ist weiter oben schon alles erklärt; bei Gelegeheit 
werde ich das alles mal genauer aufschreiben und ins Wiki stellen.

von Steff (Gast)


Lesenswert?

Aus dem Empfänger kommt eine folge von Bits raus. Meine Frage war jetzt, 
wie diese geordnet sind

von Steff (Gast)


Lesenswert?

jetzt fällt mir ein, wie ichs erklären könnte.
Deine Wavedatei hat als Amplitudenwerte nicht nur 1 oder 0. woher kommt 
das?

von Markus K. (markus-)


Lesenswert?

@Steff:
Soweit ich das verstanden habe kommt am Testpin das analoge Signal raus 
und nach dem Comparator das digitale Signal.

@Andreas:
Wie hast Du die Module angeschlossen?
Beim Sender würde ich einfach mit einem AVR-Pin direkt an den Data-In 
gehen, beim Empfänger über einen Spannungsteiler an den Line-In der 
Soundkarte. Welche Pegel kommen denn da raus? Hab' leider kein 
Oszilloskop und der Wert im Datenblatt (Vs-1) bezieht sich ja wohl auf 
den Digitalausgang.

Markus

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

@Steff:
Das Signal ist analog aufgenommen, ein wav-Sample = ein Abtastwert.

@Markus:
Bei Pin 13 kommt etwas im 100-200 mV-Bereich raus, das kann man direkt 
an die Soundkarte hängen. Nach dem Komparator ist es ungefähr TTL-Pegel.

von Steff (Gast)


Lesenswert?

Habe jetzt auch die FM-Module von Conrad. Bei dem Empfänger habe ich an 
Pin 14 eine maximale Spannung von 1,8V. An Pin 13 schwankt die Spannung 
im mV bereich bei ca 2 V. Da stimmt doch irgendetwas nicht, oder?

von Hans W. (Firma: Wilhelm.Consulting) (hans-)


Lesenswert?

ähm darf ich mal nachfragen was du da bei dem bin rausbekommst?

ist das jetzt schon fsk demoduliert oder ist das einfach nur eine ZF???

bei beiden möglichkeiten würd ich versuchen einen sinus zu übertragen 
und da dann phasensprünge einbaun... damit solltest du am weitesten 
kommen...

73

von Steff (Gast)


Lesenswert?

Laut Datenblatt sollte an Pin 14 des Empfängers das Digitale Signal 
anliegen. Bei high annähernd Versorgungsspannung, also 5 V. low = 0 V. 
Bei mir sind es bei high 2 V und low 0 V.
An Pin 13 sollte noch das analoge Signal anliegen. Laut Andreas 100-200 
mV

Am Sender habe ich direkt den uC angeschlossen und gebe High/Low im 
wechsel bei 500 Hz aus.

von Hans W. (Firma: Wilhelm.Consulting) (hans-)


Lesenswert?

klingt nach afsk wenn mans richtig missbraucht... damit sollte ohne 
weiteres eine BPSK-Strecke baubar sein..nur kannst du nicht beliebig 
schnelle phasensprünge machen... das ist dann irgend eine sonderform.. 
müsste mal nachschaun wie das dann heisst...

zurück zum filtern  mit einem avr:
mit schneller faltung müsste sich so ein korrellationsfilter wunderbar 
machen lassen.. auch auf einem avr... nur vielmehr wie 16 oder 
32samples/symbol sollten da nicht notwendig sein...

ob der avr aber dann noch entscheiden kann was da angekommen ist müsste 
man ausprobieren :)

73

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Ich nehme an das ist ein ganz einfacher inkohärenter Empfänger wie hier 
auf Seite 10: http://rfwireless.rell.com/pdfs/TN_WJfsk.pdf. An Pin 13 
kommt die Differenz der beiden Zweige raus, vor Pin 14 dann noch ein 
Komparator. Das Datenblatt gibt nicht viel her, das gleiche 
Blockschaltbild ist auch beim AM-Empfänger angegeben.

Am liebsten wäre mir ja ein BPSK-Sender und ein Empfänger mit 
I/Q-Ausgängen, aber sowas habe ich noch nicht gefunden.

von Marco S. (masterof)


Lesenswert?

Hi Andreas,

Sorry das ich den Thread aus dem Dornröschenschlaf auf wecke.
Aber die Downloadlinks hier im Thread und auch in der Wiki sind leider 
defekt. Könntest du wenn es dir nichts ausmacht den Sourcecode wieder 
online stellen?

Dein Wunsch nach einem Empfänger mit I/Q-Ausgang ist mittlerweile wahr 
geworden. Die billigen DVB-T-Sticks für den Computer, können mit anderen 
Treiber die gesampelten I/Q-Daten liefern.

Gruß Marco

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Danke für den Hinweis, die Links sind repariert. Das mit den 
DVB-T-Sticks habe ich auch gelesen, ich hatte aber leider schon lange 
keine Gelegenheit mehr mich mit dem Thema zu beschäftigen.

von Mike (Gast)


Lesenswert?

Andreas Schwarz schrieb:
> Den Code und die aufgenommenen wav-Dateien hab ich gerade hier
> hochgeladen:
> http://www.mikrocontroller.net/download/funk/

Andreas Schwarz schrieb:
> Danke für den Hinweis, die Links sind repariert.

Da kommmt schon wieder nur "403 Forbidden"

Gruß Mike

von Marco S. (masterof)


Lesenswert?

Jetzt fehlt nur der BPSK-Sender.
Hat da jemand Infos über einen passenden Sender und wenn möglich auch 
noch preiswert.

Gruß masterof

von Chris (Gast)


Lesenswert?

Mir scheint, der geeignete Aurel-Sender ist nicht mehr verfügbar. Kann 
jemand Alternativen/Bezugsquellen empfehlen?

Was müssen Sender und Empfänger können? Analog-Input/Output? Ist FSK/FM 
erforderlich?

Danke!

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Ideal wäre AM mit analogem Ausgang, im Prinzip sollten aber alle 
Sender/Empfänger mehr oder weniger gut funktionieren.

von Florian M. (koalo)


Lesenswert?

Nur zum Verstaendnis:
Der Vorteil in dieser Anwendung m-Sequenzen zu verwenden liegt "nur" in 
der Synchronisierung und der Moeglichkeit ggf. mehrere Sender zu 
verwenden, oder?
Der eigentliche Zugewinn an Reichweite muesste sich doch (bei gegebener 
Synchronisierung) auch genau so ergeben, wenn man einfach ueber mehrere 
Abtastwerte eines konstanten Wertes (mit derselben Laenge einer 
Chipsequenz) mittelt. Oder habe ich etwas uebersehen?

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.