Kodowanie i Transmisja Sygnałów

Zagadnienie 2

Demodulacja BPSK

mgr inż. Grzegorz Kraszewski

Opis ćwiczenia

Pierwszym etapem ćwiczenia jest zaprogramowanie i przetestowanie korelacyjnego demodulatora BPSK. Następnie korzystając z tego demodulatora studenci dekodują wiadomość zawartą w pliku podanym przez prowadzącego. Plik zawiera zapisane w formacie tekstowtym kolejne próbki sygnału zmodulowanego w modulacji BPSK z nałożonym szumem. Poziom szumu jest tak dobrany, że umożliwia prawidłową demodulację (przy dobrym zaprojektowaniu odbiornika). Każda próbka (liczba) umieszczona jest w oddzielnej linii pliku.

Każda zakodowana wiadomość zawiera dokładnie 72 bity. Pierwsze 64 bity to 8 znaków alfanumerycznych w kodzie ASCII. W wiadomościach użyte są wyłącznie cyfry oraz małe i duże litery alfabetu angielskiego. Bity przesyłane są w kolejności od najstarszego do najmłodszego. Ostatnie 8 bitów to zawsze osiem jedynek, tworzących bajt FF szesnastkowo. Pliki testowe różnią się od siebie przesyłaną wiadomością, ilością próbek przypadającą na 1 okres nośnej (1 bit), sposobem odwracania fazy fali nośnej (przy bicie 0 lub bicie 1) oraz poziomem szumu.

Demodulator korelacyjny

Można sobie oczywiście wyobrazić różne konstrukcje demodulatorów BPSK. Przykładowo demodulator może sprawdzać wartość odebranego sygnału w 1/4 okresu fali nośnej i podejmować decyzję o odebranym bicie 0, jeżeli wartość sygnału jest równa +1, a decyzję o odebranym bicie 1 w przeciwnym wypadku. W przypadku braku szumu w odebranym sygnale taki demodulator będzie działał poprawnie. Niestety nawet najmniejszy szum uczyni taki demodulator bezużytecznym. Można go nieco ulepszyć zmieniając kryterium podejmowanej decyzji. Jeżeli demodulator będzie decydował o bicie 0 jeżeli próbka jest dodatnia i o bicie 1 jeżeli próbka jest ujemna, to błąd może być popełniony tylko wówczas, jeżeli chwilowa wartość szumu będzie mniejsza od −1,0 przy bicie 0 lub większa od +1,0 przy bicie 1.

Ten drugi demodulator można dalej ulepszać, np. sprawdzając dodatkowo próbkę w 3/4 okresu. Czy jednak istnieje optymalny demodulator, czyli taki, który przy danym stosunku mocy sygnału do mocy szumu popełni możliwie najmniej błędów? Otóż istnieje i nosi nazwę demodulatora korelacyjnego. Jego cechą charakterystyczną jest to, że do podjęcia decyzji o odebranym bicie wykorzystuje wszystkie próbki odebranego sygnału. Istnieje ścisły matematyczny dowód na to, że taki demodulator jest optymalny (czyli najlepszy z możliwych), pozostawimy go wykładowi, tu natomiast skoncentrujemy się na problemie jak taki demodulator zrealizować w praktyce.

Ogólnie rzecz biorąc funkcja korelacji to miara podobieństwa dwóch różnych funkcji (na przykład sygnału wzorcowego w(t) i sygnału odebranego s(t)). W ogólnym przypadku sygnał może być przesunięty względem wzorca o dowolny czas τ, a korelacja jest funkcją tego czasu, a konkretnie jest po prostu iloczynem funkcji wzorcowej i sygnału przesuniętego o τ. Jeżeli wzorzec i sygnał mają taki sam kształt, to ich funkcja korelacji osiągnie maksimum dla τ = 0. Tak opisana funkcja korelacji wyraża się następującym wzorem:

W przypadku demodulacji koherentnej, faza sygnału jest znana i przesunięcie w czasie wynosi zero. W tym momencie korelacja przestaje być funkcją a staje się po prostu liczbą wyrażoną wzorem poniżej, wzór ten powstał z pierwszego wzoru przez podstawienie τ = 0.

Te dwa wzory dotyczą sytuacji, gdy sygnał wzorcowy i sygnał odebrany są sygnałami analogowymi (ciągłymi). W naszym zadaniu zaś są to sygnały dyskretne (spróbkowane). W tym momencie operacja całkowania zmienia się w operację sumowania, zgodnie z następującym wzorem:

Zatem wszystko co trzeba zrobić, aby zdemodulować okres sygnału w modulacji BPSK, to mnożyć po kolei próbki sygnału odebranego przez próbki wzorca, a otrzymane iloczyny dodawać do siebie. Modulacja BPSK posiada dwa sygnały wzorcowe. Sygnałem w0 dla bitu „0” jest okres funkcji sinus. Sygnałem w1 dla bitu „1” jest okres funkcji minus sinus. Na pozór wydawałoby się, że trzeba policzyć dwie korelacje, z dwoma sygnałami wzorcowymi, jednak, jak zauważyłem powyżej, w1 = −w0. Można zatem dokonać następującego przekształcenia:

