%% B2B31CZS cvičení 13 - Hilbertova transformace (HT), Výpočet okamžité obálky signálu
%% Výpočet obálky signálu pomocí Hilbertovy transformace a pomocí klouzavých průměrů
% Počítejte obálku signálu pro následující zpracovávané signály:
% s1 ... řečový signál speech_16k_HT.cs0 (vzorkovaný kmitočtem fs=16 kHz, binární formát bez hlavičky, pro načtení do MATLABu použijte funkci loadbin.m),
% s2 ... sinusovka s konstantní amplitudou s následujícími parametry f=50 Hz, fs=500 Hz, délka Nx=100 vzorků.
% s3 ... sinusovka s exponenciální amplitudou (modulovaná) s následujícími parametry f=50 Hz, fs=500 Hz, délka Nx=100 vzorků, koeficient exponenciálního poklesu amplitudy a=0\ldotp 95, s_3 \left\lbrack n\right\rbrack =a^n \cdot \sin \left(2\pi f\cdot \frac{n}{f_s }\right).

% Signál s1 - řečový signál
s1 = loadbin("speech_16k_HT.cs0");
fs = 16000; % Hz


% Signál s2 - sinus s konstantní amplitudou
f = 50; % Hz
fs = 500; % Hz
Nx = 100;


% Signál s3 - modulovaný sinus
f = 50; % Hz
fs = 500; % Hz
Nx = 100;
a = 0.95;


% Vypočtěte analytický signál pomocí Hilbertova transformátoru, tj. \hat{s} \left\lbrack n\right\rbrack =s\left\lbrack n\right\rbrack +j\cdot \tilde{s} \left\lbrack n\right\rbrack (v MATLABu funkce hilbert. POZOR. Funkce vrací přímo analytický signál!).
% Určete okamžitou obálku signálu z analytického signálu, tj. s_{\mathrm{env}} \left\lbrack n\right\rbrack =\sqrt{s^2 \left\lbrack n\right\rbrack +{\tilde{s} }^2 \left\lbrack n\right\rbrack }, tj. z absolutní hodnoty analytického signálu.
% Spočítejte obálku také na základě klouzavých průměru okamžitého výkonu signálu. Počítejte s řádem MA filtru M=10,30,100 vzorků. Vysvětlete pozorované výsledky.

% Výpočet analytických signálů a obálek


% Pro signály s1, s2, s3 zobrazte:
% Časový průběh analyzovaného signálu
% Okamžitou obálku počítanou na základě HT včetně reálné i imaginární složky analytického signálu
% Obálku počítanou na základě MA filtru

% Zobrazení výsledků


%
%% Amplitudová demodulace pomocí Hilbertovy transformace.
% Vezměte jako nízkofrekvenční (NF) užitečný signál x\left\lbrack n\right\rbrack následující krátký úsek řečového signálu speech_16k_HT_frame.cs0 (vzorkovací kmitočet NF užitečného signálu je  f_{s_x } =16\mathrm{kHz}).
% Zvolte vzorkovací kmitočet VF signálu f_{s_a } =10\cdot f_{s_x }.
% Převzorkujte signál x\left\lbrack n\right\rbrack na vzorkovací kmitočet f_{s_a }, tj. signál x_a \left\lbrack n\right\rbrack (funkce resample).
% Vygenerujte nosný signál, tj. kosinusovku o kmitočtu f_n =\frac{f_{s_a } }{8} stejné délky jako převzorkovaný signál x_a \left\lbrack n\right\rbrack.
% Vytvořte modulovaný signál podle vztahu pro amplitudovou modulaci, tj. x_{\mathrm{am}} \left(t\right)=\cos \left(2\pi f_n \cdot t\right)\cdot \left(1+k\cdot x_a \left(t\right)\right). Hloubku modulace volte k=0\ldotp 8.
% Proveďte demodulaci signálu x_{\mathrm{am}} \left\lbrack n\right\rbrack na základě výpočtu okamžité obálky pomocí Hilbertovy transformace.
% Srovnejte demodulovaný signál s původním NF signálem.

% Vytvoření signálů a modulace
x = loadbin("speech_16k_HT_frame.cs0");
fsx = 16000; % Hz


% Zobrazte:
% NF řečový signál x\left\lbrack n\right\rbrack
% Převzorkovaný řečový signál x_a \left\lbrack n\right\rbrack
% VF nosný harmonický signál s\left\lbrack n\right\rbrack
% AM modulovaný VF signál x_{\mathrm{am}} \left\lbrack n\right\rbrack
% Okamžitou obálku signálu x_{\mathrm{am}} \left\lbrack n\right\rbrack
% Demodulovaný signál, tj. podvzorkovanou okamžitou obálku modulovaného VF signálu

% Zobrazení výsledků


% Srovnejte také amplitudová spektra signálů x[n], xa[n], s[n] a x_am[n].