% ZZS - 4.cvičení: Vzorkovací teorém, aliasing, % analýza signálů v časové oblasti % R.Čmejla, 13.října 2014 % funkce: lin_frekv.m, kvant.m, rms.m, zcr.m % signály: tom.wav, why11.wav % ----------------------------------------------------------- % PŘÍKLAD 1: Aliasing - chirp signál % % „Chirp“ signálem se nazývají průběhy , jejichž frekvence se % mění s časem. % Napište funkci x=lin_frekv(f1,f2,doba,fs) generující lineární % chirp signál a ověřte ji při generování signálu s frekvencí % od 3800 Hz do 80 Hz (v časové oblasti, ve spektrogramu % i poslechem) % function x = lin_frekv( f1, f2, doba, fs) % lin_frekv generuje linearni chirp signal % % f1 ... pocatecni frekvence % f2 ... konecna frekvence % doba ... celkove trvani v sekundach % fs ... vzorkovaci frekvence (default je 8 kHz) if( nargin < 4) fs = 8000; end t = 0:1/fs:doba-1/fs; x = sin(2*pi*((f2 - f1)/(2*doba).*t.*t + f1*t)); % ----------------------------------------------------------- % PŘÍKLAD 2: Aliasing - chirp signál % % Generujte, zobrazte a poslechněte si chirp signál % % a) f1=200 Hz f2=2000 Hz 2 sekundy fs=8000Hz % b) f1=200 Hz f2=2000 Hz 2 sekundy fs=4000Hz % c) f1=200 Hz f2=2000 Hz 2 sekundy fs=2000Hz % d) f1=200 Hz f2=2000 Hz 2 sekundy fs=1000Hz % ----------------------------------------------------------- % PŘÍKLAD 3: Aliasing - audio signal % Vysvětlete rozdíly mezi signály y1 a y2 [x,fs]=wavread('tom'); % fs = 44100 Hz okno = 512; prekryti = 500; NFFT = 1024; DF = 20; % decimacni faktor y1 = x(1:DF:end); % fs=2205 Hz pro DF = 20 y2 = decimate(x,20); % ----------------------------------------------------------- % DOMÁCÍ ÚKOL % PŘÍKLAD 4: Kvantování sinusovky % Zobrazte 1 periodu kvantované sinusovky % a) 1-bit % b) 2-bity % c) 3-bity fs = 22050; f0 = 50; doba = .02; % ----------------------------------------------------------- kvant.m function y=kvant(x,b) y = (round(2^(b-1) *x+.5)-.5)/2^(b-1); % ----------------------------------------------------------- % PŘÍKLAD 5: Kvantování - audio signál % Zobrazte a poslouchejte "Tom's dinner" při různém kvantování [x,fs]=wavread('tom'); % ----------------------------------------------------------- % PŘÍKLAD 6: Analýza řečového signálu v čase % Zobrazte průběh RMS a počet průchodů nulou ZCR v řečovém signálu % Detekujte segmenty řeč/pauza delka_okna = 512; [signal,fs] = wavread('why11.wav'); signal = signal-mean(signal); sig=signal./max(abs(signal)); N = length(sig); posun_okna = 256; % ----------------------------------------------------------- % PŘÍKLAD 7: Analýza řečového signálu v čase % Pomocí autokorelační funkce detekujte segmenty znělý/neznělý % a základní frekvenci v řečovém signálu delka_okna = 512; start_index = 20; % horni limit pro F0 fmax=fs/start_index prah = .6; % prah pro rozhodnuti znely/neznely F0 = []; zn = 0; % init [signal,fs] = wavread('why11.wav'); signal=signal(:); signal = signal-mean(signal); sig=signal./max(abs(signal)); N = length(sig); posun_okna = 256; % ----------------------------------------------------------- function out=RMS(segment); out = sqrt(sum(segment.^2)./length(segment)); % rms_dB = 20*log10(RMS); function out=ZCR(segment,fs); zcr = sum(abs(diff(segment>0))); % normovana hodnota poctu pruchodu nulou out = zcr*fs/(2*length(segment));