z którego wynika, że obie korelacje są zawsze równe co do wartości, a przeciwne znakiem. Zatem nie ma sensu liczyć tego samego dwa razy.

Ostatnim etapem demodulacji jest podjęcie decyzji o odebranym bicie. Zasada jest prosta: wybieramy ten bit, którego sygnał wzorcowy ma większą korelację z sygnałem odebranym. Ponieważ korelacje są zawsze przeciwnych znaków, wystarczy sprawdzić, która z nich jest większa od zera.

Dekodowanie

Pierwszym krokiem dekodowania jest ustalenie ilości próbek sygnału przypadającej na jeden okres nośnej. Należy wykorzystać informację, że plik testowy zawiera dokładnie 72 bity, oraz rozpoznać ilość próbek w pliku. Wszystkie pliki testowe mają parzystą ilość próbek w jednym okresie fali nośnej. Następny krok to ustalenie polaryzacji modulacji (czyli przy jakim bicie danych następuje odwrócenie fazy fali nośnej). Jest to możliwe w oparciu o fakt, że każdy przesyłany znak ma kod ASCII mniejszy od 128, a więc pierwszy, najstarszy bit każdego znaku jest zerem. Oczywiście pierwszy bit pierwszego znaku również. Zatem a priori wiadomo, że pierwszy bit sygnału to 0. W dodatku wiadomo też (jak wspomniano na początku instrukcji), że ostatnie 8 bitów sygnału testowego to jedynki. Po ustaleniu tych dwóch parametrów modulacji można przystąpić do odczytania zakodowanej informacji. Po odczytaniu ciągu 8 znaków należy zgłosić się do prowadzącego zajęcia w celu sprawdzenia poprawności dekodowania.

Wyznaczenie poziomu szumów w sygnale testowym

Drugim etapem zadania jest wyznaczenie stosunku mocy sygnał/szum w sygnale testowym. W tym celu można skorzystać z wiedzy, że amplituda czystego sygnału przed zaszumieniem we wszystkich plikach testowych wynosi 1,0. Znając treść zakodowanej informacji i parametry modulacji należy odtworzyć czysty sygnał. Dysponując czystym sygnałem należy po pierwsze policzyć jego energię. Następnie trzeba odjąć od sygnału testowego sygnał czysty, otrzymując w ten sposób sam szum. Kolejnym krokiem jest policzenie energii szumu, a następnie wyliczenie stosunku S/N w decybelach. Po otrzymaniu wartości S/N należy zgłosić ją prowadzącemu zajęcia do sprawdzenia.

Wyznaczenie charakterystyki bitowej stopy błędów w zależności od stosunku sygnału do szumu

Bitowa stopa błędów (ang. Bit Error Rate, BER) to po prostu stosunek ilości błędnie odebranych bitów do wszystkich przesłanych bitów. BER oczywiście zależy od stosunku mocy odbieranego sygnału do mocy szumów. Jeżeli S/N dąży do +∞ (sygnał bez szumu), to BER dąży do 0. Jeżeli S/N dąży do −∞ (szum bez sygnału), to możemy jedynie zgadywać odbierane bity, na prawidłowe zgadnięcie mamy 50% szans, a więc BER dąży do 0,5.

W zadaniu mierzymy BER metodą symulacji bezpośredniej. Symulujemy modulację i demodulację dużej liczby bitów i zliczamy bity błędnie odebrane. Osiągana dokładność pomiaru zależy bezpośrednio od ilości przesyłanych bitów, np. milion bitów pozwala na określenie BER z rozdzielczością 10−6. Dokładniejsze pomiary wymagają jeszcze większych ilości przesyłanych bitów, co bardzo wydłuża czas symulacji. Jest to wada metody bezpośredniej. Algorytm pomiaru BER metodą symulacji bezpośredniej jest przedstawiony na poniższym rysunku:

Aby otrzymać wykres zależności BER od S/N należy program napisany według powyższego algorytmu kilkanaście razy, za każdym razem zmieniając amplitudę szumu (a tym samym S/N). Otrzymany ciąg punktów pomiarowych umieszczamy na wykresie, zwykle oś pionową (BER) skalujemy logarytmicznie.

Zadania do wykonania

  1. Zaimplementować w programie korelacyjny demodulator BPSK i sprawdzić jego działanie.
  2. Zdemodulować i zdekodować ośmioznakową wiadomość z pliku testowego. Wyznaczyć stosunek mocy sygnału do mocy szumu (w dB) w pliku testowym.
  3. Wyznaczyć zależność stopy błędów (BER, Bit Error Rate) od stosunku mocy sygnału do mocy szumu dla napisanego demodulatora i przedstawić ją w postaci wykresu. Zakres badanych S/N powinien wynosić od −40 do +5 dB.