Aby przesłać informacje (np. dźwięk) drogą radiową zanim zostaną one wyemitowane w przez antenę musimy je zakodować w sygnale nośnym. Taki proces kodowania informacji to modulacja. Zasadniczo dysponujemy dwoma rodzajami modulacji sygnałów analogowych: modulacja amplitudy (AM) i modulacja kąta (PM i FM). Tutaj przedstawię praktyczną realizację najprostszej metody modulacji AM w pakiecie MATLAB (kod działa również w GNU/Octave).
Zanim jednak przejdziemy do programowania przypomnijmy trochę teorii. Modulacja amplitudy polega na takiej modyfikacji fali nośnej, że sygnał
zostaje uwidoczniony w zmianach jej amplitudy. Oznacza to, że do
odzyskania (demodulacji) sygnału wystarczy np. wyznaczyć obwiednię zmodulowanej w ten sposób fali nośnej.
Jest to proces dobrze poznany i istnieją praktyczne realizacje prostych układów
elektronicznych realizujące taką funkcjonalność.
Wzór realizujący modulację amplitudy wygląda tak:
am(t)=carrier(t)+carrier(t)*signal(t)
po przekształceniu mamy:
am(t)=carrier(t)*[1+signal(t)]
gdzie:
t - chwila czasowa
signal(t) - funkcja zwracająca wartość sygnału w chwili tcarrier(t) - fala nośna
Jak widać od strony matematycznej jest to bardzo prosta operacja polegająca na sumowaniu (w zadanej chwili czasowej) wartości amplitudy fali nośnej oraz iloczynu wartości amplitud fali nośnej i sygnału.
Przyjrzyjmy się teraz bliżej naszej fali nośnej. Najczęściej (jeśli nie zawsze) jest to prosta sinusoida o określonej częstotliwości i amplitudzie:
carrier(t)=Ac*sin(2*π*Fc*t)
gdzie:
Ac - amplituda fali nośnej
Fc - częstotliwość fali nośnej
Sygnał
niosący informacje, którym chcemy zmodulować naszą nośną również dla
prostoty można przedstawić w postaci sinusoidy o założonej
częstotliwości:
signal(t)=As*sin(2*π*Fs*t)
gdzie:
As - amplituda sygnału
Fs - częstotliwość sygnału
Nasz sygnał rzecz jasna nie musi być sinusoidą i w praktycznych zastosowaniach rzadko kiedy nią jest. Może to być dowolna
funkcja lub nawet arbitralny ciąg próbek wyrażony w dziedzinie czasu t.
Podczas dobierania wartości amplitud zarówno fali nośnej jak i sygnału należy pamiętać o współczynniku głębokości modulacji m:
m=As/Ac
wartość tego współczynnika powinna zawierać się w zakresie (0;1), tzn nie powinno się nigdy zdarzyć, że amplituda sygnału będzie większa od amplitudy nośnej. W takim wypadku następuje przemodulowanie i nie będzie możliwe prawidłowe zdemodulowanie sygnału. Typowo wartość tego wpółczynnika przyjmuje się ~0.8.
Idźmy dalej. Potrzebujemy dwóch parametrów związanych z czasem: częstotliwości próbkowania oraz czasu trwania sygnału. Wprawdzie koncepcyjnie cały czas jesteśmy w dziedzinie sygnałów analogowych, jednak obliczenia wykonujemy na komputerze, który rozumie jedynie dane dyskretne. Zatem naszą częstotliwość próbkowania oznaczmy jako:
sampling_freq=10000 % 10000Hz
za czas trwania sygnału przyjmijmy 1 sekundę:
t=0:1/sampling_freq:1 % 1s
W tej chwili właściwie mamy już wszystkie dane potrzebne do napisania działającego programu i przeprowadzenia symulacji. Wygląd zmodulowanej fali nośnej przedstawia się następująco:
Kompletny kod MATLAB/Octave:
Oczywiście
MATLAB dostarcza gotowe funkcje realizujące wszelkie możliwe modulacje
(ammod, fmmod, pmmod, itp.). Tutaj jednak chciałem krok po kroku pokazać
na czym taka modulacja polega.
(y) i wszystko jasne!
OdpowiedzUsuń