Jak przeprowadzić odzyskiwanie fazy nośnej w oprogramowaniu?

13

Jakie są opcje odzyskiwania fazy sygnału BPSK w oprogramowaniu? Jedyne zasoby, które mogę znaleźć w Internecie, zawierają schematy obwodów - wydaje się, że nikt nie chce wyjaśnić tego osobom niezaznajomionym z obwodami analogowymi.

Chciałbym wyjaśnić, jak teoretycznie działa odzyskiwanie nośnika, a także pokochałbym przykłady pseudokodu lub kodu.

Keith
źródło
Zwykle nie podajemy przykładów kodu - szczególnie dla czegoś tak skomplikowanego jak demodulator BPSK.
Jim Clay
1
Jak wskazał JimClay, prawdopodobnie nie zapewnisz komuś wystarczająco dużo czasu na dostarczenie pełnego kodu źródłowego do wdrożenia demodulatora. Jednak mechanika tworzenia implementacji powinna być łatwa, jeśli rozumiesz pojęcia. Ogólnie, odbiornik oprogramowania będzie miał podobną strukturę do odpowiedniej techniki sprzętowej (np. Synchronizator oparty na nieliniowości lub podejście oparte na sprzężeniu zwrotnym PLL). Czy miałeś określoną topologię, na którą zamierzałeś kierować?
Jason R
Dzięki za komentarze @JimClay i JasonR - nie chciałem prosić o działający kod źródłowy. Zaktualizowałem pytanie, aby było bardziej szczegółowe: szukam tylko jakiegokolwiek wyjaśnienia, które nie zakłada zrozumienia obwodów analogowych i schematów obwodów.
Keith,

Odpowiedzi:

25

Aby zdemodulować kluczowany sygnał przesunięcia fazowego, którego BPSK jest najprostszy, musisz odzyskać częstotliwość nośną, fazę i synchronizację symboli.

Sygnały impulsowe Niektóre sygnały są impulsowe i zapewniają znaną sekwencję danych, zwaną preambułą lub mid-amble (w zależności od tego, czy pojawia się na początku czy w środku serii). Demodulatory mogą użyć dopasowanego filtra, który „wyszukuje” znaną sekwencję danych i użyć go do ustalenia częstotliwości serii, fazy i taktowania symboli. Robią to dla każdej serii i nie muszą zawracać sobie głowy „dryfowaniem” (stopniowa odległość, która narasta między demodulatorem a odbieranym sygnałem w miarę narastania małych błędów), ponieważ impulsy są na ogół wystarczająco krótkie, aby dryf nie był problem.

Sygnały ciągłe Następnie pojawiają się sygnały ciągłe. Są one pod wieloma względami trudniejsze do odzyskania niż sygnały impulsowe, ponieważ zwykle nie masz znanej sekwencji danych, aby pomóc w blokowaniu się sygnału, i musisz martwić się dryfowaniem nawet po zablokowaniu sygnału. Spróbuję opisać na wysokim poziomie główne etapy, które są zwykle używane do odzyskiwania ciągłych sygnałów.

Odzyskiwanie nośnika

Zwykle wiesz, na jakiej częstotliwości będzie poszukiwany sygnał, a przynajmniej na jakim zestawie częstotliwości może być. Jednak nawet przy tej wiedzy zwykle musisz być w stanie skorygować przesunięcie częstotliwości, ponieważ żadne dwa nadajniki nie nadają na tej samej częstotliwości. Zawsze występuje jakiś błąd. Zatem zwykłą metodą jest zmieszanie częstotliwości, o której myślisz, że będzie sygnał, a następnie skorygowanie błędu częstotliwości resztkowej. Można to zrobić za pomocą pętli Costaslub pobierając czwartą moc danych sygnału pasma podstawowego i szukając skoku częstotliwości. Przy przesunięciu nośnym * 4 powinien wystąpić skok częstotliwości (np. Jeśli weźmiesz FFT danych do czwartej mocy i zobaczysz skok częstotliwości przy 8300 Hz, oznacza to, że przesunięcie nośnej wynosi 8300/4 = 2075 Hz). Jest to bardzo skuteczny sposób uzyskania początkowej blokady przesunięcia częstotliwości. Możesz go również użyć do kompensacji znoszenia, jeśli od czasu do czasu to robisz. Jest inny sposób na zrekompensowanie znoszenia, o którym później się przekonam.

Faza Przewoźnika

W tym momencie, jeśli narysowałeś swoje złożone dane w płaszczyźnie złożonej (oś x jest rzeczywista, oś y jest urojona), powinna ona wyglądać następująco:

Obrócono BPSK

