Thursday 19 October 2017

Moving Average Filter Fpga


High Definition, Low Delay, SDR-basierte Videoübertragung in UAV-Anwendungen Integrierte RF-Agile-Transceiver sind nicht nur in Software-definierten Radio - (SDR-) 1-Architekturen in Mobilfunk-Basisstationen wie Multiservice Distributed Access System (MDAS) und Small eingesetzt Zelle, aber auch für drahtlose HD-Videoübertragung für industrielle, gewerbliche und militärische Anwendungen wie unbemannte Luftfahrzeuge (UAVs). Dieser Artikel untersucht eine Breitband-Wireless-Video-Signal-Kette Umsetzung mit dem AD9361 AD9364 2,3 integrierte Transceiver-ICs, die Menge der übertragenen Daten, die entsprechende RF besetzte Signalbandbreite, die Übertragungsstrecke und die Sende-Stromversorgung. Es wird auch die Implementierung der PHY-Schicht von OFDM beschreiben und gegenwärtige Hopping-Frequenz-Testergebnisse anzeigen, um HF-Interferenzen zu vermeiden. Schließlich werden wir die Vor - und Nachteile zwischen Wi-Fi und dem RF-Agile-Transceiver in Breitband-Wireless-Anwendungen diskutieren. Die Signalkette Abbildung 1 veranschaulicht das vereinfachte drahtlose Videoübertragungsschema unter Verwendung des AD9361AD9364 und eines BBIC. Die Kamera erfasst das Bild und überträgt Videodaten an einen Basisbandprozessor über Ethernet, HDMI Reg. USB oder eine andere Schnittstelle. Bildcodierung kann durch Hardware oder das FPGA abgewickelt werden. Die RF-Front beinhaltet den Switcher, LNA und PA zum programmierbaren integrierten Transceiver. Wie viel Daten zu übertragen sind Tabelle 1 zeigt den signifikanten Größenunterschied zwischen den unkomprimierten und komprimierten Datenraten. Durch die Verwendung von hocheffizienten Videokodierungen (HEVC), die auch als H.265 und MPEG-H Part 2 bekannt sind, können wir die Datenrate verringern und die Bandbreite sparen. H.264 ist derzeit eines der am häufigsten verwendeten Formate für die Aufnahme, Komprimierung und Verteilung von Videoinhalten. Es stellt einen großen Schritt vorwärts in der Videokompressionstechnologie dar und ist einer von einigen möglichen Nachfolgern zum weit verbreiteten AVC (H.264 oder MPEG-4 Teil 10). Tabelle 1 fasst die unkomprimierten und komprimierten Datenraten in verschiedenen Videoformaten zusammen. Annahmen umfassen eine Video-Bittiefe von 24 Bits und eine Bildrate von 60 fps. Im 1080p-Beispiel beträgt die Datenrate 14,93 Mbps nach der Kompression, die dann leicht vom Basisbandprozessor und der drahtlosen PHY-Schicht gehandhabt werden kann. Tabelle 1. Komprimierte Datenraten-Signalbandbreite Die AD9361AD9364-Unterstützungskanalbandbreite von lt200 kHz bis 56 MHz durch Ändern der Abtastrate, der digitalen Filter und der Dezimierung. Die AD9361AD9364 sind Null-IF-Transceiver mit I - und Q-Kanälen, um die komplexen Daten zu übertragen. Die komplexen Daten umfassen Real - und Imaginärteile, die I und Q entsprechen, die mit der gleichen Frequenzbandbreite lokalisieren, um die Spektrum-Effizienz im Vergleich zu einem einzigen Teil zu verdoppeln. Die komprimierten Videodaten können den I - und Q-Kanälen zugeordnet werden, um Konstellationspunkte zu erzeugen, die als Symbole bezeichnet werden. Fig. 2 zeigt ein 16-QAM-Beispiel, bei dem jedes Symbol vier Bits darstellt. Bei einem Ein-Trägersystem muss die I - und Q-Digitale Wellenform vor dem DAC ein Pulsformungsfilter durchlaufen, um das gesendete Signal innerhalb einer begrenzten Bandbreite zu formen. Ein FIR-Filter kann für die Pulsformung verwendet werden, und die Filterantwort ist in Fig. 4 dargestellt. Um die Treue der Information aufrechtzuerhalten, gibt es eine minimale Signalbandbreite, die der Symbolrate entspricht. Und die Symbolrate ist proportional zur komprimierten Videodatenrate, wie in der folgenden Gleichung gezeigt. Für das OFDM-System sollten die komplexen Daten mit Hilfe der IFFT zu den Subträgern moduliert werden, die auch das Signal in einer begrenzten Bandbreite überträgt. Die Anzahl der mit jedem Symbol übertragenen Bits hängt von der Modulationsreihenfolge ab. In welchem ​​alpha ist der Filterbandbreitenparameter. Aus den vorangegangenen Formeln können wir diese Gleichung ableiten, also können wir die RF-besetzte Signalbandbreite berechnen, wie in Tabelle 2 zusammengefasst. Tabelle 2. Besetzte HF-Signalbandbreite mit Modulationsreihenfolge (alpha 0.25) Das AD9361AD9364 mit bis zu 56 MHz Signal Bandbreite, unterstützen alle Table-2-Video-Format Übertragungen und noch höhere Frame-Raten. Die Modulation mit höherer Ordnung nimmt eine kleinere Bandbreite ein, und das Symbol repräsentiert mehr Informationsbits, aber ein höheres SNR wird benötigt, um zu demodulieren. Die Übertragungsstrecke und die Transmitterleistung Bei Anwendungen wie UAVs ist die maximale Übertragungsstrecke ein kritischer Parameter. Allerdings ist es gleichermaßen wichtig, dass die Kommunikation auch in begrenztem Abstand nicht abgeschnitten wird. Sauerstoff, Wasser und andere Hindernisse (mit Ausnahme der Freiraumdämpfung) können das Signal abschwächen. Abbildung 6 zeigt das drahtlose Kommunikationskanal-Verlustmodell. Die Empfangsempfindlichkeit wird normalerweise als das minimale Eingangssignal (S min) genommen, das zum Demodulieren oder Wiederherstellen der Information von dem Sender erforderlich ist. Nach Erreichen der Empfängerempfindlichkeit kann die maximale Übertragungsstrecke mit einigen Annahmen berechnet werden, wie hier gezeigt: (SN) min ist das minimale Signal-Rausch-Verhältnis, das benötigt wird, um ein Signal NF zu verarbeiten, ist die Rauschzahl des Empfängers k ist Boltzmannrsquos Konstant 1,38 mal 10 ndash23 joulek T 0 ist die absolute Temperatur des Empfängereingangs (Kelvin) 290 KB ist die Empfängerbandbreite (Hz) Der Parameter (SN) min hängt von der Modulationsdemodulationsreihenfolge ab. Mit dem gleichen SNR erhält die niedrigere Auftragsmodulation einen niedrigeren Symbolfehler, und mit dem gleichen Symbolfehler erfordert eine höhere Auftragsmodulation ein höheres SNR zum Demodulieren. Wenn also der Sender weit vom Empfänger entfernt ist, ist das Signal schwächer und das SNR ist nicht in der Lage, die Demodulation hoher Ordnung zu unterstützen. Um den Sender online zu halten und ein Videoformat mit der gleichen Videodatenrate zu pflegen, sollte das Basisband eine niedrigere Auftragsmodulation auf Kosten der zunehmenden Bandbreite verwenden. Dadurch wird sichergestellt, dass die empfangenen Bilder nicht verschwommen sind. Glücklicherweise bietet Software-definiertes Radio mit digitaler Modulation und Demodulation die Möglichkeit, die Modulation zu ändern. Die vorherige Analyse basiert auf der Annahme, dass die Sender-HF-Leistung konstant ist. Während eine größere HF-Sendeleistung mit der gleichen Antennenverstärkung einen entfernteren Empfänger mit der gleichen Empfangsempfindlichkeit erreicht, sollte die maximale Sendeleistung den FCCCE-Strahlungsstandards entsprechen. Zusätzlich hat die Trägerfrequenz einen Einfluss auf die Übertragungsstrecke. Wenn sich eine Welle durch den Raum ausbreitet, besteht ein Verlust durch Dispersion. Der freie Raumverlust wird bestimmt durch In welchem ​​der R der Abstand ist, lambda die Wellenlänge, f die Frequenz und C die Lichtgeschwindigkeit ist. Daher wird die größere Frequenz mehr Verlust über die gleiche freie Raumdistanz haben. Beispielsweise wird die Trägerfrequenz bei 5,8 GHz um mehr als 7,66 dB im Vergleich zu 2,4 GHz über die gleiche Übertragungsstrecke abgeschwächt. HF-Frequenz und Umschaltung Der AD9361AD9364 verfügt über einen programmierbaren Frequenzbereich von 70 MHz bis 6 GHz. Dies wird die meisten NLOS-Frequenzanwendungen erfüllen, einschließlich verschiedener Arten von lizenzierten und nicht lizenzierten Frequenzen wie 1,4 GHz, 2,4 GHz und 5,8 GHz. Die 2,4 GHz Frequenz ist weit verbreitet für Wi-Fi, Bluetooth reg. Und IoT short - range Kommunikation, so dass es immer mehr überfüllt. Verwenden Sie es für drahtlose Videoübertragung und Steuersignale erhöht die Chancen für Signalstörungen und Instabilität. Dies schafft unerwünschte und oft gefährliche Situationen für UAVs. Mit Frequenzumschaltung, um eine saubere Frequenz zu halten, halten die Daten und steuern die Verbindung zuverlässiger. Wenn der Sender eine überfüllte Frequenz feststellt, wechselt er automatisch zu einem anderen Band. Zum Beispiel werden zwei UAVs, die die Frequenz verwenden und in unmittelbarer Nähe arbeiten, mit jeder anderen Kommunikation zusammenarbeiten. Das automatische Umschalten der LO-Frequenz und die Wiederwahl des Bandes wird dazu beitragen, eine stabile drahtlose Verbindung aufrechtzuerhalten. Die adaptive Auswahl der Trägerfrequenz oder des Kanals während der Einschaltperiode ist eines der hervorragenden Merkmale im High-End-UAV. Frequency Hopping Fast Frequenzsprung, der in elektronischen Gegenmaßnahmen (ECM) weit verbreitet ist, hilft auch, Störungen zu vermeiden. Normalerweise, wenn wir die Häufigkeit hüpfen wollen, muss die PLL nach der Prozedur neu platzieren. Dazu gehören das Schreiben der Frequenzregister und das Durchlaufen der VCO-Kalibrierzeit und der PLL-Sperrzeit, so daß das Intervall der Hopping-Frequenz annähernd zu Hunderten von Mikrosekunden liegt. Fig. 7 zeigt ein Beispiel einer Hüft-Sender-LO-Frequenz von 816,69 MHz bis 802,03 MHz. Der AD9361 wird im normalen Frequenzumschaltmodus verwendet und die HF-Ausgangsfrequenz des Senders springt von 814,69 MHz auf 800,03 MHz mit einer Referenzfrequenz von 10 MHz. Die Hüpffrequenz wird mit dem E5052B wie in Abbildung 7 gezeigt getestet. Die VCO-Kalibrierung und PLL-Sperrzeit beträgt ca. 500 Mikrometer gemäß Abbildung 7b. Der Signalquellenanalysator E5052B kann verwendet werden, um die PLL-Einschwingantwort zu erfassen. Fig. 7a zeigt den Breitbandmodus der transienten Messung, während Fig. 7b und 7d eine signifikante Feinauflösung in der Frequenz - und Phasenübergangsmessung mit Frequenzsprung darstellen. 6 Fig. 7c zeigt die Ausgangsleistungsantwort. 500 micros ist ein sehr langes intervall für die hüpfanwendung. Allerdings enthält der AD9361AD9364 einen Fast-Lock-Modus, der es ermöglicht, schneller als normale Frequenzänderungen zu erreichen, indem er Sätze von Synthesizer-Programmierinformationen (sogenannte Profile) in den devicersquos-Registern oder dem Basisband-Prozessorrsquos-Speicherplatz speichert. Abbildung 8 zeigt das Testergebnis, indem der Schnellsperrmodus verwendet wird, um die Sprungfrequenz von 882 MHz bis 802 MHz zu realisieren. Die Zeit liegt bei weniger als 20 Mikrometer, entsprechend der 8d-Phasenreaktion. Die Phasenkurve wird durch Bezugnahme auf die Phase von 802 MHz gezeichnet. Die SPI-Schreibzeit und die VCO-Kalibrierzeit werden in diesem Modus aufgrund der Frequenzinformation und der Kalibrierergebnisse, die in Profilen gespeichert werden, eliminiert. Wie wir sehen können, zeigt Abbildung 8b die schnelle Frequenzsprungmöglichkeit des AD9361AD9364. Die Implementierung des PHY LayermdashOFDM Orthogonal Frequenzmultiplexens (OFDM) ist eine Form der Signalmodulation, die einen Modulationsstrom hoher Datenrate auf viele langsam modulierte schmalbandige, nahe beabstandete Subträger teilt. Dies macht es weniger empfindlich für selektive Frequenz verblassen. Die Nachteile sind ein hoher Peak-to-Average-Leistungsverhältnis und eine Empfindlichkeit gegenüber Carrier Offset und Drift. Das OFDM ist weit verbreitet in der Breitband-Wireless-Kommunikation PHY-Schicht angewendet. Die kritische Technologie des OFDM umfasst IFFTFFT, Frequenzsynchronisation, Abtastzeitsynchronisation und Symbolrahmensynchronisation. Die IFFTFFT sollte so schnell wie möglich über FPGA realisiert werden. Es ist auch sehr wichtig, das Intervall der Subträger zu wählen. Das Intervall sollte groß genug sein, um der Mobilitätskommunikation mit Doppler-Frequenzverschiebung standzuhalten und klein genug, um mehr Symbole innerhalb der begrenzten Frequenzbandbreite zu tragen, um die Effizienz des Spektrums zu erhöhen. COFDM bezieht sich auf eine Kombination aus Codiertechnik und OFDM-Modulation. COFDM mit seinem hohen Widerstand der Signalabschwächung und Vorwärtsfehlerkorrektur (FEC) Vorteile können Videosignale von jedem beweglichen Objekt senden. Die Codierung erhöht die Signalbandbreite, ist aber meist der Kompromiss wert. Durch die Kombination von modellbasiertem Design und automatischen Codegenerierungswerkzeugen von MathWorks mit den leistungsstarken Xilinx Reg Zynq SoCs und Analog Devices integrierten HF-Transceivern können SDR-Systemdesign, - verifizierung, - tests und - implementierung effektiver denn je sein, was zu einem leistungsstärkeren Radio führt Systeme und die Verringerung der Time-to-Market. 7 Was sind die Vorteile über Wi-Fi Drones mit Wi-Fi ausgestattet sind sehr einfach an ein Handy, Laptop und andere mobile Geräte, die sie sehr bequem zu bedienen. Aber für die drahtlose Videoübertragung in UAV-Anwendungen bietet die FPGA plus AD9361-Lösung viele Vorteile gegenüber Wi-Fi. Zuerst in der PHY-Schicht, agile Frequenzumschaltung und schnelles Hüpfen des AD9361AD9364 helfen, Störungen zu vermeiden. Die meisten integrierten Wi-Fi-Chips funktionieren auch auf dem gekröpften 2,4 GHz Frequenzband ohne Frequenzbandwiederwahlmechanismus, um die drahtlose Verbindung stabiler zu machen. Zweitens kann mit der FPGA plus AD9361 Lösung das Übertragungsprotokoll flexibel von Designern definiert und entwickelt werden. Wi-Fi-Protokoll ist Standard und basiert auf einem Zwei-Wege-Handshake mit jedem Paket von Daten. Mit Wi-Fi muss jedes Datenpaket bestätigen, dass ein Paket empfangen wurde und dass alle 512 Bytes im Paket intakt empfangen wurden. Wenn ein Byte verloren geht, muss das gesamte 512 Byte Paket erneut übertragen werden. 8 Während dieses Protokoll die Datenzuverlässigkeit sicherstellt, ist es komplex und zeitaufwendig, die drahtlose Datenverbindung wiederherzustellen. Das TCPIP-Protokoll führt zu einer hohen Latenz, die zu Nonreal-Time-Video und - Kontrolle führt, was zu einem UAV-Crash führen kann. Die SDR-Lösung (FPGA plus AD9361) verwendet einen Einwegstrom von Daten, was bedeutet, dass die Drohne im Himmel das Videosignal wie eine Fernsehsendung überträgt. Es gibt keine Zeit für das Senden von Paketen, wenn Echtzeit-Video das Ziel ist. Darüber hinaus bietet Wi-Fi nicht das richtige Maß an Sicherheit für viele Anwendungen. Durch die Verwendung des Verschlüsselungsalgorithmus und des benutzerdefinierten Protokolls ist die FPGA plus AD9361AD9364 Lösung weit weniger anfällig für Sicherheitsbedrohungen. Darüber hinaus liefert der Einweg-Broadcast-Datenstrom die Übertragungsstrecken-Fähigkeiten, die zwei - bis dreimal so hoch sind wie die von Wi-Fi-Ansätzen. 8 Die Flexibilität aus der Software-definierten Funkfähigkeit ermöglicht die digitale Modulationsdemodulationsanpassung, um die Distanzanforderungen zu erfüllen und die Änderung des SNR in komplexen Raumstrahlungsumgebungen anzupassen. Schlussfolgerungen Dieser Artikel veranschaulicht die kritischen Parameter der Verwendung einer FPGA plus AD9361AD9364 Lösung für High-Definition Wireless Video Übertragung Umsetzung. Mit agiler Frequenzbandumschaltung und schnellem Frequenzsprung ist es möglich, eine stabilere und zuverlässigere Funkverbindung herzustellen, um der zunehmend komplexen Strahlung im Raum zu widerstehen und die Wahrscheinlichkeit eines Crashs zu verringern. In der Protokollschicht ist die Lösung flexibler, mit einer Einweg-Übertragung, um die drahtlose Etablierungszeit zu reduzieren und eine niedrigere Latenzverbindung herzustellen. In industriellen und kommerziellen Anwendungen wie Landwirtschaft, Power-Line Inspektion und Überwachung, stabile, sichere und zuverlässige Übertragungen sind entscheidend für den Erfolg. Referenzen 2 AD9361 Datenblatt. Analog Devices, Inc. 3 AD9364 Datenblatt. Analog Devices, Inc. 4 Ken Gentile. Anwendungshinweis AN-922, Digital Pulse-Shaping Filter Grundlagen. Analog Devices, Inc. 5 Scott R. Bullock Transceiver und Systemdesign für digitale Kommunikation. 4. Auflage SciTech Publishing, Edison, NJ, 2014. Wei Zhou ist ein Anwendungsingenieur für Analog Devices, Inc., der das Design und die Entwicklung von HF-Transceiver-Produkten und - Anwendungen unterstützt, insbesondere in der drahtlosen Videoübertragung und drahtlosen Kommunikationsfeldern. Er arbeitete im ADIs Central Applications Center in Peking, China, seit fünf Jahren mit verschiedenen Produkten wie DDS, PLL, High Speed ​​DACADC und Uhren. Vor seinem Eintritt bei ADI erhielt er seine B. S. Grad von der Universität Wuhan, Wuhan, China, im Jahr 2006 und seine M. S. Grad von Institut für Elektronik, Chinesische Akademie der Wissenschaften (CAS), Peking, China, im Jahr 2009. Er arbeitete als HF-und Mikrowellen-Schaltungen und System-Design-Ingenieur für ein Luftfahrt-Technologie-Unternehmen von 2009 bis 2011. Related Articles Related Products RF Agile TransceiverEmbedded Ingenieurwesen. Ich werde Ihnen zeigen, wie man den einfachsten möglichen digitalen Filter quittieren durchschnittlichen Filterquot zu implementieren. Obwohl es sehr einfach zu implementieren ist, aber immer noch in vielen Anwendungen das ist mehr als gut genug. Zum Beispiel reduzieren zufälliges Rauschen aus Signal. Natürlich, wenn es ganz einfach ist, hat es Probleme wie. Es hat keine sehr scharfe Filter Response. Kanal 1 Eingang. Sweep von 20Hz bis 6Khz, Kanal 4 (grün) 15 Punkt gefilterter Ausgang, M (Red) Ausgabe im Freq Domain Samstag, 1. Oktober 2016 Dieses Projekt ist der letzte Teil in der Herstellung eines wirklich leistungsfähigen Solar Lichts. In diesem Projekt haben wir LTC3478 basierte Philips lumileds Treiber und BQ24650 basierte MPPT Solar Li-Ion Ladung Controller. Wir verwenden insgesamt 3 9 Watt jede LED Driver Boards und One Ladesteuerung, um 6 Cell 7.6V 20000mah Li-Lion Akku aufzuladen, Es gibt 4 LED-Balken-Grafik-Display, um die Schätzung der Akkuladung und eine einzige Taste zur Steuerung Onoff, Different Level zu zeigen Der Helligkeit. Und wähle einen aus. Alle oder wenige LED-Boards zu leuchten. Es gibt nicht viel zu beschreiben in der Zeit von schmeatic und Firmware wie alle Firmware und Schmeatic aer bereits auf meinem github account. User Interface Panel ist aus PCB mit 4 Batterie Status LED ein Port für Solarpanel Connector und ein Steuerschalter gemacht. Wenn die Batterie eingeschaltet ist LED-Status entsprechend angezeigt und wenn die Batterie entladen wird, wird der Status der LED entsprechend aktualisiert. In der Ergänzung zu dem kleinen Solar-Beleuchtungsprojekt, an dem ich arbeitete, habe ich diesen kleinen Solar-Laderegler erstellt, um Lithium-Ionen-Akku (Li-Ion) aufzuladen. Circuit verwenden Texas Instrument BQ24650 im Herzen der Schleife, um die Ladung zu kontrollieren. Da die Schaltung einen externen MOSFET hat, so dass maximal 160 Ladestrom auf wirklich hohe Werte eingestellt werden kann. 160Circuit akzeptieren Solar Panel Werte von 5V bis 28V. Ich habe es mit 12V nominal getestet (17Volt offener Stromkreis) 160. und 24 Volt nominal Solarpanel bei Batterieladestrom bis 4A. Derzeit in meinem Haus installiert seit ein paar Monaten Aufladen einer 20000 mah Li-Ionen-Akku. Circuit hat große 4-polige Hochstromkapazität Molex-Stecker für Solarpanel. 6-poliger Stecker für Batterie und Lastschalter. Es ist auch möglich, NTC für die Batterietemperaturüberwachung anzuschließen. BQ24650 kann die Temperatur der Batterie automatisch überwachen. Microcontroller hat 3 PWM-Ausgang für LED-Dimmer und 6-gpio-Pin-Header für einen besseren Status-LED und einen User Interface Key gewidmet. Hallo zu Deutsch Leser. Das ist mein erster Artikel auf Deutsch. Ich habe viel aufrufe aus Deutschland, ich bin auch auf Deutsch und ich bin auch nicht auf Deutsch. Ich bin auch auf Deutsch und Englisch Meine erfahrungen auf deutsch kurze ist.160 160 160 160So beginnen wir. Heutzutage arbeite ich an einem Projekt. MPPT Solar li-ion Laderquot. Bei diesem projekt brauche ich eine160sehr160vollmacht 25W LED leicht. Aber 25W ist viel fur ein160LED-Triber. Es erforden viele kentnisse ein 25 W LED-Triber zu entwerfen. Hauptsorge auf die Projket quotMPPT Solar-lon Laderquot ist zu Lernen wie der MPPT Larder Arbeitet und wie die Software Algorithmus ist. Das Projekt ist ein teil von einem Projekt wurde publiziere ich spter.160 160 160 160 Zuerst arbeitete ich ein 160little Solar Beleuchtung Projekt , Ich brauche eine wirklich helle wahnsinnige 25W 160LED Beleuchtung. Aber Problem war für 25W es eine Menge Power für LED und es erfordert einige Fähigkeiten, um eine solche hohe Wattage LED-Treiber zu machen. Primäres Ziel dieses Projektes ist es, eine Abfahrt Wissen über MPPT Ladung Controller und MPPT Lade-Algorithmen zu bekommen. Dieses projekt ist Teil des projekts Dass ich später posten werde. 160160160 Dieser Beitrag wird als 4. Teil in Serie von einem Linux-fähigen ARM Board zu Hause sein. Klicken Sie auf First. Zweites und Drittes, um zu vorherigen Teilen zu gehen, also lasst uns beginnen. Was ist ein Bootloader, warum brauchen wir it160 ein Bootloader ist ein Programm, das das erste ist, das von der CPU ausgeführt wird. Es trennt einige sehr spezifische Zweck, um einige sehr wesentliche Dinge vor dem Laden des Hauptprogramms (kann OS) in den Hauptspeicherplatz zu konfigurieren. Deshalb heißt es Bootloader. Je nach Bedarf Bootloader kann eine andere Aufgabe (wir werden sie hier abdecken). Es gibt verschiedene Formen und Größen der Bootloader. Sie alle dienen fast dem gleichen Zweck. Mit Mikrocontrollern. Manchmal lädt es eigentlich nicht das Hauptprogramm in den Speicher, sondern übergibt den ausführenden Zeiger auf das Hauptprogramm, damit das Hauptprogramm direkt aus dem Speicher laufen kann, wo es ist. Board mit 4,3-Zoll-LCD läuft Qt5-Anwendung zum Anzeigen von JPEG-Bild und TimeHomemade GPS-Empfänger Abbildung oben ist der Front-End, erster Mixer und IF-Verstärker eines experimentellen GPS-Empfängers. Die linke SMA ist mit einer handelsüblichen Antenne mit integriertem LNA - und SAW-Filter verbunden. Ein synthetisierter erster lokaler Oszillator treibt die untere SMA an. Pin-Header auf der rechten Seite sind Power-Eingang und IF-Ausgang. Letzteres ist mit einem Xilinx FPGA verbunden, das nicht nur DSP durchführt, sondern auch einen Fraktional-N Frequenzsynthesizer hostet. Mehr dazu später. Ich war motiviert, diesen Receiver nach dem Lesen der Arbeit 1 von Matjax017E Vidmar, S53MV, zu entwerfen, der vor über 20 Jahren einen GPS-Empfänger vor Kratzer entwickelte, der hauptsächlich diskrete Komponenten benutzte. Seine Verwendung von DSP nach einem hart-limitierenden IF und 1-bit ADC interessierte mich. Der hier beschriebene Empfänger arbeitet nach demselben Prinzip. Sein 1-Bit-ADC ist die 6-polige IC in der Nähe der Pin-Header, ein LVDS-Ausgang Komparator. Versteckt unter Lärm, aber nicht in den zweistufigen quantisierten Mush ausgelöscht, die entstehen, sind Signale von jedem Satelliten im Blick. Alle GPS-Satelliten senden auf der gleichen Frequenz, 1575.42 MHz, mit direkte Sequenz Spreizspektrum (DSSS). Der L1-Träger ist über eine Bandbreite von 2 MHz verteilt und seine Festigkeit auf der Erdoberfläche beträgt -130 dBm. Die thermische Rauschleistung in der gleichen Bandbreite beträgt -111 dBm, so dass ein GPS-Signal an der Empfangsantenne 20 dB unter dem Rauschboden liegt. Dass irgendwelche der anwesenden Signale, die übereinander liegen und in Rauschen vergraben sind, nach einer zweistufigen Quantisierung wiederherstellbar sind, scheint mir eine Intimierung zu schreiben, um mich zu überzeugen. GPS beruht auf den Korrelationseigenschaften von Pseudozufallssequenzen, die als Gold-Codes bezeichnet werden, um Signale von Rauschen und voneinander zu trennen. Jeder Satellit überträgt eine eindeutige Sequenz. Alle unkorrelierten Signale sind Rauschen, auch solche anderer Satelliten und Hard-Limiter-Quantisierungsfehler. Das Mischen mit demselben Code in der richtigen Phase dehnt das gewünschte Signal aus und breitet sich weiter aus. Die schmalbandige Filterung entfernt dann Breitbandrauschen, ohne das (noch einmal schmale) Nutzsignal zu beeinflussen. Hard-Limiting (1-Bit-ADC) verschlechtert SNR um weniger als 3 dB, ein Preis wert, um Hardware-AGC zu vermeiden. Mai 2013 Update Dies ist jetzt ein wirklich tragbarer, batteriebetriebener, 12-Kanal-GPS-Empfänger mit schlüsselfertiger Software, der Satelliten erfasst und verfolgt und seine Position kontinuierlich neu berechnet, ohne Benutzereingriff. Das komplette System (unten, links) umfasst: 16x2 LCD-Display, Himbeer-Pi-Modell Ein Computer, zwei benutzerdefinierte Leiterplatten, kommerzielle Patch-Antenne und Li-Ion-Akku. Gesamtsystemstromverbrauch beträgt 0,4A für eine Batterielebensdauer von 5 Stunden. Die Himbeer-Pi wird über das Flachbandkabel mit dem GPIO-Header an die Frac7 FPGA-Platine angetrieben und benötigt keine weiteren Anschlüsse. Derzeit läuft der Pi Raspbian Linux. Eine kleinere distro würde die Zeit verkürzen, um zuerst zu reparieren. Nach dem Booten von SD-Card startet die GPS-Anwendungssoftware automatisch. Beim Ausstieg gibt es eine Möglichkeit, das Pi vor dem Ausschalten ordnungsgemäß abzuschalten. Pi-Software-Entwicklung wurde kopflos über SSH und FTP über einen USB-Wi-Fi-Dongle durchgeführt. Quellcode und Dokumentation finden Sie am Ende dieser Seite. Beide kundenspezifischen Leiterplatten sind einfache 2-lagige PTH-Platten mit durchgehenden Bodenebenen auf der Unterseite. Im Uhrzeigersinn um den Xilinx Spartan 3 auf der Frac7 FPGA-Platine: von 12 Uhr bis 3 Uhr sind der Loop-Filter, VCO, Power Splitter und Prescaler des Mikrowellen-Frequenzsynthesizers unten rechts der Joystick und der JTAG-Stecker und um 6 Uhr Pin-Header für das Himbeer-Pi-Flachbandkabel. Weit links ist der LCD-Anschluss. In der Nähe ist ein temperaturkompensierter spannungsgesteuerter Kristalloszillator (TCVCXO), der eine stabile Referenzfrequenz liefert, die für den GPS-Empfang unerlässlich ist. Die TCVCXO ist gut, aber nicht ganz bis zum GPS-Standard bei der Bedienung von un-boxed an windigen Standorten. Das Blasen desselben verdrängt den 10,000000 MHz-Kristalloszillator um etwa 1 Teil in 10 Millionen oder 1 Hz, der 150 Mal durch den Synthesizer PLL vergrößert wird. Das ist genug, um die Satelliten-Tracking-Loops vorübergehend freizuschalten, wenn es plötzlich geschieht. Die Vorrichtung ist auch etwas empfindlich gegenüber Infrarot, z. B. Aus Halogenbirnen und TV-Fernbedienungen Als erstmals im Jahr 2011 gepostet wurde, war dies ein Vier-Kanal-Empfänger, dh es konnte nur vier Satelliten gleichzeitig verfolgen. Mindestens vier sind erforderlich, um für Benutzer Position und Empfänger Uhr Vorspannung zu lösen, aber größere Genauigkeit ist mit mehr möglich. In dieser ursprünglichen Version füllten vier identische Instanzen des Tracker-Moduls das FPGA. Aber die meisten Flops wurden nur einmal pro Millisekunde getaktet. Nun, eine benutzerdefinierte Soft-Core-CPU im Inneren des FPGA serialisiert die Verarbeitung und nur 50 der FPGA-Gewebe ist für einen 8-Kanal-Empfänger oder 67 für 12-Kanäle erforderlich. Anzahl der Kanäle ist ein Parameter in der Quelle und könnte höher gehen. Die Positionsgenauigkeit ist am besten, wenn die Antenne 360 ​​° des Himmels sehen und Signale aus allen Richtungen empfangen kann. Im Allgemeinen, je mehr Satelliten im Blick, desto besser. Zwei oder mehr Satelliten auf demselben Lager können zu einer schlechten Geometrie führen. Die beste Fix so weit war plusmn1 Meter an einem sehr offenen Ort mit 12 Satelliten, aber Genauigkeit ist in der Regel plusmn5 Meter in ärmeren Standorten mit weniger Satelliten. September 2014 Update Der Quellcode für dieses Projekt wurde unter der GNU General Public License (GPL) erneut veröffentlicht. Architektur Verarbeitung ist zwischen FPGA und Pi durch Komplexität und Dringlichkeit aufgeteilt. Der Pi verarbeitet mathematisch-intensive Heavy-Heben in seinem eigenen Tempo. Der FPGA synthetisiert den ersten lokalen Oszillator, bedient hochrangige Ereignisse in Echtzeit und verfolgt Satelliten autonom. Der Pi steuert den FPGA über eine SPI-Schnittstelle. Zweckmäßigerweise wird das gleiche SPI verwendet, um den FPGA-Konfigurationsbitstream und den binären ausführbaren Code für die eingebettete CPU zu laden. Das FPGA kann auch über ein Xilinx Platform USB JTAG Kabel von einem Windows PC gesteuert werden und erkennt automatisch, welche Schnittstelle benutzt wird. Die L1-Frequenzen werden durch Mischen mit einem 1552,82 MHz lokalen Oszillator auf der GPS3-Front-End-Platine auf eine 1. IF von 22,6 MHz heruntergewandelt. Alle nachfolgenden IF - und Basisband-Signalverarbeitung erfolgt digital im FPGA. Zwei Proportional-Integral - (PI) - Controller pro Satellit, Track-Carrier und Code-Phase. NAV-Daten, die von den Satelliten übertragen werden, werden im FPGA-Speicher gesammelt. Dies wird in den Pi hochgeladen, der die Parität überprüft und Ephemeride aus dem Bitstrom extrahiert. Wenn alle erforderlichen Orbitalparameter gesammelt werden, wird ein Schnappschuss von bestimmten internen FPGA-Zählern genommen, von denen die Zeit der Übertragung auf plusmn 15ns Präzision berechnet wird. Ein Großteil des 1552,82 MHz Synthesizers ist im FPGA implementiert. Man könnte Jitterprobleme erwarten, Co-Hosting ein Phasendetektor mit anderen Logik, aber es funktioniert. Synthesizer-Ausgangsspektral-Reinheit ist hervorragend, obwohl der FPGA-Kern wütend ist und nicht alle auf harmonisch bedingten Frequenzen. Dieser Ansatz wurde getroffen, weil ein Board ähnlich wie Frac7 bereits aus einem früheren Synthesizer-Projekt existierte. Das Hinzufügen eines Front-Endes war der kürzeste Weg zu einem Prototyp-Empfänger. Aber diese erste Version war nicht tragbar: es hatte unangenehme Stromanforderungen und keinen On-Board-Frequenzstandard. Signalverarbeitung bis hin zum Hard-Limiter: Der LMH7220 Komparator hat eine maximale Eingangs-Offsetspannung von 9,5mV. Verstärktes thermisches Rauschen muss dies übertreffen, um es zu umgehen. Schwache GPS-Signale beeinflussen nur den Komparator in der Nähe von Nulldurchgängen Sie werden durch das Rauschen abgetastet Um den Rauschpegel am Vergleichseingang abzuschätzen, tabellieren wir Gewinne, Einfügungsverluste und Rauschzahlen: In-Band-Rauschen am Mischerausgang ist -1740.828-1.5-3.920- 610log10 (2,5e6) -73 dBm oder 52microV RMS. Der Mischer wird in 50-Ohm resistiv beendet und die Stufen arbeiten danach mit höherer Impedanz. Der diskrete ZF-Streifen hat eine Gesamtspannungsverstärkung von 1000, so dass der Komparator-Eingangspegel 52mV RMS beträgt. Der LMH7220 fügt 59 dB Verstärkung hinzu, was insgesamt 119 dB für die ganze IF macht. Der Einsatz von so viel Gewinn bei einer Frequenz war ein Risiko. Um es zu minimieren, wurde eine ausgeglichene Schaltkreise über eine feste Grundebene verwendet und abgeschirmtes Twisted-Pair führt den Ausgang zum FPGA. Die Motivation war die Einfachheit, die Vermeidung einer zweiten Umwandlung. In der Praxis ist die Strecke stabil, so dass das Glücksspiel ausgezahlt wird. Aktiver Entkoppler Q1 liefert 5V für die Fernbedienung LNA. Der MMIC-Verstärker U2 bietet 20 dB Verstärkung (nicht bei IF) und sorgt für eine niedrige Gesamtsystem-Rauschzahl, auch wenn lange Antennenkabel verwendet werden. L1 und L2 sind handgewickelte Mikrowellen-Drosseln mit sehr hoher Eigenresonanzfrequenz, die senkrecht zueinander angeordnet sind und von der Grundebene frei sind. Wind 14 dreht, luftgekühlt, 1mm Innendurchmesser von 7cm Längen von 32wg emailliertem Kupferdraht. Mit dem Tracking-Generator auf einer Marconi 2383 SA überprüft, waren diese gut bis 4 GHz. Die Mini-Schaltungen MBA-15L DBM wurde für seinen niedrigen 6 dB Umwandlungsverlust bei 1,5 GHz und niedrigem 4 dBm LO Antriebsbedarf gewählt. R9 beendet den IF-Port. Drei volldifferenzielle ZF-Verstärkerstufen folgen dem Mischer. Low-Q parallel abgestimmte Schaltkreise zwischen Kollektoren, die die Bandbreite von -3 dB um 2,5 MHz einstellen und den Aufbau von DC-Offsets verhindern. L4, L5 und L6 sind Toko 7mm Spulen abgeschirmt. Der BFS17 wurde für seine hohe (aber nicht zu hohe) 1 GHz f T gewählt. I e ist 2mA für das niedrigste Geräusch und vernünftige Betar e. Die 22,6 MHz 1. IF wird durch Unterabtastung bei 10 MHz im FPGA digital auf 2,6 MHz abgesenkt. 2,6 MHz liegt nahe der Mitte der 5 MHz Nyquist Bandbreite. Es ist am besten, das genaue Zentrum zu vermeiden, aus Gründen, die später erklärt werden. Mehrere andere ZF-Frequenzen sind möglich: 27,5 MHz, die bei der 2. IF eine Frequenzumkehr erzeugt, wurde auch erfolgreich versucht. Es gibt einen Kompromiss zwischen Bildproblemen bei niedrigerer und verfügbarer BFS17-Verstärkung bei höheren Frequenzen. Die Signaldetektion beinhaltet die Lösung von drei Unbekannten: welche Satelliten sind im Blick, ihre Doppler-Verschiebungen und Code-Phasen. Eine sequentielle Suche dieses dreidimensionalen Raumes von einem sogenannten Kaltstart konnte viele Minuten dauern. Ein Warmstart mit Almanach-Daten zur Vorhersage von Positionen und Geschwindigkeiten erfordert noch eine Codesuche. Alle 1023 Codephasen müssen getestet werden, um den maximalen Korrelationspeak zu finden. Die Berechnung von 1023 Korrelationsintegralen im Zeitbereich ist sehr teuer und redundant. Dieser GPS-Empfänger verwendet einen FFT-basierten Algorithmus, der alle Codephasen parallel testet. Von kalt, dauert es 2,5 Sekunden auf einem 1,7 GHz Pentium, um die Signalstärke, die Dopplerverschiebung und die Codephase jedes sichtbaren Satelliten zu messen. Die Himbeer-Pi ist etwas langsamer. Bei der Konjugation ist die Kreuzkorrelationsfunktion y (Tau) des komplexen Signals s (t) und des durch den Offset Tau verschobenen Codes c (t): Der Korrelationstheorem besagt, dass die Fourier-Transformation eines Korrelationsintegrals gleich ist Das Produkt des komplexen Konjugats der Fourier-Transformation der ersten Funktion und der Fourier-Transformation der zweiten Funktion: FFT (y) CONJUGATE (FFT (s)) FFT (c) Korrelation wird im Basisband durchgeführt. Der 1.023 Mbps CA Code ist 1023 Chips oder 1ms lang. Forward FFT length must be a multiple of this. Sampling at 10 MHz for 4 ms results in an FFT bin size of 250 Hz. 41 Doppler shifts must be tested by rotating the frequency domain data, one bin at a time, up to plusmn20 bins plusmn5 KHz. Rotation can be applied to either function. The 22.6 MHz 1st IF from the 1-bit ADC is under-sampled by a 10 MHz clock in the FPGA, digitally down-converting it to a 2nd IF of 2.6 MHz. In software, the 2nd IF is down-converted to complex baseband (IQ) using quadrature local oscillators. For bi-level signals, the mixers are simple XOR gates. Although not shown above, the samples are temporarily buffered in FPGA memory. The Pi is not able to accept them at 10 Mbps. 1.023 Mbps and 2.6 MHz are generated by numerically-controlled-oscillator (NCO) phase accumulators. These frequencies are quite large compared to the sampling rate, and are not exact sub-harmonics of it. Consequently, the NCOs have fractional spurs. The number of samples per code chip dithers between 9 and 10. Fortunately, DSSS receivers are tolerant of narrow-band interferers, external or self-generated. Complex baseband is transformed to the frequency domain by a forward FFT which need only be computed once. An FFT of each satellites CA code is pre-computed. Processing time is dominated by the inner-most loop which performs shifting, conjugation, complex multiplication and one inverse-FFT per satellite-Doppler test. The Raspberry Pis Videocore GPU could be leveraged to speed things up. At 10 MHz sampling rate, code phase is resolved to the nearest 100ns. Typical CCF output is illustrated below: Calculating peak to average power over this data gives a good estimate of SNR and is used to find the strongest signals. The following were received at 20:14 GMT on 4 March 2011 in Cambridge, UK with the antenna on an outside North-facing window ledge: From northern latitudes, more GPS satellites will generally be found in the southern sky i. e. towards the equator. Taking longer samples increases SNR, revealing weaker signals but cancellation occurs when the capture spans NAV data transitions. Forward FFT length is an integral number of milliseconds however, the inverse FFT can be shortened, simply by throwing away data in higher frequency bins. SNR is preserved but code phase is not so sharply resolved. Nevertheless, a good estimate of peak position is obtained by weighted averaging the two strongest adjacent bins and off-air tests suggest this could work even down to quite short inverse FFT lengths. Having detected a signal, the next step is locking on, tracking it and demodulating the 50 bps NAV data. This requires two inter-dependent phase locked loops (PLLs) to track code and carrier phase. These PLLs must operate in real-time and are implemented as DSP functions in the FPGA. Pi software has a supervisory role: deciding which satellites to track, monitoring the lock status and processing the received NAV data. The tracking loops are good at maintaining lock, because they have very narrow bandwidths however, this same characteristic makes them poor at acquiring lock without help. They cannot see beyond loop bandwidth to capture anything further away. Initial phases and frequencies must be preset to the measured code phase and Doppler shift of the target satellite. This is orchestrated under Pi control. The loops should be in-lock from the outset and remain so. Code phase is measured relative to the FFT sample. The code NCO in the FPGA is reset at the start of sampling and accumulates phase at a fixed 1.023 MHz. It is later aligned with the received code by briefly pausing the phase accumulator. Doppler shift on the 1575.42 MHz carrier is plusmn5 KHz or plusmn3 ppm. It also affects the 1.023 Mbps code rate by plusmn3 chips per second. The length of the pause is adjusted for code creep in the time since the sample was taken. Fortunately, code Doppler is proportional to carrier Doppler for which we have a good estimate. Hardware software split In the diagram below, colour-coding shows how the implementation of the tracking DSP is now split between hardware and software. Previously, this was all done in hardware, with identical parallel instances repeated for each channel, making inefficient use of FPGA resources. Now, the slower 1 KHz processing is done by software, and twice as many channels can be accommodated in half the FPGA real-estate. The six integrate-and-dump accumulators (Sigma) are latched into a shift register on the code epoch. A service request flag signals the CPU, which reads the data bit-serially. With 8 channels active, 8 of CPU time is spent executing the oprdBit instruction But there is plenty of time, and serial IO uses FPGA fabric economically. Luxuries like RSSI and IQ logging (e. g. for scatter plots) can now be afforded. The F(z) loop filter transfer functions swallow 2 of CPU bandwidth per active channel. These are standard proportional-integral (PI) controllers: 64-bit precision is used and gain coefficients KI and KP, although restricted to powers of 2, are dynamically adjustable. Each channel having to wait its turn, NCO rate-updates can be delayed by tens or hundreds of microseconds after a code epoch but this introduces negligible phase shift at frequencies where phase margin is determined. Thin traces are 1-bit, notionally representing plusmn1. The 2.6 MHz carrier is first de-spread by mixing with early, late and punctual codes. I and Q complex baseband products from the second rank of XOR gate mixers are summed over 10000 samples or 1ms. This low-pass filtering dramatically reduces noise bandwidth and thereby raises SNR. Downsampling to 1 KHz necessitates wider onward data paths in the software domain. Code phase is tracked using a conventional delay-locked loop or early-late gate. Power in the early and late channels is calculated using P I 2 Q 2 which is insensitive to phase. Early and late codes are one chip apart i. e. frac12 chip ahead-of and behind punctual. This diagram helps to get the error sense correct: A Costas Loop is used for carrier tracking and NAV data recovery in the punctual channel. NAV data, m, is taken from the I-arm sign bit with 180deg phase uncertainty. k is received signal amplitude and theta is phase difference between received carrier (sans modulation) and the local NCO. k varies from around 400 for the weakest recoverable signals up to over 2000 for the strongest. Notice how the error term fed back to the F(z) plant controller in the Costas Loop is proportional to received signal power ksup2. Tracking slope, and therefore loop gain, also vary with signal power in the code loop. Below is a Bode plot of open-loop gain for the Costas Loop at k500: Costas Loop bandwidth is around 20 Hz, which is about optimal for carrier tracking. Code loop bandwidth is 1 Hz. Noise power in such bandwidths is small and the loops can track very weak signals. The above kI and kP work for most signals, but need dropping one notch for the very strongest. Scilab predicts, and scatter plots confirm, the onset of instability at kge1500. Parity errors do not occur unless samples stray into the opposite half of the IQ plane. (i) Instability at kge1500 The above are 2 consecutive frames of 5 subframes each. Subframes are 300-bits long and take 6 seconds to transmit. Column 1 is the preamble 10001011. This appears at the start of every subframe but can occur anywhere in the data. The 17-bit counter in column 5 is time-of-week (TOW) and resets to zero at midnight Sunday. The 3-bit counter in column 7 is the subframe ID 1 through 5. Subframes 4 and 5 are subcommutated into 25 pages each and a complete data message comprising 25 full frames takes 12.5 minutes to transmit. I am only using data in subframes 1, 2 and 3 at present. Solving for user position Every GPS satellite transmits its position and the time. Subtracting time sent from time received and multiplying by the speed of light is how a receiver measures distance between itself and the satellites. Doing so with three satellites would yield three simultaneous equations in three unknowns (user position: x, y, z) if the precise time was available. In practice, receiver clocks are not accurate enough, the exact time is a fourth unknown, four satellites are therefore required and four simultaneous equations must be solved: An iterative method is used because the equations are non-linear. Using earths centre (0, 0, 0) and the approximate time as a starting point, the algorithm converges in only five or six iterations. The solution is found even if user clock error is large. The satellites carry atomic clocks but these too have errors and correction coefficients in subframe 1 must be applied to the time of transmission. Typical adjustments can be hundreds of microseconds. The uncorrected time of transmission is formed by scaling and adding several counters. Time-of-week (TOW) in seconds since midnight Sunday is sent every subframe. Data edges mark out 20ms intervals within 300-bit subframes. The code repeats 20 times per data bit. Code length is 1023 chips and chip rate is 1.023 Mbps. Finally, the 6 most significant bits of the code NCO phase are appended, fixing time of transmission to plusmn 15ns. Satellite positions at the corrected transmission time are calculated using ephemeris in subframes 2 and 3. Orbital position at a reference time toe (time of ephemeris) is provided along with parameters allowing (x, y,z) position to be calculated up to a few hours before or after. Ephemerides are regularly updated and satellites only transmit their own. Long term orbits of the entire constellation can be predicted less accurately using Almanac data in subframes 4 and 5 however, this is not essential if a fast FFT-based search is used. Solutions are computed in earth-centred, earth-fixed (ECEF) coordinates. User location is converted to latitude, longitude and altitude with a correction for eccentricity of the earth, which bulges at the equator. The scatter diagrams below illustrate repeatability, the benefit of averaging and the effect of poor satellite choices. Grid squares are 0.001deg on each side. Blue dots mark 1000 fixes. Yellow triangles mark the centres of gravity: (i) North-facing window ledge (ii) Rooftop antenna (iii) East-facing window ledge The tight cluster (ii) was obtained using satellites in four different quarters of the sky. Only the rooftop antenna had a clear view in all directions. But good fixes were obtained by averaging, even when half the sky was obscured. Rooftop fixes also exhibit spreading like (i) and (iii) if the wrong satellites are chosen. The above solutions were generated without compensating for ionospheric propagation delays using parameters in page 18 of subframe 4 which should be applied because this is a single frequency receiver. Ionospheric refraction increases path lengths between users and satellites. In April 2012, I fixed a bug that caused significant errors in user-position solutions. Originally, by not transforming satellite positions from earth-centred-earth-fixed (ECEF) to earth-centred-inertial (ECI) coordinates, I was effectively ignoring Earths rotation during the 60 to 80 ms that signals were in flight. I am now seeing positional solution accuracies of plusmn 5 metres after averaging, even with limited satellite visibility. Ive created an appendix showing how the iterative solution is developed, starting from a geometric range equation, which is linearised using a Taylor Series expansion, and solved by matrix methods, for the special case of four satellites or the general case of more, with the option of using weighted least-squares to control the influence of particular satellites. Youll find this and solution C source code in the links at the bottom of the page. Im grateful to Dan Doberstein for sending me an early draft of his GPS book 2 which helped me understand the solution algorithm. The official US government GPS Interface Specification 3 is an essential reference. Signal monitor The above circuit arrangement, mostly implemented in FPGA, de-spreads by taking the product of the 1-bit IF and punctual code, leaving 50 bps data modulation. A small notch due to BPSK carrier suppression can just be seen: These spectra show the same de-spread transmission at different spans and resolution bandwidths (RBW). Doppler shift was -1.2 KHz. The noise floor is antenna thermal noise amplified and filtered by the IF strip. -3 dB bandwidth looks around 3 MHz, slightly wider than planned. The de-spread carrier is 5 dB above noise at 30 KHz RBW and 25 dB above at 300 Hz RBW. Received signal strength at the antenna can be estimated as -174110log10(30e3)5 -123 dBm. It still amazes me how well frequency domain information is preserved through hard-limiting The LVDS transmitter has a constant output current of 1mW in 100 ohms. Peak power seen at the SA cannot exceed 0 dBm. Here, we see this available power spread across a range of frequencies. Wideband integrated power spectral density must be First local oscillator Ive been building experimental fractional-N synthesizers using general-purpose programmable logic for several years: Xilinx Spartan 3 FPGA Frac7 was built for this purpose but I had no idea Frac5 would be used in a GPS receiver when I originally designed it. The photo below shows how the ROS-1455 VCO output on Frac5 was resistively split between the output SMA and a Hittite HMC363 divide-by-8 prescaler. The 200 MHz divider output is routed (differentially) into the FPGA which phase locks it to a master reference using methods documented in my earlier projects. Microwave circuity on Frac7 is similar but uses a Mini-Circuits 3dB splitter. High stability and low phase noise are achieved, as can be seen in the VCO output spectra shown below. When Frac5 was originally developed, as a dedicated frequency synthesizer, simultaneous toggling on frequencies not harmonically related was avoided to minimise intermodulation spurs. The FPGA was static when clock pulses that toggled phase detector output crossed the fabric. No such luxury is practical when the FPGA is hosting a GPS receiver however, fortunately, the local oscillator output is good enough: The Marconi 2383 spectrum analysers 50 MHz STD OUTPUT was used as the master reference source for Frac5 and all internal GPS receiver clocks. GPS receivers need accuracies better than 1 ppm (parts per million) to measure plusmn5 KHz Doppler shifts on the 1575.42 MHz L1 carrier. Any frequency uncertainty would necessitate a wider search range. Embedded CPU My original GPS receiver could only track 4 satellites. The available fabric was not used efficiently and the FPGA was full. Identical logic was replicated for each channel and only clock-enabled at the 1 KHz code epoch. GPS update rates are quite un-demanding and most of the parallel processing can easily be done sequentially. Embedding a CPU for this task has both increased the number of channels and freed space in the FPGA. This CPU directly executes FORTH primitives as native instructions. Visitors to my Mark 1 FORTH Computer page will already be aware of my interest in the language. FORTH is not mainstream and its use here might be an esoteric barrier however, I could not resist doing another FORTH CPU, this time in FPGA, after seeing the excellent J1 project, which was an inspiration. FORTH is a stack-based language, which basically means the CPU has stacks instead of general purpose registers. Wikipedia has a good overview. FPGA resources: 360 slices 2 BRAMs Single-cycle instruction execution FORTH-like, dual-stack architecture 32-bit stack and ALU data paths 64-bit double-precision operations Hardware multiplier 2k byte (expandable to 4k byte) code and data RAM Macro assembler code development Memory and IO Two BRAMs are used: one for main memory, the other for stacks. Xilinx block RAM is dual ported, allowing one instance to host both data and return stacks. Each stack pointer ranges over half of the array. Dual porting of the main memory permits data access concurrent with instruction fetch. One memory port is addressed by the program counter, the other by T, the top of stack. Writes to the PC-addressed port are also used for code download, the program counter providing incrementing addresses. Code and data share the main memory, which is organised as 1024 (expandable to 2048) 16-bit words. Memory accesses can be 16-, 32- or 64-bits, word-aligned. All instructions are 16-bit. Total code plus data size of the GPS application is less than 750 words, despite all loops being unrolled. IO is not memory-mapped, occupying its own 36 bit-select space (12 in 12 out 12 events). One-hot encoding is used to simplify select decoding. IO operations are variously 1-bit serial, 16- or 32-bit parallel. Serial data shifts 1 bit per clock cycle. Events are used mainly as hardware strobes and differ from writes by not popping the stack. Instruction format 24 instructions out of a possible 32 are currently allocated in the opcode space h80XX - h9FXX. These are mostly zero-operand stack ALU operations. The ret option, which performs return from subroutine, executes in parallel, in the same cycle. Add-immediate is the only one-operand instruction. A carry-in option extends (stack, implied) addition precision. hF0000 - hFFFF is spare. Stack and ALU data paths are 32-bit however, 16-, 32- and 64-bit operations are supported. 64-bit values occupy two places on the stack, with least significant bits on top. Top of stack, T, and next on stack, N, are registered outside the BRAM for efficiency. Apart from the 64-bit left shift (opshl64) which is hard-wired for single-cycle execution, all other double precision functions are software subroutines. Assembly language The GPS embedded binary was created using Microsofts Macro Assembler MASM. This only supports x86 mnemonics but opcodes are declared using equ and code is assembled using dw directives. MASM not only provides label resolution, macro expansion and expression evaluation but even data structures The MASM dup() operator is used extensively to unroll loops e. g. dw N dup(opcall dest) calls a subroutine N times. This fragment gives some flavour of source style. Stack-effect is commented on every line: opfetch16 and opstore16 are primitives. opstore32 and opstore64 are subroutines or compound instructions usable as if they were primitives. T is actually 15:0,31:16 after opswap16 . but we dont care about the upper 16-bits here. opstore16 leaves the address stack depth can only change plusmn1 per cycle. Purists might prefer: dw N addi Host serial interfaces The FPGA can be controlled via SPI by the Raspberry Pi, or by a Windows PC using a Xilinx Platform USB JTAG cable. There are two levels of request priority: Send new command and poll for response to previous New code images are copied to main memory via a third BRAM which bridges the CPU and serial clock domains. Thus downloaded, binary images execute automatically. Host commands are captured in the bridge BRAM and the CPU is signalled to action them. Its responses are collected by the host from the bridge on the next scan. The top-level main loop polls for host service requests. The first word of any host message is a command code. Requests are dispatched through the Commands jump table: optor moves vector to the return stack. Some host requests (e. g. CmdGetSamples) elicit lengthy responses. Data ports on the CPU side of the bridge are 16-bit. The CPU can read and write these via the data stack however, more direct paths exist for uploading main memory and GPS IF samples. The instruction opwrEvt GETMEMORY transfers a memory word directly to the bridge, using T as an auto-incrementing pointer. GETMEMORY is the only event which has stack effect. The instruction opwrEvt GETSAMPLES transfers 16 bits from the IF sampler: Unrolling loops at assembly time with dup() trades code size for performance, avoiding a decrement-test-branch hit and the entire application binary is still tiny however, long loops must be nested, as illustrated above. CHANNEL data structure An array of structures holds state variables and buffered NAV data for the channels. MASM has excellent support for data structures. Field offsets are automatically defined as constants and the sizeof operator is useful. The epoch service routine (labelled Method: ) is called with a pointer to a CHANNEL structure on the stack. Affecting OO-airs, stack-effect comments refer to it as this throughout the routine. A copy is conveniently kept on the return stack for accessing structure members like so: The Chans array is regularly uploaded to the host. Raspberry Pi application software The Raspberry Pi software is multi-tasked using what are variously known as coroutines, continuations, user-mode or light-weight threads. These co-operatively yield control, in round-robin fashion, using the C library setjmplongjmp non-local goto, avoiding the cost of a kernel context-switch: Up to 16 threads can be active:

No comments:

Post a Comment