Uwaga! Strona zawiera ilustracje w formacie SVG. Ilustracje te nie są wyświetlane przez przeglądarkę Internet Explorer.
Kodowanie i Transmisja Sygnałów
Zagadnienie 1
Modulacja BPSK
mgr inż. Grzegorz Kraszewski
Krótki opis obiektowego szkieletu programu do testowania modulacji cyfrowych
Obiektowy szkielet programu do testowania modulacji cyfrowych napisany jest w języku C++ i znajduje się
w pliku kits.cpp. Jest to zestaw klas ułatwiających testowanie modulacji i demodulacji.
Zestaw składa się z 2 klas. Klasa Dane dostarcza pseudolosowego ciągu bitów
informacji, przy czym prawdopodobieństwo wystąpienia bitów 0 i 1 można regulować. Dokonuje się tego
przez podanie prawdopodobieństwa wystąpienia jedynki jako parametru konstruktora. Każde wywołanie metody
Dane::Bit() daje w wyniku kolejny bit danych pseudolosowych. Domyślną wartością
prawdopodobieństwa wystąpienia jedynki jest 0.5, wtedy statystycznie w strumieniu danych jest tyle samo
zer co jedynek.
Najważniejszą klasą jest klasa Sygnal. Zawiera ona w sobie cały system transmisji
cyfrowej, a więc generator fali nośnej, modulator, kanał transmisyjny i demodulator. Generator fali nośnej
to po prostu tablica nosna zawierająca 120 próbek funkcji sinus składających się
na jeden okres. Tablica jest przygotowywana automatycznie w konstruktorze klasy Sygnal.
Następnie dokonuje się modulacji sygnału w metodzie Sygnal::Moduluj(). Metoda ta
zależy od wybranej modulacji i w każdym zadaniu trzeba napisać treść tej metody. Na bazie odebranych jako
parametr bitów danych oraz tablicy fali nośnej, należy wypełnić tablicę sygnal
okresem zmodulowanego sygnału. Wywołując w tym momencie metodę Sygnal::Zapisz()
można zapisać do pliku „czysty” sygnał przed przejściem przez kanał transmisyjny. Kolejnym
krokiem jest symulacja kanału transmisyjnego. Metoda Sygnal::Zaszumiaj() dodaje
do zmodulowanego sygnału szum o rozkładzie gaussowskim i zadanej amplitudzie. Wywołanie metody
Sygnal::Zapisz() po zaszumianiu pozwala zapisać do pliku przebieg sygnału po
przejściu przez kanał transmisyjny.
Funkcja main() programu zawiera główną pętlę symulacyjną. Liczba jej obrotów
określa ilość okresów fali nośnej, a więc i ilość przesłanych bitów. W każdym obrocie pętli następuje
wygenerowanie kolejnego losowego bitu danych, modulacja, zaszumianie, demodulacja i porównanie bitu nadawanego
z bitem odebranym. Opcjonalnie przed lub po zaszumianiu można zapisać okres sygnału do pliku. Plik ten można
załadować do arkusza kalkulacyjnego, pamiętając o ustawieniu przy imporcie danych kropki, a nie przecinka
jako znaku dziesiętnego. Następnie sporządzamy w arkuszu wykres, najlepiej liniowy bez zaznaczania punktów
danych.
Generator szumu o gaussowskim rozkładzie prawdopodobieństwa
Do symulacji kanału transmisyjnego potrzebny jest nam generator szumu o rozkładzie prawdopodobieństwa amplitud
w kształcie krzywej Gaussa. Taki szum, zwany „białym szumem gaussowskim” jest powszechnie używany
przy analizie transmisji sygnałów. Dlaczego akurat taki? Wynika to z
centralnego twierdzenia granicznego,
które mówi, że szum będący sumą szumów generowanych przez wiele niezależnych źródeł, dąży do szumu gaussowskiego,
jeżeli ilość tych źródeł dąży do nieskończoności. Ponieważ zdecydowana większość szumów w transmisji sygnałów
(szumy naturalne, takie jak szum tła radiowego, szum termiczny, szum elementów elektronicznych) jest generowana
przez bardzo wiele niezależnych źródeł, stąd ich gaussowski rozkład prawdopodobieństwa.
Modulacja BPSK (Binary Phase Shift Keying), jest najprostszą cyfrową modulacją fazy. Pozwala
na przesłanie jednego bitu informacji w czasie trwania jednego okresu fali nośnej. Przejście do kolejnego
bitu następuje w momencie przejścia fali nośnej przez zero. W zależności od wartości bitu informacyjnego
okres fali nośnej jest odwracany w fazie (mnożony przez −1 lub nie). Kwestią umowną jest, czy
odwrócenie fazy następuje dla bitu 0 czy 1.
Powyższy rysunek przedstawia jedną z dwóch realizacji analogowego modulatora BPSK. Warunkiem koniecznym poprawnej
pracy modulatora jest synchronizacja zegara taktującego przesyłane dane cyfrowe z przejściami przez zero fali nośnej.
W modulatorze programowym synchronizacja jest osiągnięta bardzo łatwo przez odczytywanie tablicy fali nośnej (jeden okres
funkcji sinus) od zera dla każdego bitu danych. Sygnał cyfrowy jest przepuszczany przez układ NRZ (ang. Non Return
to Zero), który usuwa składową stałą z sygnału i normalizuje jego amplitudę do wartości 1.0. Znormalizowany sygnał
cyfrowy jest mnożony przez nośną, co daje na wyjściu sygnał zmodulowany BPSK.
Alternatywna realizacja modulatora BPSK używa klucza analogowego zamiast układu mnożącego. W zależności od
wartości aktualnego bitu danych na wyjście przesłany jest okres nośnej odwrócony w fazie lub nie. Dzięki
synchronizacji fali nośnej i danych cyfrowych, przełączenie klucza następuje w chwili przejścia sygnału
nośnej przez zero.
Konstelacja sygnałowa
Sygnał zmodulowany modulacją BPSK, tak jak większość sygnałów w modulacjach cyfrowych, składa się z
fragmentów funkcji sinus, której okres równa się taktowi modulacji (częstotliwość jest równa częstotliwości
fali nośnej). W modulacjach fazowych zmienia się faza początkowa fragmentu, np. w modulacji BPSK może ona wynosić
0 lub 180 stopni. Fazę i amplitudę poszczególnych sygnałów wzorcowych możemy zaznaczyć na wykresie
w układzie współrzędnych zespolonych, podobnie jak zaznaczamy fazy i amplitudy przebiegów sinusoidalnych na
znanym z elektrotechniki wykresie wskazowym. Dla modulacji BPSK mamy dwa sygnały wzorcowe w0
i w1, zatem konstelacja sygnałowa ma dwa punkty. Amplituda (odległość od środka układu
współrzędnych) dla obu wynosi 1, natomiast fazy 0 i π (180°). Konstelacja sygnałowa dla modulacji BPSK
pokazana jest na rysunku po lewej.
Konstelacja sygnałowa posiada dwie warte wspomnienia cechy. Przede wszystkim odporność na szum modulacji z
kluczowaniem fazy jest w przybliżeniu proporcjonalna do minimalnej odległości między dwoma punktami (przy
założeniu, że prawdopodobieństwo wystąpienia każdego z punktów jest takie same). Po drugie obrócenie całej
konstelacji o dowolny kąt wokół środka układu współrzędnych, nie zmienia szumowych i energetycznych
właściwości modulacji. Dlatego np. modulacja BPSK z fazami π/2 (90°) i 3π/2 (270°) jest tak samo
dobra jak ta „klasyczna” z fazami 0 i π. Natomiast modulacja z fazami 0 i π/2 będzie już gorsza
dlatego, że odległość między punktami będzie wynosiła 1,4142 (pierwiastek z 2) a nie 2. Stosunek tych odległości
wynosi 3 dB, na tej podstawie można oszacować, że dla zachowania tej samej stopy błędów, trzeba by w takiej
„skopanej” modulacji nadawać z amplitudą +3 dB, co oznacza moc +6 dB, a więc 2 razy większą!
Jeżeli założymy jednakowe prawdopodobieństwo występowania poszczególnych punktów konstelacji w nadawanym
sygnale to optymalne rozmieszczenie punktów konstelacji jest symetryczne względem środka układu
współrzędnych. To proste – jeżeli zepsujemy symetrię przesuwając któryś punkt (i zachowując amplitudę),
to któraś z odległości między nim, a jednym z pozostałych, stanie się mniejsza. A o odporności modulacji na
szum decyduje najmniejsza z odległości...
Określenie stosunku sygnał/szum
Stosunek mocy sygnału do mocy szumu, wyrażany najczęściej w decybelach [dB] to jeden z podstawowych
parametrów sygnału używany do oceny skuteczności modulacji cyfrowych i demodulatorów. Stosunek ten wyrażony
jest znanym wzorem
W celu wyznaczenia stosunku sygnału do szumu w generowanym sygnale zaszumionym należy najpierw
wyznaczyć łączną energię szumu i łączną energię sygnału czystego (przed zaszumieniem). Energia
jakiegokolwiek przebiegu spróbkowanego to suma kwadratów jego próbek. Ponieważ w naszym modulatorze
ilości próbek i okresy próbkowania szumu i czystego sygnału są takie same, więc stosunek mocy równy
jest stosunkowi energii. Jeżeli więc wektor próbek sygnału oznaczymy jako s[i] a wektor
próbek szumu jako n[i], to stosunek sygnał/szum wyrazi się następującym wzorem:
Przy dodawaniu do siebie kwadratów próbek należy zwrócić uwagę na problem związany z ograniczoną
precyzją liczb zmiennoprzecinkowych typu double. Suma kwadratów próbek
będzie ciągle narastać, co spowoduje, że po jakimś czasie dodając kwadrat kolejnej próbki będziemy
dodawać bardzo małą liczbę do bardzo dużej. Spowoduje to błędy zaokrąglenia, a po jakimś czasie
dodawana mała liczba będzie w ogóle pomijana. Problem ten można znacznie załagodzić, nie dodając
kwadratu próbki bezpośrednio do całkowitej energii, ale najpierw licząc energię próbek w jednym
okresie modulacji, a dopiero tak otrzymaną sumę dodając do energii całkowitej.
Zadania do wykonania
Uzupełnić szkielet programu modulatorem BPSK (należy napisać implementację metody
Sygnal::Moduluj()). Do zaliczenia niezbędne jest opisanie zasady działania
zaprogramowanego modulatora.
Za pomocą metody Sygnal::Zapisz() wygenerować do pliku 10 okresów nośnej
zmodulowanej sekwencją pseudolosową. Wczytać dane do arkusza kalkulacyjnego i tworząc wykres sprawdzić
poprawność działania modulatora. Do zaliczenia wymagana jest demonstracja poprawności działania.
Zmodyfikować główną pętlę tak, aby przed zapisem do pliku sygnał został zaszumiony metodą
Sygnal::Zaszumiaj(). Sprawdzić działanie generatora szumów dla różnych
amplitud szumu. Do zaliczenia wymagane jest pokazanie zaszumiania dla różnych poziomów szumu.
Korzystając z generatora pseudogaussowskiego i programu do liczenia rozkładu gęstości
prawdopodobieństwa, zaobserwować jak wzrost ilości dodawań szumu (czyli wzrost ilości sumowanych
źródeł) zmienia rozkład równomierny w rozkład gaussowski. Sporządzić wykresy rozkładu dla 1, 2, 4,
16 i 64 dodawań szumu. Na zaliczeniu należy zademonstrować wykresy i omówić sposób eksperymentalnego
wyznaczania rozkładu gęstości prawdopodobieństwa szumu.
Dodać do programu liczenie stosunku sygnał/szum dla generowanego sygnału. Na zaliczenie omówić
zasadę liczenia tegoż stosunku.