MATLAB - liczby pseudolosowe

Sezon ogórkowy za nami! Po ponad miesięcznej przerwie wznawiam publikację postów na blogu. Na początek temat lekki, łatwy i przyjemny czyli generowanie i podstawowa analiza sygnałów losowych. Pokaże Wam trzy sposoby na uzyskanie liczb o danym rozkładzie prawdopodobieństwa oraz podstawowe narzędzia do analizy takich liczb. Następne wpisy na blogu będą rozwinięciem tego tematu oraz kontynuacją wcześniej rozpoczętych wątków, takich jak programowanie aparatury pomiarowej. Spodziewajcie się również nowych zagadnień z metod numerycznych!

W poście poświęconym badaniom symulacyjnym wspominałem o tym, że syntetycznie generowane sygnały, pełnią ważną rolę np. w testowaniu algorytmów. W tym samym wpisie, omówiłem zasady związane z poprawnym generowaniem wektora czasu i przedstawiłem podstawy tworzenia sygnałów zdeterminowanych, takich jak np. sygnał sinusoidalny. Tym razem zajmę się generacją i analizą sygnałów losowych. W tym miejscu dwa słowa wstępu teoretycznego: o ile w przypadku sygnałów zdeterminowanych ich wartości można jednoznacznie obliczyć dla danej chwili czasu, to dla sygnałów losowych jest to niemożliwe. Nie da się przewidzieć ani obliczyć jaką wartość w danej chwili przyjmie sygnał losowy. Można jedynie, na podstawie odpowiednio długiej obserwacji sygnału, ocenić jakie jest prawdopodobieństwo wystąpienia danej wartości. Charakterystyką, która obrazuje rozkład prawdopodobieństwa wystąpienia wartości w sygnale jest funkcja gęstości prawdopodobieństwa.

Sygnałami losowymi w układach fizycznych są wszelkiego rodzaju szumy, zakłócenia oraz błędy pomiarowe. Przykładem może być szum cieplny w rezystorze, szum elektromagnetyczny tła w danym paśmie częstotliwości czy błędy wnoszone do pomiaru przez zakłócenia oraz niedoskonałości aparatury pomiarowej. Charakter losowy często mają też wszelkiego rodzaju drgania, na przykład koła pojazdu poruszającego się po chropowatej nawierzchni drogi. Na poniższym rysunku przedstawiono realizację dwóch sygnałów losowych oraz ich funkcje prawdopodobieństwa.

MATLAB oferuje trzy sposoby generowania liczb pseudolosowych:

  • przez użycie pojedynczych funkcji,
  • przez zastosowanie obiektów typu Probability Distribution,
  • przez użycie aplikacji z interfejsem użytkownika.

Wybór metody zależy od celu naszej pracy oraz stopnia złożoności programu. Użycie pojedynczych funkcji jest stosunkowo najprostszym rozwiązaniem, jednak mało uniwersalnym i niekoniecznie wygodnym w przypadku skomplikowanych programów. Programowanie z zastosowaniem obiektów typu Probability Dustribution daje dostęp do szeregu funkcji, które ułatwiają analizę danych o charakterze losowym poprzez automatyzację pewnych operacji. Z kolei gotowe aplikacje są rozwiązaniem typu ‘All-in-one’ jednak nie nadają się do ich wykorzystania w klasycznych programach. Jest to rozwiązanie raczej dla początkujących użytkowników.

Należy zaznaczyć, ze liczby generowane przez komputer nie są losowe sensu sticte lecz pseudolosowe, gdyż generatory syntetyczne cechuje występowanie w liczbach okresu. Niemniej w większości zastosowań inżynierskich, cecha ta nie ma wpływu na wyniki obliczeń.

MATLAB liczby pseudolosowe – podstawowe funkcje

MATLAB posiada dwie podstawowe funkcje służące do generowania liczb losowych. Pierwsza z nich to rand i generuje liczby o rozkładzie równomiernym z zakresu (0, 1). Druga funkcja generująca liczby o rozkładzie normalnym, o wartości oczekiwanej równej 0 i jednostkowym odchyleniu standardowym, nazywa się randn. Obydwa rozkłady mają fundamentalne znaczenie w statystyce, a generatory tych liczb, są używane do tworzenia zbiorów liczb o innych rozkładach.

Poniżej przedstawiono podstawowe składnie użycia generatorów liczb o rozkładzie równomiernym i normalnym. Rozkład równomierny ma dwa parametry określające granice przedziału generowanych liczb (a,b). Rozkład normalny, również jest opisany dwoma parametrami: wartością oczekiwaną u i odchyleniem standardowym s.


