Przenoszenie średnia filtr fpga


High Definition, Low Delay, transmisja wideo na bazie SDR w zastosowaniach UAV Zintegrowane transceivery RF zwinne są nie tylko szeroko stosowane w architekturach radiowych zdefiniowanych przez oprogramowanie (SDR) 1 w telefonicznych stacjach bazowych, takich jak wielousługowy system rozproszonego dostępu (MDAS) i małe systemy komórka, ale także do bezprzewodowej transmisji wideo HD do zastosowań przemysłowych, komercyjnych i wojskowych, takich jak bezzałogowe pojazdy latające (UAV). W tym artykule przeanalizujemy szerokopasmową bezprzewodową implementację łańcucha sygnałów wideo przy użyciu AD9361 AD9364 2,3 zintegrowanych układów IC nadajnika-odbiornika, ilości przesłanych danych, odpowiadającej szerokości pasma sygnału RF, odległości transmisji i mocy nadajników. Będzie również opisywać implementację warstwy PHY OFDM i obecne wyniki testu czasu przeskoku, aby uniknąć interferencji RF. Na koniec omówimy zalety i wady między Wi-Fi a bezprzewodowym przekaźnikiem RF w szerokopasmowych aplikacjach bezprzewodowych. Łańcuch sygnałów Rysunek 1 ilustruje uproszczony schemat bezprzewodowej transmisji obrazu z wykorzystaniem AD9361AD9364 i BBIC. Aparat przechwytuje obraz i przesyła dane wideo do procesora pasma podstawowego za pośrednictwem Ethernetu, reg. HDMI. USB lub inny interfejs. Kodowanie obrazu może być obsługiwane za pomocą sprzętu lub FPGA. Front RF zawiera przełącznik, LNA i PA do programowalnego zintegrowanego transceivera. Ile danych trzeba przesłać Tabela 1 pokazuje znaczną różnicę wielkości między nieskompresowanymi i skompresowanymi szybkościami transmisji danych. Dzięki zastosowaniu wysokowydajnego kodowania wideo (HEVC), znanego również jako H.265 i MPEG-H Part 2, możemy zmniejszyć szybkość transmisji danych i zaoszczędzić przepustowość. H.264 jest obecnie jednym z najczęściej używanych formatów nagrywania, kompresji i dystrybucji treści wideo. Stanowi ogromny krok naprzód w technologii kompresji wideo i jest jednym z kilku potencjalnych następców popularnego AVC (H.264 lub MPEG-4 Part 10). Tabela 1 podsumowuje nieskompresowane i skompresowane szybkości transmisji danych w różnych formatach wideo. Założenia obejmują głębokość bitów wideo 24 bitów i szybkość klatek 60 fps. W przykładzie 1080p szybkość transmisji danych wynosi 14,93 Mb / s po kompresji, którą następnie można łatwo obsłużyć przez procesor pasma podstawowego i warstwę bezprzewodowej warstwy PHY. Tabela 1. Szerokość pasma sygnału skompresowanej transmisji danych AD9361AD9364 obsługuje szerokość pasma kanału od lt200 kHz do 56 MHz, zmieniając częstotliwość próbkowania, filtry cyfrowe i dziesiętne. AD9361AD9364 to transceivery o zerowym IF z kanałami I i Q do przesyłania złożonych danych. Złożone dane obejmują części rzeczywiste i urojone, odpowiednio odpowiadające I i Q, które lokalizują przy tej samej szerokości pasma częstotliwości, aby podwoić efektywność widma w porównaniu do pojedynczej części. Skompresowane dane wideo można odwzorować na kanały I i Q w celu utworzenia punktów konstelacji, które są znane jako symbole. Figura 2 pokazuje przykład 16 QAM, gdzie każdy symbol reprezentuje cztery bity. W przypadku systemu z pojedynczą nośną, cyfrowe kształty cyfrowe I i Q muszą przejść przez filtr kształtujący impuls przed przetwornikiem cyfrowo-analogowym, aby kształtować przesyłany sygnał w ograniczonej szerokości pasma. Filtr FIR może być stosowany do kształtowania impulsów, a odpowiedź filtra jest przedstawiona na fig. 4. W celu utrzymania wierności informacji, istnieje minimalna szerokość pasma sygnału odpowiadająca szybkości symbolu. Szybkość symbolu jest proporcjonalna do skompresowanej szybkości przesyłania danych wideo, jak pokazano w poniższym równaniu. Dla systemu OFDM, złożone dane powinny być modulowane do podnośnych za pomocą MFT, który również transmituje sygnał w ograniczonej szerokości pasma. Liczba bitów przesyłanych z każdym symbolem zależy od kolejności modulacji. W którym alfa jest parametrem pasma filtru. Z poprzednich wzorów możemy wywnioskować to równanie, więc możemy obliczyć szerokość pasma sygnału RF, jak podsumowano w Tabeli 2. Tabela 2. Zajętość pasma sygnału RF z rodzajami porządku modulacji (alfa 0,25) AD9361AD9364, z sygnałem do 56 MHz przepustowość, obsługuje wszystkie transmisje formatu wideo w tabeli 2, a nawet większą liczbę klatek na sekundę. Modulacja wyższego rzędu zajmuje mniejszą szerokość pasma, a symbol reprezentuje więcej bitów informacyjnych, ale do demodulacji wymagany jest wyższy SNR. Odległość transmisji i moc nadajnika W zastosowaniach takich jak UAV, maksymalna odległość transmisji jest parametrem krytycznym. Równie ważne jest jednak, aby komunikacja nie była odcięta nawet w ograniczonej odległości. Tlen, woda i inne przeszkody (z wyjątkiem tłumienia wolnych przestrzeni) mogą tłumić sygnał. Rysunek 6 pokazuje model utraty kanału komunikacji bezprzewodowej. Czułość odbiornika przyjmuje się zwykle jako minimalny sygnał wejściowy (Smin) wymagany do demodulacji lub odzyskania informacji z nadajnika. Po uzyskaniu czułości odbiornika, maksymalna odległość transmisji może być obliczona przy pewnych założeniach, jak pokazano poniżej: (SN) min jest minimalnym współczynnikiem sygnału do szumu potrzebnym do przetworzenia sygnału NF jest cyfrą szumową odbiornika k jest Boltzmannrsquos stała 1.38 razy 10 ndash23 joulek T 0 to temperatura bezwzględna wejścia odbiornika (kelwin) 290 kB to szerokość pasma odbiornika (Hz) Parametr (SN) min zależy od kolejności modulacjidemodulacji. Przy tym samym SNR, modulacja niższego rzędu dostaje niższy błąd symbolu, a przy tym samym błędzie symbolu, modulacja wyższego rzędu wymaga wyższego SNR do demodulacji. Kiedy więc nadajnik znajduje się daleko od odbiornika, sygnał jest słabszy, a SNR nie jest w stanie obsłużyć demodulacji wysokiego rzędu. W celu utrzymania nadajnika w trybie online i utrzymania formatu wideo z tą samą szybkością transmisji danych, pasmo podstawowe powinno wykorzystywać modulację niższego rzędu kosztem rosnącej szerokości pasma. Pomaga to zagwarantować, że odbierane obrazy nie będą rozmyte. Na szczęście radio programowane z cyfrową modulacją i demodulacją oferuje możliwość zmiany modulacji. Poprzednia analiza opiera się na założeniu, że moc nadajnika RF jest stała. Podczas gdy większa moc nadawania RF z takim samym zyskiem anteny osiągnie bardziej oddalony odbiornik z taką samą czułością odbiornika, maksymalna moc nadawania powinna być zgodna ze standardami promieniowania FCCCE. Ponadto częstotliwość nośna będzie miała wpływ na odległość transmisji. Gdy fala rozprzestrzenia się w przestrzeni, następuje utrata w wyniku rozproszenia. Stratę wolnej przestrzeni określa się w którym R jest odległością, lambda jest długością fali, f jest częstotliwością, a C jest prędkością światła. Dlatego większa częstotliwość będzie miała więcej strat na tej samej odległości wolnego miejsca. Na przykład częstotliwość nośna 5,8 GHz zostanie osłabiona o ponad 7,66 dB w porównaniu do 2,4 GHz w tej samej odległości transmisji. Częstotliwość i przełączanie RF AD9361AD9364 ma programowalny zakres częstotliwości od 70 MHz do 6 GHz. Spełni to większość aplikacji częstotliwościowych NLOS, w tym różne typy licencjonowanych i nielicencjonowanych częstotliwości, takich jak 1,4 GHz, 2,4 GHz i 5,8 GHz. Częstotliwość 2,4 GHz jest szeroko stosowana w przypadku Wi-Fi, reg. Bluetooth. i IoT krótką komunikację, co czyni ją coraz bardziej zatłoczoną. Używanie go do transmisji bezprzewodowej i sygnałów sterujących wideo zwiększa szanse na zakłócenia sygnału i niestabilność. Tworzy to niepożądane i często niebezpieczne sytuacje dla UAV. Korzystanie z przełączania częstotliwości w celu utrzymania czystej częstotliwości zapewni bardziej niezawodne połączenie danych i sterowania. Kiedy nadajnik wyczuje zatłoczoną częstotliwość, automatycznie przełącza się na inne pasmo. Na przykład dwa UAV wykorzystujące częstotliwość i działające w bliskim sąsiedztwie będą zakłócać komunikację z każdym innym urządzeniem. Automatyczne przełączanie częstotliwości LO i ponowne wybieranie pasma pomoże utrzymać stabilne łącze bezprzewodowe. Adaptacyjny wybór częstotliwości nośnej lub kanału w okresie włączenia zasilania jest jedną z doskonałych funkcji w wysokiej klasy UAV. Przeskok częstotliwości Szybki przeskok częstotliwości, który jest szeroko stosowany w elektronicznych środkach zaradczych (ECM), pomaga również uniknąć zakłóceń. Zwykle, jeśli chcemy przeskoczyć częstotliwość, PLL musi się ponownie zamknąć po procedurze. Obejmuje to zapisywanie rejestrów częstotliwości i przechodzenie przez czas kalibracji VCO i czas blokady PLL tak, aby przedział częstotliwości przeskoku był w przybliżeniu setek mikrosekund. Rysunek 7 pokazuje przykład częstotliwości LO nadajnika przeskakującego z 816,69 MHz do 802,03 MHz. AD9361 jest używany w normalnym trybie zmiany częstotliwości, a częstotliwość wyjściowa nadajnika RF przeskakuje z 814,69 MHz do 800,03 MHz z częstotliwością odniesienia 10 MHz. Czas częstotliwości przeskoku jest testowany za pomocą E5052B, jak pokazano na rysunku 7. Kalibracja VCO i czas blokady PLL wynoszą około 500 mikrosekund zgodnie z rysunkiem 7b. Analizator źródła sygnału E5052B może być wykorzystany do przechwytywania przejściowej odpowiedzi PLL. Figura 7a przedstawia szerokopasmowy tryb pomiaru przejściowego, podczas gdy fig. 7b i 7d zapewniają znacznie dokładną rozdzielczość w pomiarze częstotliwości i przesunięcia fazowego z przeskokiem częstotliwości. 6 Rysunek 7c pokazuje moc wyjściową. 500 mikrosekund to bardzo długi odstęp dla aplikacji przeskokowej. Jednak AD9361AD9364 zawiera tryb szybkiego blokowania, który umożliwia osiągnięcie szybszych niż normalne zmian częstotliwości poprzez przechowywanie zestawów informacji programowania syntezatora (zwanych profilami) w rejestrach devicersquos lub w procesorach pasma podstawowego w przestrzeni pamięci. Rysunek 8 pokazuje wynik testu za pomocą trybu szybkiego blokowania w celu zaimplementowania częstotliwości przeskoku od 882 MHz do 802 MHz. Czas jest mniejszy niż 20 mikrosekund, zgodnie z odpowiedzią fazy 8d. Krzywa fazowa jest narysowana poprzez odniesienie do fazy 802 MHz. Czas zapisu SPI i czas kalibracji VCO są eliminowane w tym trybie z powodu informacji o częstotliwości i wyników kalibracji zapisywanych w profilach. Jak widać, na rysunku 8b pokazano funkcję szybkiego przeskoku częstotliwości urządzenia AD9361AD9364. Implementacja PHY LayermdashOFDM Ortogonalne zwielokrotnianie z podziałem częstotliwościowym (OFDM) jest formą modulacji sygnału, która dzieli strumień modulacji o dużej szybkości transmisji danych na wiele wolno modulowanych wąskopasmowych podległych z niewielką odległością podnośnych. Dzięki temu jest mniej wrażliwy na wyblakłe zaniki częstotliwości. Wadami są wysoki szczyt do średniego współczynnika mocy i wrażliwość na przesunięcie nośne i dryft. OFDM jest szeroko stosowany w warstwie PHY bezprzewodowej komunikacji szerokopasmowej. Krytyczna technologia OFDM obejmuje IFFTFFT, synchronizację częstotliwości, synchronizację czasu próbkowania i synchronizację ramek symboli. IFFTFFT powinien zostać wdrożony za pomocą FPGA w najszybszy możliwy sposób. Bardzo ważne jest również wybranie interwału podnośnych. Odstęp powinien być wystarczająco duży, aby wytrzymać komunikację mobilności z przesunięciem częstotliwości Dopplera i wystarczająco mały, aby przenosić więcej symboli w ramach pasma o ograniczonej częstotliwości w celu zwiększenia wydajności widma. COFDM odnosi się do kombinacji technologii kodowania i modulacji OFDM. COFDM z wysoką odpornością na tłumienie sygnału i przewagę korekcji błędów (FEC) może przesyłać sygnały wideo z dowolnego poruszającego się obiektu. Kodowanie zwiększy przepustowość sygnału, ale zazwyczaj jest warte kompromisu. Łącząc oparty na modelu projekt i automatyczne narzędzia do generowania kodu z MathWorks z zaawansowanymi transceiverami radiowymi Xilinx reg Zynq SoCs i Analog Devices, projektowanie, weryfikacja, testowanie i wdrażanie systemu SDR może być bardziej efektywne niż kiedykolwiek, prowadząc do wyższej wydajności systemy i skrócenie czasu wprowadzania na rynek. 7 Jakie są zalety w porównaniu z Wi-Fi Drony wyposażone w Wi-Fi są bardzo łatwe w połączeniu z telefonem komórkowym, laptopem i innymi urządzeniami mobilnymi, dzięki czemu są bardzo wygodne w użyciu. Ale w przypadku bezprzewodowej transmisji obrazu w aplikacjach UAV, FPGA plus AD9361 oferuje wiele zalet w porównaniu z Wi-Fi. Po pierwsze, w warstwie PHY, agresywne przełączanie częstotliwości i szybkie przeskakiwanie AD9361AD9364 pomaga uniknąć zakłóceń. Większość zintegrowanych chipów Wi-Fi działa również na spiętrzonym paśmie częstotliwości 2,4 GHz bez mechanizmu zmiany pasma częstotliwości, aby zapewnić bardziej stabilne połączenie bezprzewodowe. Po drugie, dzięki FPGA i rozwiązaniu AD9361, protokół transmisji może być zdefiniowany i opracowany elastycznie przez projektantów. Protokół Wi-Fi jest standardem i opiera się na dwukierunkowym uzgadnianiu z każdym pakietem danych. Dzięki Wi-Fi każdy pakiet danych musi potwierdzić, że pakiet został odebrany, a wszystkie 512 bajtów w pakiecie zostały odebrane w stanie nienaruszonym. Jeśli jeden bajt zostanie utracony, cały 512-bajtowy pakiet musi zostać przesłany ponownie. 8 Podczas gdy ten protokół zapewnia niezawodność danych, ponowne ustanowienie bezprzewodowego połączenia danych jest skomplikowane i czasochłonne. Protokół TCPIP spowoduje duże opóźnienie, które powoduje nierealne wideo i kontrolę, co może doprowadzić do awarii UAV. Rozwiązanie SDR (FPGA plus AD9361) wykorzystuje jednokierunkowy strumień danych, co oznacza, że ​​dron na niebie transmituje sygnał wideo w postaci transmisji telewizyjnej. Nie ma czasu na ponowne wysyłanie pakietów, gdy celem jest wyświetlanie wideo w czasie rzeczywistym. Ponadto Wi-Fi nie zapewnia odpowiedniego poziomu bezpieczeństwa dla wielu aplikacji. Wykorzystując algorytm szyfrowania i zdefiniowany przez użytkownika protokół, FPGA i AD9361AD9364 są znacznie mniej podatne na zagrożenia bezpieczeństwa. Co więcej, jednokierunkowy transmisyjny strumień danych zapewnia możliwości transmisji dwa do trzech razy większe niż w przypadku rozwiązań Wi-Fi. 8 Elastyczność dzięki funkcji radiowej definiowanej programowo umożliwia cyfrową modulacjędemodulacji, która spełnia wymagania dotyczące odległości lub dostosowuje się do zmieniającej się wartości współczynnika SNR w złożonych środowiskach promieniowania radiowego. Wnioski W tym artykule przedstawiono najważniejsze parametry korzystania z rozwiązania FPGA i AD9361AD9364 do bezprzewodowej transmisji wideo o wysokiej rozdzielczości. Przy zwinnym przełączaniu pasm częstotliwości i przeskakiwaniu z szybką częstotliwością możliwe jest ustanowienie bardziej stabilnego i niezawodnego łącza bezprzewodowego, aby stawić czoła coraz bardziej złożonemu promieniowaniu w przestrzeni i zmniejszyć prawdopodobieństwo awarii. W warstwie protokołu rozwiązanie jest bardziej elastyczne, wykorzystując transmisję jednokierunkową w celu skrócenia czasu ustanowienia połączenia bezprzewodowego i utworzenia połączenia o niższym opóźnieniu. W zastosowaniach przemysłowych i komercyjnych, takich jak rolnictwo, inspekcja linii energetycznych i nadzór, stabilne, bezpieczne i niezawodne transmisje mają kluczowe znaczenie dla sukcesu. Odniesienia 2 Arkusz danych AD9361. Analog Devices, Inc. 3 AD9364 arkusz danych. Analog Devices, Inc. 4 Ken Gentile. Nota aplikacyjna AN-922, Podstawy filtrowania cyfrowego kształtu pulsu. Analog Devices, Inc. 5 Scott R. Bullock. Transceiver i projektowanie systemu dla komunikacji cyfrowej. 4 edycja. SciTech Publishing, Edison, NJ, 2017. Wei Zhou jest inżynierem aplikacji dla Analog Devices, Inc., wspierającym projektowanie i rozwój produktów i aplikacji nadawczo-odbiorczych RF, szczególnie w dziedzinie bezprzewodowej transmisji wideo i komunikacji bezprzewodowej. Pracował w Centrum Aplikacji ADI w Pekinie, w Chinach, przez pięć lat wspierał różne produkty, w tym DDS, PLL, szybki DACADC i zegary. Przed dołączeniem do ADI otrzymał tytuł B. S. dyplom z Wuhan University, Wuhan, Chiny, w 2006 r. i jego M. S. dyplom z Instytutu Elektroniki, Chińska Akademia Nauk (CAS), Pekin, Chiny, w 2009 roku. Pracował jako obwód RF i mikrofalowy oraz inżynier projektowania systemu dla firmy z branży technologii lotniczej od 2009 do 2017. Pokrewne artykuły Powiązane produkty RF Agile TransceiverEmbedded Inżynieria W poście. pokażę ci, jak zaimplementować najprostszy możliwy filtr dziesiętny filtrujący średnią wartość. choć jest to bardzo łatwe do wdrożenia, ale nadal w wielu aplikacjach jest to więcej niż wystarczająco dobre. na przykład zmniejszenie losowego szumu z sygnału. Oczywiście, gdy jest to bardzo proste, nie ma problemów, takich jak. nie ma bardzo ostrego filtra Odpowiedź. Wejście kanału 1. zamiatanie od 20Hz do 6Khz, Channel 4 (Green) 15 punktowe filtrowane wyjście, M (Red) wyjście w domenie freq Sobota, 1 października 2018 Ten projekt jest końcowym etapem w tworzeniu naprawdę potężnego światła słonecznego. w tym projekcie wyślemy LTC3478 Oparty na philipsie zestaw kontrolera ładowania Li-Ion ze sterownikiem Driver i BQ24650 na MPPT Solar. Będziemy zużywać łącznie 3 9 Watt na każdą kartę LED Driver i jeden kontroler ładowania, aby ładować baterię 6 komórek 7.6V 20000 mAh li-lion. Jest tam 4 wskaźnik diodowy LED pokazujący szacowany poziom naładowania baterii i jeden przycisk do kontroli Onoff, Different Level Jasności. i wybierz jedną. wszystkie lub kilka tablic LED do rozświetlenia. nie ma wiele do opisania pod względem schmeatic i firmware, jak wszystkie Firmware i Schmeatic aer już na moim koncie github. Interfejs panelu Panelu wykonany jest z PCB z 4 diodami LED statusu baterii, portem do panelu słonecznego Złącze i przełącznikiem sterującym. kiedy bateria jest naładowana Status diody LED wyświetla się odpowiednio, a gdy bateria się rozładowuje, status diody odpowiednio się zmienia. Oprócz małego projektu oświetlenia słonecznego, nad którym pracowałem, stworzyłem ten mały regulator ładowania słonecznego, aby ładować baterię litowo-jonową (litowo-jonową). Circuit Wykorzystaj Texas Instrument BQ24650 w sercu pętli do sterowania ładowaniem. ponieważ obwód ma zewnętrzny mosfet, więc maksymalny prąd ładowania może być dostosowany do naprawdę wysokich wartości. 160Circuit akceptuje wartości paneli słonecznych od 5V do 28V. testowałem go z napięciem 12 V (otwarty obwód 17 wolt) 160. i napięciem nominalnym 24 V przy zasilaniu bateryjnym prąd do 4A. Aktualnie instalowany w moim domu od kilku miesięcy Ładowanie baterii o pojemności 20000 mah. Obwód ma dużą 4-pinową wtyczkę Molex o dużej wydajności dla panelu słonecznego. 6-stykowe złącze baterii i przełącznika obciążenia. Możliwe jest również podłączenie NTC do monitorowania temperatury baterii. BQ24650 może automatycznie monitorować tem - peraturę akumulatora. Mikrokontroler ma dedykowane wyjście 3 PWM do ściemniania LED i 6 pinów gpio dla informacji o stanie bettery i klucza interfejsu użytkownika. Hallo zu Deutsch Leser. Das ist mein erste Artikel auf Deutsch. Jestem w stanie wydać opinię o tym, kto jest zainteresowany Jetzt ab, ich werde auf auf Deutsch publijeren weil ich Detusch lerne und ich mchte mehr bungen. Jedes Artikel wird auf Deutsch und English. wenn wir Widerspruch zwischen dem Artikel auf Deutsch und Englisch haben, die English berwiegt weil meine erfahrungen auf deutsch kurze ist.160 160 160 160So beginnen wir. Heutzutage arbeite ich einem Projekt. quotMPPT 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 sind. Das Projekt ist ein von ein Projekt was publiziere ich spter.160 160 160 160 Reticently pracowałem nad projektem 160little Solar lighting , potrzebuję naprawdę jasnego, szalonego oświetlenia 25W 160LED. Ale problem był dla 25W to dużo energii dla LED i to wymaga pewnych umiejętności, aby stworzyć taki sterownik LED o wysokiej mocy. Głównym celem tego projektu jest uzyskanie wiedzy na temat kontrolerów ładowania MPPT i algorytmów ładowania MPPT. ten projekt jest częścią projektu. które opublikuję później. 160160160 Ten post będzie czwartą częścią z serii tworzenia płyty ARM z obsługą Linuxa w domu. kliknij Pierwszy. Drugi i trzeci, aby przejść do poprzednich części, więc zacznijmy. co to jest bootloader, dlaczego go potrzebujemy160 program ładujący jest programem, który jest pierwszym, który zostanie wykonany przez procesor. to zrywa jakiś bardzo specyficzny cel przytaczając kilka bardzo istotnych rzeczy przed załadowaniem głównego programu (może być OS) do głównej pamięci. dlatego jest nazywany programem ładującym. w zależności od potrzeb program ładujący może wykonać inne zadanie (omówimy je tutaj). istnieją różne kształty i rozmiary bootloaderów. wszystkie służą niemal temu samemu celowi. z mikrokontrolerami. czasami nie ładuje głównego programu do pamięci, ale przekazuje wskaźnik wykonawczy do programu głównego, aby program główny mógł działać bezpośrednio z pamięci, gdzie jest. Płytka z 4,3-calowym ekranem LCD z uruchomioną aplikacją Qt5 do wyświetlania obrazu JPEG i odbiornika GPS TimeHomemade Powyżej pokazano pierwszy mikser i wzmacniacz IF eksperymentalnego odbiornika GPS. Lewy skrajny SMA jest podłączony do komercyjnej anteny z wbudowanym filtrem LNA i SAW. Zsyntetyzowany pierwszy lokalny oscylator napędza dolną SMA. Listwy zaciskowe po prawej stronie to wejście mocy i wyjście IF. Ten ostatni jest połączony z układem Xilinx FPGA, który nie tylko wykonuje DSP, ale także obsługuje syntezator częstotliwości frakcyjnej-N. Więcej o tym później. Byłem zmotywowany do zaprojektowania tego odbiornika po przeczytaniu pracy 1 Matjax017E Vidmar, S53MV, który opracował odbiornik GPS od podstaw, wykorzystując głównie elementy dyskretne, ponad 20 lat temu. Jego użycie DSP po sztywno ograniczającym IF i 1-bitowym ADC mnie zainteresowało. Opisany tu odbiornik działa na tej samej zasadzie. Jego 1-bitowy ADC to 6-pinowy układ scalony w pobliżu styków, komparator wyjścia LVDS. Ukryte w hałasie, ale niezatarte w dwupoziomowej, kwantowej papce, która wyłania się, są sygnałami z każdego satelity. Wszystkie satelity GPS transmitują na tej samej częstotliwości 1575,42 MHz, wykorzystując bezpośrednie widmo rozkładu sekwencji (DSSS). Nośnik L1 jest rozłożony na szerokość pasma 2 MHz, a jego wytrzymałość na powierzchni Ziemi wynosi -130 dBm. Moc szumów cieplnych w tej samej szerokości pasma wynosi -111 dBm, więc sygnał GPS w antenie odbiorczej jest 20 dB poniżej poziomu szumu. Że jakikolwiek z obecnych sygnałów, nałożony jeden na drugi i zakopany w szumie, można odzyskać po tym, jak kwantyzacja dwupoziomowa wydaje się kontr-intuicyjna, napisałem symulację, aby się przekonać. GPS opiera się na właściwościach korelacji pseudolosowych sekwencji o nazwie Gold Codes w celu oddzielenia sygnałów od szumu i od siebie nawzajem. Każdy satelita transmituje unikalną sekwencję. Wszystkie nieskorelowane sygnały to szum, w tym również z innych satelitów i błędy kwantowania twardego ogranicznika. Miksowanie z tym samym kodem we właściwej fazie powoduje, że sygnał jest poszukiwany i dalej rozprzestrzenia się wszystko inne. Filtrowanie wąskopasmowe usuwa szum szerokopasmowy bez wpływania na (ponownie wąski) poszukiwany sygnał. Ograniczenie twardości (1-bitowy ADC) obniża SNR o mniej niż 3 dB, czyli cenę, którą warto zapłacić, aby uniknąć sprzętowego AGC. Aktualizacja z maja 2017 r. Jest to obecnie przenośny, zasilany bateryjnie, 12-kanałowy odbiornik GPS z oprogramowaniem "pod klucz", który pozyskuje i śledzi satelity i stale oblicza swoją pozycję bez interwencji użytkownika. Kompletny system (poniżej, po lewej) zawiera: wyświetlacz LCD 16x2, komputer Raspberry Pi Model A, dwie niestandardowe płytki drukowane, komercyjną antenę i baterię litowo-jonową. Całkowity pobór prądu przez system wynosi 0,4A, a żywotność baterii wynosi 5 godzin. Raspberry Pi jest zasilany przez kabel taśmowy łączący swój nagłówek GPIO z płytką FPGA Frac7 i nie wymaga żadnych innych połączeń. Obecnie Pi prowadzi Raspbian Linux. Mniejsza dystrybucja skróci czas do pierwszej naprawy. Po uruchomieniu z karty SD oprogramowanie aplikacji GPS uruchamia się automatycznie. Po wyjściu zapewnia środki do właściwego wyłączania Pi przed wyłączeniem zasilania. Tworzenie oprogramowania Pi odbywało się bez udziału klienta przez SSH i FTP za pośrednictwem klucza USB Wi-Fi. Kod źródłowy i dokumentację można znaleźć na dole tej strony. Obie niestandardowe PCB to proste 2-warstwowe płyty PTH z ciągłymi płaszczyznami u dołu. Idź zgodnie z ruchem wskazówek zegara dookoła Xilinx Spartan 3 na płycie FPGA Frac7: od 12 do 3 godzin są filtr pętli, VCO, rozdzielacz mocy i preskalator syntezatora częstotliwości mikrofalowej w dolnym prawym rogu są joystickiem i złączem JTAG, a po 6 godzinie pinowy dla kabla wstążkowego Raspberry Pi. Po lewej stronie znajduje się złącze LCD. Po lewej stronie znajduje się oscylator kwarcowy (TCVCXO) z kompensacją temperaturową, zapewniający stabilną częstotliwość odniesienia, niezbędny do odbioru sygnału GPS. TCVCXO jest dobry, ale nie całkiem odpowiada standardowi GPS podczas pracy w niesklasyfikowanym miejscu w wietrznych miejscach. Dmuchanie w nią powoduje przesunięcie oscylatora kwarcowego o częstotliwości 10 000 000 MHz o około 1 część na 10 milionów lub 1 Hz, który jest powiększany 150 razy przez syntezator PLL. To wystarczy, aby chwilowo odblokować satelitarne pętle śledzenia, jeśli zostanie to zrobione nagle. Urządzenie jest również nieznacznie wrażliwe na podczerwień, np. z żarówek halogenowych i pilotów telewizyjnych. Po raz pierwszy opublikowany w 2017 roku, był to odbiornik 4-kanałowy, co oznacza, że ​​mógł śledzić tylko cztery satelity jednocześnie. Aby rozwiązać problem z pozycją użytkownika i zegarem odbiornika, potrzebne są co najmniej cztery, ale większa dokładność jest możliwa. W tej oryginalnej wersji, cztery identyczne instancje modułu śledzącego wypełniły FPGA. Ale większość flopów była sterowana tylko raz na milisekundę. Teraz niestandardowy soft-core CPU wewnątrz FPGA serializuje przetwarzanie i tylko 50 FPGA jest wymagane dla 8-kanałowego odbiornika lub 67 dla 12-kanałów. Liczba kanałów jest parametrem w źródle i może wzrosnąć. Dokładność pozycji jest najlepsza, gdy antena może widzieć 360 stopni nieba i odbierać sygnały ze wszystkich kierunków. Ogólnie rzecz biorąc, im więcej satelitów, tym lepiej. Dwa lub więcej satelitów na tym samym łożysku może prowadzić do czegoś, co nazywa się złą geometrią. Jak dotąd najlepsza poprawka to plusmn1 metrów w bardzo otwartej lokalizacji przy użyciu 12 satelitów, ale dokładność jest zwykle plusmn5 metrów w gorszych lokalizacjach z mniejszą liczbą satelitów. Aktualizacja z września 2017 r. Kod źródłowy tego projektu został ponownie wydany na licencji GNU General Public License (GPL). Przetwarzanie architektury jest podzielone między FPGA i Pi przez złożoność i pilność. Pi obsługuje we własnym tempie intensywne ćwiczenia matematyczne. FPGA syntetyzuje pierwszy lokalny oscylator, obsługuje zdarzenia o wysokim priorytecie w czasie rzeczywistym i autonomicznie śledzi satelity. Pi steruje FPGA przez interfejs SPI. Dogodnie ten sam SPI jest używany do ładowania strumienia bitowego konfiguracji FPGA i binarnego kodu wykonywalnego dla wbudowanego procesora. FPGA można również kontrolować za pomocą kabla JTAG USB platformy Xilinx na komputerze z systemem Windows i automatycznie wykrywa, który interfejs jest używany. Częstotliwości L1 są konwertowane w dół na 1 IF 22,6 MHz przez zmieszanie z lokalnym 1552.82 MHz oscylatorem na płycie czołowej GPS3. Wszystkie kolejne przetwarzanie sygnałów IF i pasma podstawowego odbywa się cyfrowo w układzie FPGA. Dwa kontrolery proporcjonalności (PI) na satelitę, nośnik toru i faza kodu. Dane NAV transmitowane przez satelity są gromadzone w pamięci FPGA. To jest przesłane do Pi, które sprawdza parzystość i wyodrębnia efemerydy ze strumienia bitów. Po zebraniu wszystkich wymaganych parametrów orbitalnych wykonywane są migawki niektórych wewnętrznych liczników FPGA, od których czas transmisji jest obliczany z precyzją plus 15n. Znaczna część syntezatora 1552.82 MHz jest zaimplementowana w FPGA. Można się spodziewać problemów jittera, współprowadzenia detektora fazy z inną logiką, ale działa. Syntetyczna czystość widmowa wyjściowa jest doskonała, mimo że rdzeń FPGA odrywa się wściekle i nie wszystkie na harmonicznie powiązanych częstotliwościach. Takie podejście zostało podjęte, ponieważ płyta podobna do Frac7 już istniała z wcześniejszego projektu syntezatora. Dodanie front-endu było najkrótszą drogą do prototypowego odbiornika. Ale ta pierwsza wersja nie była przenośna: miała niewygodne wymagania dotyczące zasilania i nie miała wbudowanego standardu częstotliwości. Przetwarzanie sygnału do twardego ogranicznika włącznie: Komparator LMH7220 ma maksymalne napięcie przesunięcia wejściowego wynoszące 9,5 mV. Wzmocniony szum termiczny musi wygodnie przekraczać tę wartość, aby utrzymać to przełączanie. Słabe sygnały GPS wpływają tylko na komparator w pobliżu zera. Są one próbkowane przez szum. Aby oszacować poziom szumu na wejściu komparatora, zestawiamy wzmocnienia, straty wtrąceniowe i wartości szumu: Szum wewnątrzpasmowy na wyjściu miksera wynosi -1740,828-1.5-3.920- 610 log10 (2.5e6) -73 dBm lub 52microV RMS. Mikser jest rezystancyjnie zakończony w 50 omów, a kolejne etapy pracują przy wyższej impedancji. Dyskretny pas IF ma całkowite wzmocnienie napięciowe 1000, więc poziom wejściowy komparatora wynosi 52 mV RMS. LMH7220 dodaje 59 dB wzmocnienia, co daje łącznie 119 dB dla całego IF. Wdrożenie tak dużego wzmocnienia na jednej częstotliwości było ryzykowne. Aby go zminimalizować, zastosowano zbalansowane obwody nad stałą płaszczyzną uziemienia, a ekranowana skrętka przenosi wyjście do układu FPGA. Motywacja była prostota, unikając drugiego nawrócenia. W praktyce obwód jest stabilny, więc hazard się opłacił. Aktywny separator Q1 dostarcza 5 V dla zdalnego LNA. Wzmacniacz MMIC U2 zapewnia wzmocnienie 20 dB (nie przy IF) i zapewnia niski ogólny poziom szumów systemowych, nawet przy długich kablach antenowych. L1 i L2 to ręczne dławiki mikrofalowe o bardzo wysokiej częstotliwości samo-rezonansowej, montowane prostopadle do siebie i z dala od płaszczyzny podłoża. Wiatr 14 zwojów, rdzeń powietrzny, średnica wewnętrzna 1 mm od 7 cm długości z 32swg emaliowanego drutu miedzianego. Sprawdzone za pomocą generatora śledzenia na Marconi 2383 SA, były dobre do 4 GHz. Mini-obwody MBA-15L DBM zostało wybrane ze względu na niską redukcję konwersji 6 dB przy 1,5 GHz i niskie zapotrzebowanie napędu na 4 dBm LO. R9 kończy port IF. Trzy w pełni różnicowe stopnie wzmacniacza IF podążają za mikserem. Scalone równolegle niskie obwody Q pomiędzy kolektorami ustawiają pasmo -3 dB na około 2,5 MHz i zapobiegają tworzeniu się przesunięć DC. L4, L5 i L6 są ekranowane w cewkach Toko 7 mm. BFS17 został wybrany ze względu na wysoki (ale niezbyt wysoki) 1 GHz f T. I e to 2mA dla najniższego poziomu hałasu i rozsądnej wartości. Pierwszy IF IF 22,6 MHz jest cyfrowo konwertowany w dół na 2,6 MHz przez niepełne pobieranie próbek z częstotliwością 10 MHz w FPGA. 2,6 MHz leży blisko środka pasma Nyquist 5 MHz. Najlepiej unikać dokładnego centrum, z powodów, które zostaną wyjaśnione później. Możliwych jest kilka innych częstotliwości IF: 27,5 MHz, co powoduje inwersję widma na drugim IF, również zostało pomyślnie sprawdzone. Istnieje kompromis pomiędzy problemami z obrazem przy niższym i dostępnym wzmocnieniu BFS17 przy wyższych częstotliwościach. Wykrywanie sygnału pociąga za sobą rozwiązywanie trzech niewiadomych: jakie satelity są w zasięgu, ich przesunięcia Dopplera i fazy kodu. Wyszukiwanie sekwencyjne tej trójwymiarowej przestrzeni z tak zwanego zimnego startu może zająć wiele minut. Ciepły start przy użyciu danych almanachu do przewidywania pozycji i prędkości nadal wymaga wyszukiwania kodu. Wszystkie 1023 fazy kodu muszą zostać przetestowane, aby znaleźć maksymalny szczyt korelacji. Obliczanie całek korelacji 1023 w dziedzinie czasu jest bardzo kosztowne i zbędne. Ten odbiornik GPS wykorzystuje algorytm oparty na FFT, który testuje wszystkie fazy kodu równolegle. Z zimna, zajmuje 2,5 sekundy na Pentium 1,7 GHz, aby zmierzyć siłę sygnału, przesunięcie Dopplera i fazę kodu każdego widocznego satelity. Raspberry Pi jest nieco wolniejsza. Przy over-bar oznaczającym sprzężenie, funkcja korelacji krzyżowej y (Tau) złożonego sygnału s (t) i kodu c (t) przesuniętego o offset Tau jest następująca: Twierdzenie o korelacji stwierdza, że ​​transformata Fouriera całki korelacji jest równa iloczyn złożonej koniugatu transformaty Fouriera pierwszej funkcji i transformaty Fouriera drugiej funkcji: FFT (y) CONJUGATE (FFT (s)) FFT (c) Korelacja jest przeprowadzana dla pasma podstawowego. Kod CA 1.023 Mbps to 1023 lub 1ms. Przednia długość FFT musi być wielokrotnością tego. Pobieranie próbek o częstotliwości 10 MHz przez 4 ms daje w wyniku rozmiar pojemnika FFT 250 Hz. Przesunięcia dopplerowskie należy przetestować, obracając dane w dziedzinie częstotliwości, po jednym pojemniku na raz, aż do pojemników plusmn20 plus mn5 KHz. Obrót można zastosować do dowolnej funkcji. Pierwszy IF od 21,6 MHz z 1-bitowego ADC jest niewystarczająco próbkowany przez zegar 10 MHz w FPGA, cyfrowo zmniejszając konwersję do 2 IF z 2,6 MHz. W oprogramowaniu drugie IF jest przekształcane w dół do złożonego pasma podstawowego (IQ) za pomocą kwadraturowych lokalnych oscylatorów. W przypadku sygnałów dwupoziomowych miksery są prostymi bramkami XOR. Chociaż nie pokazano powyżej, próbki są tymczasowo buforowane w pamięci FPGA. Pi nie jest w stanie zaakceptować ich przy szybkości 10 Mb / s. 1.023 Mb / s i 2,6 MHz są generowane przez akumulatory fazy z oscylatorem sterowanym numerycznie (NCO). Częstotliwości te są dość duże w porównaniu do częstotliwości próbkowania i nie są to dokładne subharmoniczne. W związku z tym podoficerowie mają ostrogi ułamkowe. Liczba próbek na chip kodu wynosi od 9 do 10. Na szczęście odbiorniki DSSS są odporne na interferencje wąskopasmowe, zewnętrzne lub generowane samodzielnie. Złożone pasmo podstawowe jest transformowane do dziedziny częstotliwości za pomocą FFT w przód, które należy wyliczyć tylko raz. FFT każdego kodu CA satelitów jest wstępnie obliczane. Czas przetwarzania jest zdominowany przez najbardziej wewnętrzną pętlę, która wykonuje przesuwanie, koniugację, złożone mnożenie i jedną odwrotną FFT na test satelitarno-dopplerowski. Procesor graficzny Raspberry Pis Videocore może zostać wykorzystany do przyspieszenia działania. Przy częstotliwości próbkowania 10 MHz faza kodu jest rozwiązywana do najbliższych 100ns. Typowe wyjście CCF jest zilustrowane poniżej: Obliczanie mocy szczytowej do średniej w tych danych daje dobre oszacowanie SNR i jest wykorzystywane do znalezienia najsilniejszych sygnałów. Następujące zostały odebrane o godzinie 20:14 GMT w dniu 4 marca 2017 r. W Cambridge w Wielkiej Brytanii z anteną znajdującą się na zewnątrz od strony północnej półki: z północnych szerokości geograficznych, więcej satelitów GPS będzie generalnie znajdować się na południowym niebie, tj. W kierunku równika. Pobieranie dłuższych próbek zwiększa SNR, ujawniając słabsze sygnały, ale anulowanie występuje, gdy przechwytywanie obejmuje przejścia danych NAV. Długość FFT w przód jest liczbą całkowitą milisekund, jednak odwrotną FFT można skrócić, po prostu wyrzucając dane w wyższych przedziałach częstotliwości. SNR jest zachowany, ale faza kodu nie jest tak ostro rozwiązana. Niemniej jednak, dobre oszacowanie położenia szczytowego uzyskuje się przez ważone uśrednianie dwóch najsilniejszych sąsiednich pojemników, a testy na powietrzu sugerują, że może to działać nawet do dość krótkich odwrotnych długości FFT. Po wykryciu sygnału, kolejnym krokiem jest zablokowanie, śledzenie i demodulowanie danych NAV o 50 b / s. Wymaga to dwóch zależnych od siebie pętli fazowych (PLL) do śledzenia kodu i fazy nośnej. Te PLL muszą działać w czasie rzeczywistym i są implementowane jako funkcje DSP w FPGA. Oprogramowanie Pi pełni rolę nadzorczą: decyduje, które satelity śledzić, monitorować status zamka i przetwarzać otrzymane dane NAV. Pętle śledzące są dobre w utrzymywaniu blokady, ponieważ mają bardzo wąskie pasma, jednak ta sama cecha sprawia, że ​​są słabe w pozyskiwaniu blokady bez pomocy. Nie widzą przepustowości poza pętlą, aby uchwycić cokolwiek dalej. Początkowe fazy i częstotliwości muszą być wstępnie ustawione na zmierzoną fazę kodu i przesunięcie Dopplera docelowego satelity. To jest zorganizowane pod kontrolą Pi. Pętle powinny być zablokowane od samego początku i tak pozostać. Faza kodu jest mierzona w stosunku do próbki FFT. Kod NCO w FPGA jest resetowany na początku pobierania próbek i kumuluje fazę ze stałym 1.023 MHz. Zostaje on później wyrównany z otrzymanym kodem przez krótkie wstrzymanie akumulatora fazy. Przesunięcie dopplerowskie na nośniku 155,42 MHz to plusmn5 KHz lub plusmn3 ppm. Wpływa również na szybkość kodowania 1.023 Mb / s przez układy plusmn3 na sekundę. Długość przerwy jest dostosowywana do pełzania kodu w czasie od pobrania próbki. Na szczęście kod Dopplera jest proporcjonalny do Dopplera nośnego, dla którego mamy dobre oszacowanie. Podział oprogramowania sprzętowego Na poniższym diagramie kodowanie kolorami pokazuje, w jaki sposób implementacja śledzenia DSP jest teraz podzielona na sprzęt i oprogramowanie. Wcześniej wszystko to odbywało się na sprzęcie, z identycznymi równoległymi instancjami powtarzanymi dla każdego kanału, co powodowało nieefektywne wykorzystanie zasobów FPGA. Teraz wolniejsze przetwarzanie 1 KHz odbywa się za pomocą oprogramowania, a dwa razy więcej kanałów można umieścić w połowie powierzchni FPGA. Sześć akumulatorów zintegrowanych i zrzutu (Sigma) zostaje przełączonych na rejestr przesuwny w epoce kodu. Flaga zgłoszenia usługi sygnalizuje procesor, który odczytuje dane bitowo-szeregowo. Gdy aktywnych jest 8 kanałów, zużywa się 8 czasu procesora na wykonywanie instrukcji oprdBit. Ale jest mnóstwo czasu, a seryjny IO używa ekonomicznie FPGA. Można teraz pozwolić sobie na luksusy, takie jak rejestrowanie RSSI i IQ (np. Dla działek rozproszonych). Funkcje przesyłania pętli F (z) pochłaniają 2 przepustowości procesora na aktywny kanał. Są to standardowe regulatory proporcjonalne (PI): stosuje się 64-bitową precyzję, a współczynniki wzmocnienia KI i KP, choć ograniczone do potęg 2, są regulowane dynamicznie. Każdy kanał, który musi czekać na swoją kolej, aktualizacje szybkości NCO mogą być opóźnione o dziesiątki lub setki mikrosekund po epoce kodu, ale wprowadza to nieznaczne przesunięcie fazowe na częstotliwościach, w których wyznaczany jest margines fazy. Cienkie ślady są 1-bitowe, teoretycznie reprezentujące plusmn1. Port 2,6 MHz jest początkowo rozpraszany poprzez mieszanie z wczesnymi, późnymi i punktowymi kodami. Kompleksowe produkty z pasmem podstawowym I i Q z drugiego rzędu mikserów XOR są sumowane na ponad 10000 próbek lub 1 ms. To filtrowanie dolnoprzepustowe radykalnie zmniejsza szerokość pasma szumów, a tym samym podnosi SNR. Zmniejszenie częstotliwości próbkowania do 1 KHz wymaga szerszych ścieżek danych w domenie oprogramowania. Faza kodu jest śledzona za pomocą konwencjonalnej pętli z opóźnieniem lub wczesnej bramy. Moc we wczesnych i późnych kanałach obliczana jest za pomocą P I 2 Q 2, który jest niewrażliwy na fazę. Kody wczesne i późne są jednym zrębem, tj. Chipem frac12 wyprzedzającym i opóźnionym. Ten schemat pomaga uzyskać poprawne odczucie błędów: pętla Costas jest używana do śledzenia nośnika i odzyskiwania danych NAV w kanale punktowym. Dane NAV, m, są pobierane z bitu znaku I-ramienia z niepewnością fazową 180 stopni. k jest odebraną amplitudą sygnału, ata jest różnicą fazową pomiędzy odbieranym nośnikiem (modulacja sans) a lokalnym NCO. k wynosi od około 400 dla najsłabszych odtwarzalnych sygnałów do ponad 2000 dla najsilniejszych. Zauważ, jak błąd zwracany do kontrolera F (z) w pętli Costas jest proporcjonalny do mocy odbieranego ksup2. Krzywa śledzenia, a zatem wzmocnienie pętli, również zmienia się w zależności od mocy sygnału w pętli kodu. Poniżej znajduje się wykres Bode wzmocnienia w pętli otwartej dla pętli Costas w k500: Pasmo pętli Costas Loop wynosi około 20 Hz, co jest optymalne dla śledzenia nośnej. Szerokość pasma pętli kodowania wynosi 1 Hz. Moc szumu w takich szerokościach pasma jest niewielka, a pętle mogą śledzić bardzo słabe sygnały. Powyższe kI i kP działają dla większości sygnałów, ale muszą spaść o jeden stopień dla bardzo silnych. Scilab przewiduje, a wykresy rozproszenia potwierdzają, początek niestabilności w kge1500. Błędy parzystości nie występują, dopóki próbki nie znajdą się w przeciwnej połowie płaszczyzny IQ. (i) Niestabilność przy kge1500 Powyższe są 2 kolejnymi ramkami po 5 podramek każda. Ramki pomocnicze mają długość 300 bitów, a transmisja trwa 6 sekund. Kolumna 1 jest preambułą 10001011. Pojawia się na początku każdej podramki, ale może wystąpić w dowolnym miejscu danych. 17-bitowy licznik w kolumnie 5 jest czasem tygodnia (TOW) i resetuje się do zera o północy w niedzielę. 3-bitowy licznik w kolumnie 7 jest podramką od ID 1 do 5. Podramki 4 i 5 są podkomechanizowane na 25 stron każda, a pełny komunikat danych zawierający 25 pełnych ramek zajmuje 12,5 minuty do przesłania. Obecnie używam tylko danych w podramkach 1, 2 i 3. Rozwiązywanie pozycji użytkownika Każdy satelita GPS przesyła swoją pozycję i czas. Odejmowanie czasu wysłanego z otrzymanego czasu i pomnożenie przez prędkość światła określa sposób, w jaki odbiornik mierzy odległość między sobą a satelitami. Użycie trzech satelitów dałoby trzy równoczesne równania w trzech niewiadomych (pozycja użytkownika: x, y, z), gdyby dokładny czas był dostępny. W praktyce zegary odbiorników nie są wystarczająco dokładne, dokładny czas jest czwartym nieznanym, dlatego wymagane są cztery satelity i muszą zostać rozwiązane cztery równoczesne równania: stosuje się metodę iteracyjną, ponieważ równania są nieliniowe. Używając centrum Ziemi (0, 0, 0) i przybliżonego czasu jako punktu początkowego, algorytm zbiega się tylko w pięciu lub sześciu iteracjach. Rozwiązanie zostanie znalezione, nawet jeśli błąd zegara użytkownika jest duży. Satelity przenoszą zegary atomowe, ale one również mają błędy i współczynniki korygujące w podramce 1 muszą być stosowane do czasu transmisji. Typowe poprawki mogą wynosić setki mikrosekund. Niepoprawiony czas transmisji jest tworzony przez skalowanie i dodawanie kilku liczników. Pora tygodnia (TOW) w sekundach od północy Niedziela jest wysyłana w każdej podramce. Krawędzie danych wyznaczają interwały 20 ms w 300-bitowych podramkach. Kod powtarza się 20 razy na bit danych. Długość kodu to 1023 żetonów, a szybkość żetonów wynosi 1.023 Mb / s. Ostatecznie dołączono 6 najważniejszych bitów fazy kodu NCO, ustalając czas transmisji na plus 15n. Pozycje satelitarne w skorygowanym czasie transmisji są obliczane za pomocą efemeryd w podramkach 2 i 3. Pozycja orbitalna przy punkcie odniesienia czasu (czas efemeryd) jest dostarczana wraz z parametrami pozwalającymi na obliczenie pozycji (x, y, z) do kilku godziny przed lub po. Efemerydy są regularnie aktualizowane, a satelity transmitują własne. Długie orbity całej konstelacji można przewidzieć mniej dokładnie za pomocą danych Almanacha w podramkach 4 i 5, jednak nie jest to konieczne, jeśli stosuje się szybkie wyszukiwanie oparte na FFT. Rozwiązania obliczane są w współrzędnych ziemskich, ustalonych przez ziemię (ECEF). Lokalizacja użytkownika jest konwertowana na szerokość, długość i wysokość z poprawką na ekscentryczność ziemi, która wybrzusza się na równiku. Poniższe diagramy punktowe ilustrują powtarzalność, zaletę uśredniania i wpływ złych wyborów satelitarnych. Siatki kwadratowe są po 0,011 z każdej strony. Niebieskie kropki oznaczają 1000 poprawek. Żółte trójkąty oznaczają centra grawitacji: (i) Półka od strony północnej (ii) Antena na dachu (iii) Półka od strony wschodniej Ściśle oprawa (ii) została uzyskana za pomocą satelitów w czterech różnych częściach nieba. Tylko antena na dachu miała wyraźny widok we wszystkich kierunkach. Ale dobre poprawki uzyskano przez uśrednienie, nawet gdy połowa nieba była zasłonięta. Poprawki na dachu również wykazują rozprzestrzenianie się jak (i) i (iii) w przypadku wybrania niewłaściwych satelitów. Powyższe rozwiązania zostały wygenerowane bez kompensacji opóźnień propagacji jonosferycznej za pomocą parametrów na stronie 18 podramki 4, które należy zastosować, ponieważ jest to odbiornik o pojedynczej częstotliwości. Załamanie jonosfery zwiększa długość ścieżki między użytkownikami i satelitami. W kwietniu 2017 r. Naprawiłem błąd, który powodował znaczące błędy w rozwiązaniach dotyczących pozycji użytkownika. Pierwotnie, nie przekształcając pozycji satelitów z ziemno-centralnie uziemionych (ECEF) na współrzędne bezwładności (ECI), skutecznie ignorowałem obrót Ziemi podczas 60 do 80 ms, że sygnały były w locie. Obecnie widzę pozycyjne dokładności rozwiązania plusmn 5 metrów po uśrednieniu, nawet przy ograniczonej widoczności satelity. Stworzyłem dodatek pokazujący, w jaki sposób tworzone jest iteracyjne rozwiązanie, zaczynając od równania geometrycznego, które jest linearyzowane za pomocą rozszerzenia Taylora, i rozwiązane metodami macierzowymi, dla specjalnego przypadku czterech satelitów lub ogólnego przypadku więcej, z możliwość użycia ważonych najmniejszych kwadratów do kontrolowania wpływu poszczególnych satelitów. Znajdziesz ten kod źródłowy rozwiązania i C w linkach na dole strony. Jestem wdzięczny Danowi Dobersteinowi za przesłanie mi wczesnego szkicu swojej książki GPS 2, która pomogła mi zrozumieć algorytm rozwiązania. Oficjalnym punktem odniesienia jest oficjalna amerykańska specyfikacja interfejsu GPS 3. Monitor sygnału Powyższy układ obwodów, w większości implementowany w FPGA, ulega rozproszeniu poprzez zastosowanie iloczynu 1-bitowego IF i kodu punktowego, pozostawiając modulację danych 50 bps. Można zauważyć niewielkie wycięcie z powodu tłumienia nośnika BPSK: Te widma pokazują tę samą transmisję rozproszoną przy różnych szerokościach pasma i rozdzielczości (RBW). Przesunięcie dopplerowskie wynosiło -1,2 kHz. Dno szumu jest wzmacniane szumem termicznym anteny i filtrowane przez pasek IF. Pasmo -3 dB wygląda na około 3 MHz, nieco szerzej niż planowano. Rozproszona nośna wynosi 5 dB powyżej poziomu hałasu przy 30 kHz RBW i 25 dB powyżej przy 300 Hz RBW. Uzyskaną siłę sygnału na antenie można oszacować na -174110log10 (30e3) 5 -123 dBm. Nadal mnie zadziwia, jak dobrze informacje o domenie częstotliwości są zachowywane poprzez ograniczanie twarde. Nadajnik LVDS ma stały prąd wyjściowy 1 mW przy 100 omach. Moc szczytowa widoczna w SA nie może przekroczyć 0 dBm. Tutaj widzimy tę dostępną moc rozłożoną na różnych częstotliwościach. Szerokopasmowa zintegrowana gęstość widmowa musi być pierwszym oscylatorem lokalnym Budowałem eksperymentalne syntezatory frakcyjno-N przy użyciu programowalnej logiki ogólnego przeznaczenia przez kilka lat: Xilinx Spartan 3 FPGA Frac7 został zbudowany w tym celu, ale nie miałem pojęcia, że ​​Frac5 będzie użyty w GPS odbiornik, kiedy go zaprojektowałem. Poniższe zdjęcie pokazuje, w jaki sposób wyjście ROS-1455 VCO na Frac5 było rezystancyjnie rozdzielone pomiędzy wyjściem SMA i dzielnikiem Hittite HMC363 dzielonym przez 8. Wyjście rozdzielacza 200 MHz jest kierowane (różnie) do FPGA, które to fazy blokuje je do wzorcowego odniesienia za pomocą metod udokumentowanych w moich wcześniejszych projektach. Obwód mikrofalowy na Frac7 jest podobny, ale wykorzystuje rozdzielacz 3dB Mini-Circuits. Uzyskano wysoką stabilność i niski poziom hałasu fazowego, co widać na widmach wyjściowych VCO pokazanych poniżej. Kiedy Frac5 został pierwotnie opracowany, jako dedykowany syntezator częstotliwości, uniknięto jednoczesnego przełączania częstotliwości nieharmonijnie powiązanych w celu zminimalizowania ostróg intermodulacji. FPGA był statyczny, gdy impulsy zegarowe, które przełączały wyjście detektora fazy, przechodziły przez materiał. Żaden taki luksus nie jest praktyczny, gdy FPGA jest hostem odbiornika GPS, ale na szczęście wydajność lokalnego oscylatora jest wystarczająco dobra: Analizatory widma Marconi 2383 STD STD 50 MHz służyły jako główne źródło odniesienia dla Frac5 i wszystkich wewnętrznych zegarów odbiornika GPS. Odbiorniki GPS potrzebują dokładności lepszej niż 1 ppm (części na milion) do pomiaru przesunięć dopplerowskich plusmn5 KHz na nośnej L1 155,42 MHz. Jakakolwiek niepewność częstotliwości wymagałaby szerszego zakresu wyszukiwania. Wbudowany procesor Mój oryginalny odbiornik GPS może śledzić tylko 4 satelity. Dostępna tkanina nie była wydajnie używana, a układ FPGA był pełny. 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:

Comments