A2B3SMS 2. PŘEDNÁŠKA 9. října 27 Číslicové signály Aperiodické Periodické Aplikace Zvuky telefonu Hudební stupnice Tónová volba Tabulková (wavetable) syntéza Tabulkový oscilátor Interpolace Pitch posunutí Příklad tabulkové syntézy banja
Signály Signály - funkce jedné nebo více nezávisle proměnných, které nesou informaci o podstatě a vlastnostech svého zdroje (nebo informaci záměrně do signálu zakódovanou). Příklady signálů Co není signál?
Číslicové signály Neperiodické Periodické, harmonické
x(t) Exponenciální signál I x( t) a e bt x[ n] a c n.8 x(t) = X e b t t=:.:8; a=.8; b=-.5; x_t=a*exp(b*t);.6.4.2 2 3 4 5 6 7 8 t.8.6.4.2 2 3 4 5 6 7 8 9
Exponenciální signál I x( t) a e bt x[ n] a c n doba=8; fs=; a=.8; tau=2; t=:/fs:doba-/fs; x_t=a*exp(-t/tau); pb=; n=:pb; c=exp(-doba/(pb*tau)); x_n=a*c.^n; % c=.673
Exponenciální signál II.5 a*c n < c < (c=,67) 2 3 4 5 6 7 8 9.5 c = 2 3 4 5 6 7 8 9 5 c > (c=,67) 5 2 3 4 5 6 7 8 9
Exponenciální signál III a*c n > c > - (c=-,67) - 2 3 4 5 6 7 8 9 c = - - 2 3 4 5 6 7 8 9 2 c < - (c=-,67) - 2 3 4 5 6 7 8 9
Jednotkový skok u( t),, t t u[ n],, n n t=-2:.:6; x_t = [t >= ];.5-2 - 2 3 4 5 6.5-2 - 2 3 4 5 6
Jednotkový skok u( t),, t t u[ n],, n n t=-2:.:6; x_t = [t >= ];.5-2 - 2 3 4 5 6 n=-2:6; x_n = [n >= ];.5-2 - 2 3 4 5 6
Jednotkový impulz (Dirac) [ n],, n n.8 n=-5:; x_n = [n == ];.6.4.2 -.2-5 5
Obdélník square(om*t, delta) stejné jako generování sin() delta % z periody, které má být kladné = 5% >> o_t = square(2*pi*f*t); >> o2_t = square(2*pi*f*t,25); - >> o3_t = square(2*pi*f*t,75);.2.4.6.8..2.4.6.8.2 = 25% -.2.4.6.8..2.4.6.8.2 = 75% -.2.4.6.8..2.4.6.8.2
Obdélník square(om*t, delta) stejné jako generování sin() delta % z periody, které má být kladné >> o_t = square(2*pi*f*t); >> o2_t = square(2*pi*f*t,25); >> o3_t = square(2*pi*f*t,75); >> x_min =-.; x_max =.2; >> y_min =-.2; y_max =.2; >> axis([x_min x_max y_min y_max]) - - = 5%.2.4.6.8..2.4.6.8.2 = 25%.2.4.6.8..2.4.6.8.2 = 75% -.2.4.6.8..2.4.6.8.2
Pila sawtooth(om*t, DELTA) Stejné jako generování sin() DELTA maximum na intervalu.. = >> p_t = sawtooth(2*pi*f*t,); -.2.4.6.8..2.4.6.8.2 =,5 -.2.4.6.8..2.4.6.8.2 = -.2.4.6.8..2.4.6.8.2
Pila sawtooth(om*t, DELTA) Stejné jako generování sin() DELTA maximum na intervalu.. = >> p_t = sawtooth(2*pi*f*t,); >> p2_t = sawtooth(2*pi*f*t,.5); - -.2.4.6.8..2.4.6.8.2 =,5.2.4.6.8..2.4.6.8.2 = -.2.4.6.8..2.4.6.8.2
Pila sawtooth(om*t, DELTA) Stejné jako generování sin() DELTA maximum na intervalu.. = >> p_t = sawtooth(2*pi*f*t,); >> p2_t = sawtooth(2*pi*f*t,.5); >> p3_t = sawtooth(2*pi*f*t,); - -.2.4.6.8..2.4.6.8.2 =,5.2.4.6.8..2.4.6.8.2 = -.2.4.6.8..2.4.6.8.2
---> x[n] Analogově-číslicový převod.8.6.4 T=/f.2 -.2 -.4 Ts=/fs -.6 -.8-2 4 6 8 2 4 6 8 2 ---> n
Harmonický signál amplituda x( t) X sin(2 f t ) m fáze [rad] čas [s] frekvence [Hz]
Harmonický signál x( t) X X sin(2 f t m )????
Harmonický signál x( t) X X sin(2 f t m ),95 5,8
Generování harmonického signálu v MATLABu Generujme 2 ms harmonického signálu o frekvenci 44 Hz a vzorkovací frekvenci 8 khz Generujme 4 periody signálu o frekvenci 44 Hz a vzorkovací frekvenci 8 khz Generujme 25 vzorků signálu o frekvenci 44 Hz a vzorkovací frekvenci 8 khz
Generování harmonického signálu v MATLABu I Generujme 2 ms harmonického signálu o frekvenci 44 Hz a vzorkovací frekvenci 8 khz >> f=44; fs=8; doba=.2; >> t = :/fs:doba-/fs; >> x_t = sin(2*pi*f*t); >> n = ::fs*doba-; >> x_n = sin(2*pi*f*n/fs);.5 -.5 -.2.4.6.8..2.4.6.8.2 ---> t [sekundy].5 -.5-2 4 6 8 2 4 6 ---> n [vzorky]
Generování harmonického signálu v MATLABu II Generujme 4 periody signálu o frekvenci 44 Hz a vzorkovací frekvenci 8 khz >> f=44; fs=8; pp=4; >> t2 = :/fs:pp/f-/fs; >> x2_t = sin(2*pi*f*t2); >> n2 = ::pp*fs/f-; >> x2_n = sin(2*pi*f*n2/fs);.5 -.5 -..2.3.4.5.6.7.8.9. ---> t [sekundy].5 -.5-2 3 4 5 6 7 8 ---> n [vzorky]
Generování harmonického signálu v MATLABu III Generujme 25 vzorků signálu o frekvenci 44 Hz a vzorkovací frekvenci 8 khz >> f=44; fs=8; N=25; >> t3 = :/fs:n/fs-/fs; >> x3_t = sin(2*pi*f*t3);.5 >> n3 = ::N-; >> x3_n = sin(2*pi*f*n3/fs); -.5.5 -.5 -.5.5 2 2.5 3 ---> t [sekundy] x -3-5 5 2 25 ---> n [vzorky]
Zvuky telefonu % a) Oznamovací tón: F = [425 425 ]; [Hz] % T = [.33.33.66.66 ]; [s] % % b) Vyzváněcí tón: F = [425 ]; [Hz] % T = [ 3]; [s] % % c) Odkazovací tón: F = [95 4 8 ]; [Hz] % T = [.33.3.33.3.33.25]; [s] % d) Obsazovací tón: F = [425 ]; [Hz] % T = [.33.42]; [s]
Hudební stupnice I >> logspace(log(26.63),log(2*26.63),3) >>26.63; 277.9; 293.67; 3.3; 329.63; 349.23; 37.; 392.; 45.3; 44.; 466.7; 493.89; 523.26
Hudební stupnice III close all,clear x = []; % inicializace promenne fs = 8; % zmenit také ve funkci klavesy = [4 42 44 45 47 49 5 52]; doby =.5*ones(,length(klavesy)); for k = :length(klavesy) ton = nota(klavesy(k),doby(k)); x = [x ton]; end soundsc(x,fs) % poslech hudebni stupnice
Tónová volbai (DTMF - Dual Tone Multi-Frequency) Frekvence nejsou: násobkem jiné frekvence rozdílem či součtem frekvencí
Tónová volba II >> signal = DTMFvolba([6 3]); function tony = DTMFvolba(cisla) Fs = 8; t = (:799)/Fs; % generovani casove osy f = [697 697 697 77 77 77 852 852 852 94 94 94; 29 336 477 29 336 477 29 336 477 336 29 477]; tony=[]; for i=:length(cisla), if(cisla(i)==), cisla(i)=; end; ton =.5*sin(2*pi*f(,cisla(i))*t); ton2 =.5*sin(2*pi*f(2,cisla(i))*t); tony =[tony; ton+ton2]; end; tony=tony'; tony=tony(:);
Tabulková (wavetable) syntéza Při tabulkové syntéze simulujeme nástroj pomocí vzorků vyjmutých ze skutečného nástroje
Tabulková (wavetable) syntéza
Tabulková (wavetable) syntéza
Tabulková (wavetable) syntéza Opatrný výběr period: velké změny v amplitudě (vytváří nežádoucí audio efekty) změny ve fázi (slyšitelná kliknutí) E.g. E.g. 2
Tabulková (wavetable) syntéza Lineární prolínaní (crossfade)
Tabulková (wavetable) syntéza t * t = t
Tabulková (wavetable) syntéza duration peak amplitude t peak amplitude
Tabulková (wavetable) syntéza ff high med. low mf p t t t
Tabulková (wavetable) syntéza fs=8; f=4; N=fs/f; n=:n-; P=sin(2*pi*f/fs*n); f=f*2^(/2); N=fs/f; n=:n-; delta=f*length(p)/fs; % delta=f/f; % delta=t/t; ind = round(:delta:delta*(n-))+; stem(n,p(ind))
Tabulková (wavetable) syntéza % transformace tabulky s jednou periodou f % na libovolně dlouhý signál o délce doba a o frekvenci f doba=; ind = mod(round(:delta:(delta*doba*fs-)),n)+; stem(ind), stem(p(ind))
Tabulková (wavetable) syntéza A B nt int ceil
Tabulková (wavetable) syntéza % transformace tabulky s jednou periodou f % na libovolne dlouhy signal o frekvenci f % pomoci linearni interpolace doba=; ind = mod(:delta:(delta*doba*fs-),n)+; x=ind-floor(ind); P=[P P()]; A=P(floor(ind)); B=P(ceil(ind)); y=(b-a).*x+a; stem(ind) stem(y) A x y B ind
Tabulková (wavetable) syntéza % priklad tabulkove syntezy banja [x,fs]=wavread('banjo.wav'); P=x(44:72);
function y=tabsynt(p,f,doba,fs); % tabulkova (wavetable) synteza s linearni interpolaci % P = jedna perioda vzorkovaneho signalu (tabulka) % f = pozadovana frekvence vystupniho signalu % doba = trvani vystupniho signalu % fs = vzorkovaci frekvence výstupniho signalu % y = vystupni signal % Pouziti: y = tabsynt(p,f,doba,fs) % by Roman Cmejla P=P(:)'; delta=f*length(p)/fs; ind = mod(:delta:(delta*doba*fs-),length(p))+; x = ind-floor(ind); P = [P P()]; A = P(floor(ind)); B = P(ceil(ind)); y = (B-A).*x+A;
Tabulková (wavetable) syntéza y=tabsynt(p,f,doba,fs); y=exp(-[:length(y)-]./fs./.).*y;
Tabulková (wavetable) syntéza