Jeśli przyjrzysz się uważnie, zobaczysz dwa gęste obszary na końcach rozmytej linii. Są to punkty konstelacji BPSK. Punkty pomiędzy są przejściami między punktami konstelacji. Skasują się, gdy otrzymamy czas symbolu. Powodem, dla którego linia jest pod kątem, jest faza nośna. Można to zmierzyć poprzez odbicie lustrzane sygnału przez pomnożenie wszystkich punktów, które mają ujemne wartości rzeczywiste przezejπ

Obrócone i dublowane BPSK

a następnie biorąc pod uwagę średnią kątów punktów. Po obliczeniu tego odejmij ten kąt od wszystkich punktów, dla których usunięto przesunięcie nośnika, mnożąc punkty przez . Za pomocą tej techniki można również skompensować przesunięcie przesunięcia nośnika, dynamicznie aktualizując przesunięcie fazowe. Po poprawieniu fazy dane powinny wyglądać mniej więcej tak:ejω

Głośny BPSK

Po skorygowaniu faz danych można usunąć urojoną część danych, ponieważ nie dodaje żadnych informacji.

Czas symbolu

Zwykle powinieneś wiedzieć z góry okres symbolu sygnału, który próbujesz zdemodulować. Jeśli jednak musisz określić okres / częstotliwość symbolu, możesz to zrobić w podobny sposób, jak wykryto przesunięcie nośnej. Możesz obliczyć dane, które spowodują skok częstotliwości przy częstotliwości dwukrotnie większej niż częstotliwość symbolu.

Podobnie jak w przypadku przewoźnika, musisz odpowiednio ustawić fazę (czas), a następnie zrekompensować dryf. Typową metodą dla obu tych problemów jest poszukiwanie zerowych przejść. O ile szum nie jest dość zły, powinien przekraczać punkt zerowy w środku przejścia symbolu od -1 do 1 lub od 1 do -1. Nawet jeśli hałas powoduje, że dzieje się tak w środku symbolu, to nie zdarza się często.

Schemat oka

Powyższy obrazek jest zwykle nazywany „schematem oka” lub „wzorem oka”. Ma dwa okresy symboli i wiele symboli „ułożonych” jeden na drugim. Nie wiem, czy znasz oscyloskopy, czy nie, ale możesz uzyskać oscyloskop, aby wyświetlić taki obraz. W każdym razie dwa „X” to przejścia symboli. Wysokie do niskich linii w X mają miejsce, gdy symbol przechodzi od 1 do 1, a niskie do wysokich linii w X mają miejsce, gdy symbol przechodzi od 1 do 1. Punkt pomiędzy, gdzie różowa linia to optymalne miejsce do próbkowania danych w celu sprawdzenia, czy symbolem jest 1 czy -1.

Tej samej techniki można użyć do obsługi przesunięcia taktowania symboli. Weź średnią roboczą odległości od poprzedniego przejścia przez zero i po przejściu przez zero. Jeśli te dwie średnie są mniej więcej takie same, wszystko jest w porządku. Jeśli jeden jest większy od drugiego, musisz zmienić miejsce, w którym pobierasz próbkę.

Po próbkowaniu symboli we właściwych punktach, punkty danych powinny otrzymać coś, co wygląda jak klasyczne punkty konstelacji BPSK.

Głośna konstelacja BPSK

Mam nadzieję, że to pomoże.

Jim Clay
źródło
Aby ulepszyć ten cudowny post, możesz dodać sekcję odzyskiwania zegara przed synchronizacją symbolu?
LWZ
Myślę, że mogę wiedzieć, co masz na myśli, ale nie jestem pewien. Co konkretnie miałeś na myśli?
Jim Clay
Dzięki wielkie! Nie myślałem o szukaniu zerowych przejazdów ani o wykreślaniu prawdziwego / urojonego na x / y w ten sposób. Właśnie patrzyłem na wykresy faz i zastanawiałem się, jak zsynchronizować wszystko. Dzięki jeszcze raz!
Keith,
@JimClay, na początku sekcji synchronizacji symboli wspomniałeś, że „powinieneś normalnie znać okres symbolu sygnału, który próbujesz demodulować.”, I zwykle osiąga się to za pomocą jednostki odzyskiwania zegara, ponieważ normalnie wygrałeś ” wyślij zegar wraz z danymi. W przypadku sygnału BPSK jest to łatwe, ponieważ wystarczy wyprostować sygnał, co spowoduje usunięcie danych. Następnie, patrząc na spektrum mocy, powinna istnieć częstotliwość szczytowa zwana tonem zegara , który daje okres symbolu.
LWZ
Dodano akapit dotyczący częstotliwości symboli.
Jim Clay