%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % SYN - 8.cvičení: GRANULAČNÍ, KONKATENAČNÍ A TVAROVACÍ SYNTÉZA % R.Čmejla, 27.listopadu 2017 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% % PŘÍKLAD 1: Granulační syntéza close all; clear all; fs = 20000; delka_zrna = 0.01; tg = [0:1/fs:delka_zrna-1/fs]; sigma = 0.001; mu = 0.005; doba = 2; mezera_mezi_zrny = 0.015; krok = mezera_mezi_zrny*fs; t = [0:1/fs:doba-1/fs]; y=zeros(1,doba*fs); sp=doba/mezera_mezi_zrny; for m=0:round(sp)-1 for n=1:delka_zrna*fs; f=1000; % konstrukce zrna A=1/(sigma*sqrt(2*pi))*exp(-(tg-mu).^2/(2*sigma^2)); yg=A.*cos(2*pi*f*tg); % přidání zrna ke vzorkum y(m*krok+n)=yg(n); end end %% % PŘÍKLAD 2: Granulační syntéza ve spektrální oblasti % bw ............. sirka pasma (pocet spektralnich car) % f_c ............ centralni frekvence (poradi spektralni cary) % d .............. hustota zrn % nfft ........... počet bodů FFT % n_seg .......... počet segmentů bw = 20; f_c = 30; d = .5; nfft = 512; n_seg = 1000; %% % PŘÍKLAD 3: Konkatenační syntéza clear all; fs=8000; % TVORBA DATABAZE load nula.asc; load jedna.asc; load dve.asc; load tri.asc; load ctyri.asc; load pet.asc; load sest.asc; load sedum.asc; load osum.asc;load devet.asc; xx0=nula'; xx1=jedna'; xx2=dve'; xx3=tri'; xx4=ctyri'; xx5=pet'; xx6=sest'; xx7=sedum'; xx8=osum'; xx9=devet'; % SYNTEZA % TEXT = input('Vlozte posloupnost cisel, ktera bude prevedena na rec: \n','s'); TEXT='612561256125'; rec=[]; for i=1:length(TEXT) eval(['rec=[rec xx',TEXT(i),'];']); end; soundsc(rec,fs); subplot(211), plot(rec,'k'), axis tight subplot(212), specgram(rec), colormap (1-gray) % Příklad 4: % Pro následující funkce % a) y = k.*x; k = < -1 .. -.5 .. 1> % b) y = x.^k; k = < 1 .. 2 .. 15> % c) y = max(x) * atan(k * x/max(x)); k = <-1000 .. 1 .. 1000> % d) y = max(x) * tanh(k *x/max(x)); k = <-1000 .. 20 .. 1000> % e) y = x.*(abs(x)+k)./(x.^2+(k-1)*abs(x)+1); k = <-.5 .. .1 .. 100> % f) n = 2*k/(1-k); k = < -1 .. -.5 .. 1> % y = (1+n)*x./(1+n*abs(x)); % g) y = x+(abs(x)>k).*(abs(x)-k).*sin(pi+2*pi*x); k = < .1 .. .5 .. 1> % % zobrazte: % i) převodní charakteristiku % ii) vstupní průběh signálu (jedna perioda sinusovky) % iii) výstupní průběh signálu % iv) amplitudové spektrum výstupního signálu %% % Čebyševovy polynomy % Příklad 5: % a) Pomocí Čebyševových polynomů generujte vyší harmonické složky % T1 = x; T2 = 2*x.^2 - 1; T3 = 4*x.^3 - 3*x; T4 = 8*x.^4 - 8*x.^2 + 1; T5 = 16*x.^5 - 20*x.^3 + 5*x; T6 = 32*x.^6 - 48*x.^4 + 18*x.^2 - 1; T7 = 64*x.^7 - 112*x.^5 + 56*x.^3 - 7*x; T8 = 128*x.^8 - 256*x.^6 + 160*x.^4 - 32*x.^2 + 1; T9 = 256*x.^9 - 576*x.^7 + 432*x.^5 - 120*x.^3 + 9*x; T10= 512*x.^10 - 1280*x.^8 + 1120*x.^6 - 400*x.^4 + 50*x.^2 - 1; %% % b) Realizujte periodické průběhy % pomocí Čebyševových polynomů % např.: obdélník y = T1 - (1/3)*T3 + (1/5)*T5 - (1/7)*T7 + (1/9)*T9; %% % Příklad 6: % Tvarovací (waveshaping) syntéza banja % a) Z amplitudového spektra banja nalezněte přenosovou funkci s využitím % Čebyševových polynomů % amplitudové spektrum banja X=[-13 -8 5.5 -3.5 2.6 -6.6 -21 -7 -16 -13 -17 -13 -13 -27]; ampl = 10.^(X./20); HELP použijte funkcí sym a digits %% % b) Realizujte zvuk banja s využitím přenosové funkce nalezené % v předchozím příkladě clear, fs = 11127; doba = 1; f0 = 390; t = 0:1/fs:doba-1/fs; x = cos(2*pi*f0*t); y = 115.0*x.^10 + 40.4*x.^9 - 230.0*x.^8 - 85.3*x.^7 + 151.0*x.^6 ... + 79.9*x.^5 - 35.2*x.^4 - 33.5*x.^3 + 0.772*x.^2 + 2.13*x + 0.025; z=y.*exp(-t./.15); soundsc(z,fs) subplot(211), plot(z) subplot(212), specgram(z) %% % Příklad 4: % Realizujte libovolný hudební nástroj pomocí tvarovací syntézy