%% B2B31CZS - Cvičení 2
%% Úkoly:
%% Odhad autokorelační funkce - základní vlastnosti
% Určete autokorelační koeficienty signálu pomocí funkce xcorr.

help xcorr

% Vyzkoušejte si vliv různých nastavení normalizace ve funkci xcorr:
% None - Žádná normalizace
% Biased - "Vychýlený" odhad
% Unbiased - "Nevychýlený" odhad
% Coeff/Normalized - Normalizace pro jednotkovou hodnotu autokorelace v nulovém posunu
% ...na těchto signálech:

% 1) Sinusový signál: s1
f = 15; % Hz
fs = 200; % Hz
A = 1;
t = 1; % s

% 2) Bílý šum s normálním rozdělením: b1
P = 0.7; % Výkon
m = 0; % Stř. hodnota
s = 1; % Směrodatná odchylka
fs = 200; % Hz
t = 1; % s

% 3) Bílý šum s normálním rozdělením: b1
P = 0.7; % Výkon
m = 0; % Stř. hodnota
s = 1; % Směrodatná odchylka
fs = 200; % Hz
t = 10; % s

% 4) Směs s1 + stejnosměrná složka o amplitudě 0.8

% 5) Směs b1 + stejnosměrná složka o amplitudě 0.8

% Diskutujte různé vlastnosti těchto odhadů.
% Vykreslete si odhady autokorelační funkce pro směs signálu a šumu s1+b1 s hodnotami SNR = 0, 10 a -10dB.
%
%% Detekce periodicity signálu pomocí autokorelace
%% Hudební nástroje
% Určete výšku tónu různých hudebních nástrojů z následujících signálů pomocí hledání druhého hlavního maxima autokorelační funkce:
% cembalo_d_dur_2.wav
% fletna_d_dur_6.wav
% housle_d_dur_5.wav
% kytara_d_dur_1.wav
% piano_d_dur_4.wav
% varhany1_d_dur_3.wav
% varhany2_d_dur_8.wav
% POZN.: WAV-soubory načteme do MATLABu pomocí funkce 'audioread'. Jako druhý výstupní parametr této funkce získáme informaci o vzorkovacím kmitočtu, která je uložena v hlavičce WAV-souboru.

[sig, fs] = audioread("cembalo_d_dur_2.wav")

% Periodicitu analyzujte na krátkodobém segmentu o délce tlen=10 ms. (POZOR ‼ Nevybírejte segment ze začátku signálu, kde ještě signál většinou neobsahuje požadovaný tón. Začátek volte na vzorku č. 20000.)
% Vykreslete si časový průběh celého signálu
% Vykreslete si vyříznutý krátkodobý segment o délce 10ms, s ohledem na vzorkovací frekvenci signálu
% Vykreslete si průběh autokorelační funkce krátkodobého segmentu
% Odhadněte z průběhu autokorelační funkce základní frekvenci a určete výšku tohoto tónu v Hz
% Vyzkoušejte jaký vliv má délka vybraného segmentu na průběh autokorelační funkce a odhad výšky tónu.
% Podívejte se také na vliv centrování signálu (odstranění nenulové střední hodnoty) pro odhad výšky tónu, zejména pro signál kytara_d_dur_1.wav.
%
%% Lidská řeč
% Určete základní periodu znělých hlásek řečového signálu (výška hlasu, intonace) pomocí hledání druhého hlavního maxima autokorelační funkce.
% Pracujte se signály vf3.bin a vm3.bin, jejichž vzorkovací kmitočet je fs = 16000 Hz (pro načtení do MATLABu použijte funkci loadbin.m)

sp1 = loadbin('vm3.bin');

% Pro oba výše uvedené signály:
% Vykreslete časový průběh celého dostupného záznamu
% Vykreslete analyzovaný segment délky 512 vzorků z počátku záznamu
% Vykreslete průběh autokorelační funkce pro segment o délce 512 vzorků od počátku záznamu
% Z odhadu autokorelační funkce interaktivně odhadněte základní periodu a určete výšku hlasu v Hz
% Opakujte případně pro vf0.bin, vm0.bin, vf1.bin, vm1.bin, vf2.bin, vm2.bin, vf4.bin, vm4.bin, vf5.bin, vm5.bin, vf6.bin, vm6.bin, vf7.bin, vm7.bin, vf8.bin, vm8.bin, vf9.bin, vm9.bin, a diskutujte problémy této detekce.
%
%% Bonus: Odhad zpoždění dálkoměrného signálu
% V souboru sigX.gps (viz signaly_ML_odhad_zpozdeni) jsou uloženy vzorky dálkoměrného signálu GPS měřeného za přítomnosti bílého gaussovského šumu.
% Použitá pseudonáhodná posloupnost (PRN) je uložena v souboru prn1.txt.
% Uvažujte čipovou rychlost fc = 1.023*10^6 chip/s  (fs = 1.023 MHz).
% Měřený signál byl vzorkován s kmitočtem fsa = 65 MHz.
% Délka signálu ze souboru sigX.gps obsahuje právě jednu periodu pseudonáhodné posloupnosti.
% Pro naměřený signál sig5.gps určete zpoždění a měřenou vzdálenost v následujících krocích:
% Vykreslete vygenerovanou PRN posloupnost prn1.txt
% Vykreslete převzrokovanou repliku PRN posloupnosti stejné délky, jako je měřený signál
% Vykreslete naměřený přijatý signál sig5.gps
% Vykreslete průběh CCF mezi naměřeným signálem a vysílanou replikou PRN signálu
% Z maxima CCF interaktivně odhadněte pozici maxima a následně zpoždění naměřeného signálu
%
%% Bonus: Zpoždění mezi kanály
% Pokuste se detekovat zpoždění mezi řečovými signály ve dvou kanálech pomocí vzájemné korelační funkce. Jedná se o signály vzorkované kmitočtem 8 kHz.
% Čisté řečové signály: s0001-l.bin a s0001-r.bin
% Řeč se šumovým pozadím: x0002-l.bin a x0002-r.bin
% POZN.: Vzájemnou korelaci počítejte opět z krátkých segmentů o délce 256 (příp. 512) vzorků, které vybírejte z různých úseků analyzované promluvy, kde je řečová aktivita.