% ke spusteni tohoto programu potrebujete funkce readl16 a writel16 % z http://www.fit.vutbr.cz/~cernocky/speech/matlab % zprasime recovy signal 1000 Hz a pak ho prefiltrujeme ... s = readl16('test.l16',0,inf); s = s/32768; soundsc(s); L = length (s); % vyrobime 50Hz: n50 = sin (2*pi*1000/8000 * (1:L)); soundsc(n50); % secteme y = s + n50; soundsc(y); % jeste to zapiseme do souboru, ktery pak budeme filtrovat pomoci % programu v c ... yout = y / max(abs(y)); writel16 ('y',yout * 32767) % vyrobime filtr Wp = [900 1100] / 4000; % pass-band Ws = [950 1050] / 4000; % stop-band Rp = 3; % zvlneni pass Rs = 40; % potlaceni stop [N, Wn] = ellipord(Wp, Ws, Rp, Rs) [B,A] = ellip(N,Rp,Rs,Wn,'stop') % jakou ma frekv. char ? freqz (B,A,512,8000); %slidify (1,3,1,10) % a co poly a nuly ? zplane (B,A) % prefiltrovat a zahrat vystup: out = filter (B,A,y); soundsc (out); % ukaz koeficienty: format long A B %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ted uz ne v Matlabu, ale na prikazove radce: # ve Windous neumim prehravat lin-soubory (GoldWave, CoolEdit ?) # v Linuxu takhle: # originalni play -t .raw -f s -s w -r 8000 test.l16 # zacuneny play -t .raw -f s -s w -r 8000 y.l16 # filtrujeme filter y.l16 out.l16 # a zahrajeme si vysledek: play -t .raw -f s -s w -r 8000 out.l16