%% 1) Komendy ogólne
clear all;            % S³u¿y do wyczyszczenia workspace'a, czyli wszystkich zdefiniowanych zmiennych
                      % Nale¿y u¿ywaæ go na pocz¹tku nowego skryptu, lub na pocz¹tku "rozdzia³u" skryptu
close all;            % S³u¿y do zamkniêcia wszystkich okienek – inaczej trzeba zamykaæ je rêcznie.
 
 
%% 2) Definiowanie osi czasu.
% Parametry:
t_max = 20;            % Czas trwania sygna³u. Wyra¿ony w sekundach.
fp = 150;            % Czêstotliwoœæ próbkowania, iloœæ próbek na sekundê. Wyra¿ona w hercach.
%N = 1001;            % Iloœæ próbek w ca³ym sygnale. Nale¿y pamiêtaæ o próbce "numer 0".
 
% Wystarczy zdefiniowaæ dwie spoœród powy¿szych zmiennych. Trzeci¹ mo¿na wyznaczyæ:
N = (t_max * fp) + 1 % Liczba próbek.
t_max = (N-1)/fp;     % Czas trwania sygna³u.
fp = (N-1)/t_max;     % Czêstotliwoœæ próbkowania.

 
 
%% 3) Metody generowania osi.
% Na PPSach definiowane s¹ dwie podstawowe osie: czasu oraz czêstotliwoœci.
% Pojawiaj¹ siê te¿ inne, np. oœ przesuniêcia (wyra¿ona w sekundach lub iloœci próbek).
% Przy tworzeniu ka¿dego sygna³u, widma czy charakterystyki nale¿y zastanowiæ siê, czy zosta³a zdefiniowana odpowiednia oœ.
% Nale¿y wybraæ tak¹ metodê, jaka jest dla Ciebie najwygodniejsza, ale warto pamiêtaæ o wszystkich.
 
t = 0 : 1/fp : (N-1)/fp;   % Podstawowa metoda generowania osi czasu.
%   ^   ^^^^   ^^^^^^^^^   % Komentarze czytaj od do³u do góry. ;)
%   |    |          \ ... do ostatniej chwili w sygnale.
%   |    |     ^^^^  ^^^
%   |    |      |     \ (Czêstotliwoœæ próbkowania)
%   |    |       \ (Ostatni indeks próbki - jedna zosta³a zu¿yta na "chwilê zero".)
%   |     \ ... co jeden okres próbkowania...
%    \ Tablica wartoœci od zera...
 
t = 0 : 1/fp : t_max;      % To samo, co powy¿ej, ale z wyliczonym maksymalnym czasem.
 
t = (0:N-1) ./ fp;         % Najbardziej zwiêz³a forma generowania osi czasu. Niewydajna obliczeniowo.
%   ^^^^^^^ ^^ ^^
%      |    |   \ ... przez czêstotliwoœæ próbkowania.
%      |     \ ... podzielony... (Kropka oznacza, ¿e wykonujemy operacjê na próbkach wektora, a nie na ca³ym wektorze.)
%       \ Wektor z liczbami naturalnymi od 0 do N-1 wartoœci...
 
t = linspace(0,t_max,N);   % Funkcja linespace() najczêœciej jest wykorzystywana do generowania osi czêstotliwoœci.
%   ^^^^^^^^ ^ ^^^^^ ^
%      |     |   |   \ Iloœæ próbek.
%      |     |    \ Wartoœæ maksymalna.
%      |      \ Wartoœæ pocz¹tkowa. W tym przypadku to chwila "0", ale mo¿e to byæ np. chwila rozpoczêcia siê fonemu, lub przesuniêcie.
%       \ Nazwa funkcji. Generuje dok³adnie N równomiernie roz³o¿onych wartoœci, miêdzy 0 a t_max.
 
 
%% 4) Najwa¿niejsze rodzaje sygna³ów
% Definiuj¹c parametry sygna³u warto dodawaæ indeks (np. "_s"), aby póŸniej nie by³o kolizji oznaczeñ.
 
%% 4.1) Szum bia³y, gaussowki, normalny.
% Podstawowy rodzaj szumu. W razie w¹tpliwoœci u¿yj w³aœnie jego.
W_1 = 3; % Wariancja/sigma. Pe³ni rolê pseudoamplitudy. Zgodnie z prawem trzech sigm 99.8% wartoœci bêdzie le¿a³o nie dalej, ni¿ w odleg³oœci 3*W_1 od wartoœci œredniej.
sr_1 = 9; % Wartoœæ œrednia sygna³u.
 
s_1 = W_1*randn(1,N) + sr_1;
%     ^^^ ^^^^^ ^^^    ^^^^
%      |    |    |       \ Wartoœæ œrednia.
%      |    |    \ Argumenty funkcji: 1 wiersz, N kolumn. Pomijaj¹c pierwszy argument wygenerujemy macierz rozmiaru N x N.
%      |     \ Funkcja generuj¹ca losowe wartoœci o rozk³adzie normalnym. Posiada literkê "n".
%       \ Wariancja.
 
%% 4.2) Szum jednorodny.
% Dodatkowy rodzaj szumu, s³u¿¹cy najczêœciej do symulowania b³êdu kwantyzacji.
A_2 = 3; % Pseudoamplituda. Odleg³oœæ miêdzy skrajnymi wartoœciami szumu.
sr_2 = 6; % Wartoœæ œrednia.
 
s_2 = A_2*(rand(1,N)-1/2) + sr_2; %
%     ^^^  ^^^^ ^^^ ^^^^    ^^^^
%      |     |   |   |        \ Wartoœæ œrednia.
%      |     |   |    \ Unormowanie wartoœci œredniej szumu.
%      |     |   |      (Standardowo rand() ma wartoœæ oczekiwan¹ równ¹ 1/2, a wygodniej jest, przesuniemy j¹ do 0.)
%      |     |   \ Argumenty funkcji: 1 wiersz, N kolumn.
%      |      \ Funkcja generuj¹ca losowe wartoœci o rozk³adzie jednorodnym [0,1]. Nie posiada literki "n".
%       \ Pseudoamplituda.
 
%% 4.3) Sinusoida.
% Parametry sinusoid:
A_3 = 5; % Amplituda, czyli wychylenie od zera.
f_3 = 24; % Czêstotliwoœæ sinusoidy. Musi byæ mniejsza od po³owy czêstotliwoœci próbkowania, inaczej pojawi siê aliasing.
fi_3 = pi/4; % Przesuniêcie fazowe. Wartoœæ wyra¿ona w radianach, czyli np. [0,2*pi] lub [-pi,pi]
 
s_3 = A_3*cos(t*2*pi*f_3+fi_3);
%     ^^^ ^^^ ^ ^^^^ ^^^ ^^^^
%      |   |  |  |    |    \ Przesuniêcie fazowe.
%      |   |  |  |     \ Czêstotliwoœæ.
%      |   |  |   \ Przemno¿enie osi czasu przez 2*pi, ¿eby unormowaæ czêstotliwoœæ (móc wyra¿aæ j¹ w wygodnych dla cz³owieka hercach, a nie radianach).
%      |   |   \ Oœ czasu.
%      |    \ Jeœli prowadz¹cy nie zwraca na to uwagi, lepiej u¿ywaæ funkcji cos(), a nie sin().
%      |      Wynika to z w³asnoœci transformat oraz ze wzoru Eulera: e^(i*x) = cos(x) + i*sin(x)
%       \ Amplituda.
 
% Sinusoida o zmiennej czêstotliwoœci.
% Ten sygna³ na PPS jest najczêœciej wykorzystywany do testowania filtrów.
% Zachêcam pos³uchaæ, jak brzmi ten sygna³ na stronie: https://en.wikipedia.org/wiki/Chirp
% Parametry:
f0 = 1;                      % Czêstotliwoœæ dla czasu 0s.
t1 = t_max;                  % Koniec osi czasu.
f1 = 50;                     % Czêstotliwoœæ dla czasu t1.
 
s_4 = chirp(t, f0, t1, f1);  % Sinusoida o liniowo zmieniaj¹cej siê czêstotliwoœci.
%     ^^^^^ ^  ^^  ^^  ^^
%       |   |  |   |    \ Czêstotliwoœæ w zadanej chwili.
%       |   |  |    \ Wybrana w dowolny sposób chwila. Najwygodniej podaæ czas trwania sygna³u (ostatni moment).
%       |   |   \ Czêstotliwoœæ w chwili 0.
%       |    \ Oœ czasu. Jako jedyna jest wektorem, wszystkie pozosta³e zmienne s¹ liczbami.
%        \ Nazwa funkcji. Przyjmuje 4 argumenty.
%plot (s_3);

sin_1=A_3*cos(t*2*pi*f_3+fi_3)
