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
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...
>> 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
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
> 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
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.
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 ...
>>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
>>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
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.
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
Nein, ich meine tatsächlich einen Frequenzunterschied. Ich nehme sowieso schon mehrere Samples pro Chip, da ist der Phasenunterschied kein Problem.
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).
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...
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
Sicher meinst Du die Barker Codes, die es mit bis zu 13 Bit gibt. Gruß Joachim
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
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.
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
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
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
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.
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.
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
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
Wenn man unbedingt zusätzlichen Hardwareaufwand betreiben will...
Neuer Rekord: 3.1 km (von 50.246695,10.9558483333333 nach 50.2644083333333,10.9892933333333). Das Signal ist noch erstaunlich gut, siehe Anhang.
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 ;)
@ Andreas: Könntest du deinen Programmcode hier veröffentlichen? Ist das Verfahren auch mit AM-Funkmodulen möglich?
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.
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.
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.
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?
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.
Aus dem Empfänger kommt eine folge von Bits raus. Meine Frage war jetzt, wie diese geordnet sind
jetzt fällt mir ein, wie ichs erklären könnte. Deine Wavedatei hat als Amplitudenwerte nicht nur 1 oder 0. woher kommt das?
@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
@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.
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?
ä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
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.
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
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.
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
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.
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
Jetzt fehlt nur der BPSK-Sender. Hat da jemand Infos über einen passenden Sender und wenn möglich auch noch preiswert. Gruß masterof
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!
Ideal wäre AM mit analogem Ausgang, im Prinzip sollten aber alle Sender/Empfänger mehr oder weniger gut funktionieren.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.