%% B2B31CZS - Cvičení 1
%% Úkoly:
%% Generování deterministických signálů a směsí s požadovaným odstupem
% Generujte periodický sinusový signál x\;=A\cdot \sin \left(2\pi f\cdot t\right), tj. sinusovku s následujícími parametry:

A = 1; % Amplituda
f = 500; % Frekvence 500 Hz, nulový fázový posuv
fs = 8000; % Vzorkovací frekvence 8kHz, tedy 8000 vzorků na jednu sekundu signálu
t0 = 0.1; % Délka trvání signálu v sekundách, tedy 100ms

% Nápověda: Pro vytvoření časového vektoru můžete využít funkci linspace. 🙂
% Pozorujte vzorky nagenerovaných signálů různými způsoby zobrazení pomocí funkce plot resp. stem.
% Nápovědu ke všem funkcím zobrazíte pomocí příkazu help a jména funkce, např.:

help plot
help stem

% Pro vytvoření okénka s grafem použijte funkci figure.
% K vytvoření popisků os a titulky použijte funkce xlabel, ylabel a title.
% Mřížku na pozadí grafu zobrazíte příkazem grid on.
% Legendu lze zobrazit pomocí funkce legend.
% Pro zobrazení více grafů v jednom okně použijte kombinaci funkcí tiledlayout a nexttile, viz příklady zde.
% Generujte sinusovky různých frekvencí na různých vzorkovacích kmitočtech a porovnejte výsledky v jednom obrázku.
% fs = 8000 Hz, f = 2000 Hz
% fs = 8000 Hz, f = 50 Hz
% fs = 8000 Hz, f = 51.8 Hz
% fs = 8000 Hz, f = 2123 Hz
% fs = 1000 Hz, f = 250 Hz
%
%% Generování bílého šumu
% Generujte řádkový vektor obsahující bílý šum délky N = 1000 vzorků s následujícím rozložením:
% Rovnoměrné pravděpodobnostní rozložení (Uniform distribution). Použijte funkci rand.
% Normální (Gaussovské) pravděpodobnostní rozložení (Normal/Gaussian distribution). Použijte funkce randn.
% Sledujte statistické rozložení hodnot obou generovaných signálů. Použijte funkci histogram a vyzkoušejte jak to vypadá, když zvolíte různé počty binů.

% Nbins = ?;
histogram(signal,Nbins)

% Podívejte se, jak budou histogramy signálů vypadat pro různě dlouhé délky generovaných signálů (různá N).

% N = 10; N = 50; N = 100; ...

% Změřte základní parametry - deskriptivní statistiky - obou vygenerovaných signálů:
% Střední hodnotu (funkce mean)
% Medián (funkce median)
% Směrodatnou odchylku a rozptyl (funkce std a var)
% Výkon (kvadrát vzorků + funkce mean)

help mean
help median
help std
help var
sig_sqr = sig.^2; % == sig.*sig

% Pokud stíháte, popřemýšlejte, jak byste zjistili modus (ang. mode) u vámi generovaných signálů.
% Vykreslete si vypočtené hodnoty do obrázku s histogramy signálů. Pro vykreslení můžete použít např. funkce line nebo scatter.

help line
help scatter

%
% Generujte bílý šum s následujícími parametry:
% Normální rozložení - střední hodnota = 0, rozptyl = 0.1
% Rovnoměrné rozložení - střední hodnota = 0, rozptyl = 0.1

mu = 0; 
s = 0.1;
sigma = sqrt(rozptyl); % Odmocnina

% Vykreslete si rozložení hodnot (histogram) součtu dvou či více náhodných signálů (centrální limitní věta):
% Obou s normálním rozložením
% Obou s rovnoměrným rozložením
% Šumu s rovnoměrným rozložením a Gaussovského šumu s rozptylem 0.01
%
%% Generování deterministických signálů a směsí s požadovaným odstupem.
% Generujte periodický sinusový signál x\;=A\cdot \sin \left(2\pi f\cdot t\right), tj. sinusovku identicky jako v prvním bodě, tedy:

A = 1; % Amplituda
f = 500; % Frekvence 500 Hz, nulový fázový posuv
fs = 8000; % Vzorkovací frekvence 8kHz, tedy 8000 vzorků na jednu sekundu signálu
t0 = 0.1; % Délka trvání signálu v sekundách, tedy 100ms

% Načtěte ze souboru řečový signál vf3.bin, jehož vzorkovací kmitočet je fs = 16000 Hz. Pro načtení signálu do MATLABu použijte funkci loadbin.m, kterou si stáhněte z Moodle/Webu Noel a uložte do adresáře, kde máte uložen tento skript.

signal = loadbin("./vf3.bin");
fs = 16000; % Vzorkovací frekvence v Hz

% Generujte Gaussovský šum s následujícími parametry:
% Střední hodnota \mu = 0
% Rozptyl \sigma^2 = 0.4
% Vzorkovací frekvence fs = 8000 Hz
% Délka signálu t0 = 0.1s (tj. se stejnou dobou trvání, jako signál výše)

mu = 0;
s = 0.4;
fs = 8000;
t0 = 0.1;

% Sečtěte signály a vytvořte tak směsi:
% Sinusový signál a šum
% Řečový signál a šum
% U obou směsí vypočtěte odstup signálu od šumu SNR (Signal-to-Noise-Ratio).
% Modifikujte výkon šumu při vytvoření směsí tak, aby bylo dosaženo následujících hodnot SNR: SNR = -5, 0, 5, 10, 20.
% Nápověda: Podívejte se na příklady na stránce nápovědy pro MATLABovskou funkci snr.