N = 100;    % liczba wierszy
M = 50;     % liczba kolumn

%% Liczby o rozkładzie równomiernym
a = -2;     % dolna granica przedziału generowanych liczb
b = 5;      % górna granica przedziału generowanych liczb

x = a + (b-a).*rand(N,M);


%% Liczby o rozkładzie normalnym (Gaussa)
u = 2;      % Wartość oczekiwana (o największym prawdopodobieństwie wystąpienia)
s = 1;      % Odchylenie standardowe (będące miarą rozrzutu generowanych wartości 
            % wokół wartości oczekiwanej)
           
y1 = s*randn(N,M) + u; 

Innym sposobem generowania liczb pseudolosowych jest użycie funkcji XXXrnd, gdzie za XXX należy wstawić skrót określający nazwę rozkładu prawdopodobieństwa generowanych liczb. Na przykład funkcja normrnd generuje liczby o rozkładzie normalnym, a exprnd liczby o rozkładzie wykładniczym. Poniższy przykład ilustruje użycie kilku funkcji generujących liczby pseudolosowe, a ich pełną listę znajdziecie w dokumentacji programu MATLAB.


N = 100;    % liczba wierszy
M = 50;     % liczba kolumn

%% Liczby o rozkładzie normalnym
u = 2;      % Wartość oczekiwana (o największym prawdopodobieństwie wystąpienia)
s = 1;      % Odchylenie standardowe (będące miarą rozrzutu generowanych wartości 
            % wokół wartości oczekiwanej)

y2 = normrnd(u,s,[N,M]);

%% Liczby o rozkładzie Chi-kwadrat
V = 3;      % Liczba stopni swobody (parametr rozkładu)
z = chi2rnd(V,[N,M]);

%% Liczby o rozkładzie Gamma
A = 5;      % Parametr kształtu rozkładu Gamma
B = 10;     % Parametr skali rozkładu Gamma

w = gamrnd(A,B,[N,M]);

MATLAB liczby pseudolosowe – obiekt Probability Distribution

W tym podejściu do generowania liczb pseudolosowych, pierwszym krokiem jest utworzenie obiektu wskazującego na rodzaj rozkładu oraz jego parametry. Obiekt Probability Distribution można utworzyć samemu za pomocą funkcji makedist, lub poprzez dopasowanie rozkładu do już istniejących danych pomiarowych funkcją fitdist. Tak utworzony obiekt, jest swego rodzaju referencją do operacji na rozkładach prawdopodobieństwa oraz do generowania liczb pseudolosowych. Podejście obiektowe daje więcej możliwości niż używanie pojedynczych funkcji i może być z łatwością wykorzystane do:

  • generowania liczb pseudolosowych,
  • analizowania funkcji gęstości prawdopodobieństwa oraz odpowiadającej jej dystrybuanty,
  • obliczania statystyk takich jak, wartość średnia, mediana, moda, itp.
  • wyznaczania przedziałów ufności parametrów rozkładu prawdopodobieństwa.

Posługiwanie się obiektami typu Probability Distribution, daje wiele możliwości. Poniżej znajduje się przykład generacji realizacji sygnału losowego oraz jego rozkładu prawdopodobieństwa.


N = 100;    % liczba wierszy
M = 50;     % liczba kolumn


% Utworzenie obiektu ‘Probability Distribution’
pd = makedist('Normal','mu',2,'sigma',1);   % rozkład Normalny
% pd = makedist('Rayleigh','b',2);            % rozkład Reyleigh'a

% Generowanie liczb dla obiektu pd
q = random(pd, [N, M]);
figure(1); subplot(211);
plot(q(:,1)); grid on; 
xlabel('Próbki'); ylabel('Wartość')

% Utworzony obiekt pd można wykorzystać np.: do narysowania rozkładu:
x_pdf = [-2:0.1:8];
y = pdf(pd,x_pdf);
subplot(212);
plot(x_pdf, y); grid on; 
xlabel('Wartośc zmiennej losowej'); ylabel('PDF')

Narzędzia oferowane przez program MATLAB w zakresie generowania i analizy sygnałów losowych, wykraczają daleko poza omówione funkcje. W następnych postach zajmę się szczegółowym omówieniem możliwości toolboxa Statistics and Machine Learning.

(Visited 5 235 times, 1 visits today)

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *