%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ZZS - 8.cvičení: Modulační syntézy % R.Čmejla, 20.listopadu 2018 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% % Příklad 1: Amplitudová modulace % fs = 8000; Ts = 1/fs; Tmax = 1.0; t = [0:Ts:Tmax-Ts]; x = 0.5*cos(2*pi*750*t) + 0.5*cos(2*pi*450*t); figure(1) title('soucet dvou sinusovek') %% x = sin(2*pi*600*t).*sin(2*pi*150*t); figure(2) % kruhova modulace title('kruhova modulace') %% x = (1 + 1*sin(2*pi*150*t)).*sin(2*pi*600*t); figure(3) % amplitudova modulace subplot(211), plot(t,x); title('amplitudova modulace') %% mi = t/Tmax; % linearni narust hloubky modulace od 0 do 1 x = (1 + mi.*sin(2*pi*150*t)).*sin(2*pi*600*t); figure(4) % vliv hloubky modulace %% mi = t/Tmax % linearni narust hloubky modulace od 0 do 1 x = (1 + mi.*sin(2*pi*4*t)).*sin(2*pi*400*t); figure(5) % zde je videt hloubka modulace v casove oblasti %% mi=0.5; x = (1 + mi.*sin(2*pi*4*t)).*sin(2*pi*400*t).*exp(-t); figure(6) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% % Příklad 2: Dva tóny % % Při násobení dvou harmonických signálů vznikne součtová a rozdílová % složka a potlačí se původní. Metoda bývá často implementována % u zvukových syntezátorů. % Jev, který může znít jako cvrkot je slyšitelný nejlépe je-li jedna % z frekvencí velmi malá (okolo 10 Hz) a druhá ve slyšitelném pásmu do 1 kHz. % % Generujme signály (4 sec) jako součet dvou sinusových signálů o frekvenci f1 a f2. % a) f1 = 220; f2 = 221; (=> fc = 220.5; fm = 0.5;) % b) f1 = 220; f2 = 225; (=> fc = 222.5; fm = 2.5;) % c) f1 = 220; f2 = 270; (=> fc = 255; fm = 25;) % Signály zobrazme a poslouchejme % figure fs = 44100; doba = 4; f1(1) = 220; f2(1) = 221; f1(2) = 220; f2(2) = 225; f1(3) = 220; f2(3) = 270; for k=1:3 t = [0 : 1/fs : doba - 1/fs]; sig1 = sin(2*pi*f1(k)*t); sig2 = sin(2*pi*f2(k)*t); sig = 0.5*(sig1 + sig2).*interp1([0 0.02 doba-0.02 doba],[0 1 1 0],t); end; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% % Příklad 3: Frekvenční modulace figure % Parametry doba = 2; % trvani signalu [s] fs = 8000; % vzorkovani signalu [Hz] fc = 500; % nosna frekvence (Hz) fm = 50; % modulacni frekvence (Hz) % harmonické zvuky % 2.5 5 10 25 50 100 250 % neharmonické zvuky % 4.05 8.09 16.2 40.5 80.9 162 405 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% % Příklad 4: Syntetické zvony % clear figure % ZVONY fc = [110,220,110,110,250,250]; % nosna frekvence [Hz] fm = [220,440,220,220,350,350]; % modulacni frekvence [Hz] % pomer 1:2 Io = [10,5,10,10,5,3]; % modulacni index tau = [2,2,12,0.3,2,1]; % casova konstanta doba = [6,6,3,3,5,5]; % trvani [s] fs = 4.*[11025,11025,11025,11025,11025,11025]; % vzorkovaci frekvence [Hz] for k=1:length(fc) t = 0:1/fs(k):doba(k); % casova osa obalka = exp(-t/tau(k)); % obalka mi = Io(k)*exp(-t/tau(k)); % hloubka modulace x = obalka.*sin(2*pi*fc(k)*t+mi.*sin(2*pi*fm(k)*t)); .... % zobrazte a poslouchejte end; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% % Příklad 5: Syntetický vítr % % VITR %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % od tonu k sumu % příklad modifikujte % vetsiho "rozkmitu" (meluziny) dosahneme % 1. zvetsenim modulacniho indexu % 2. zvysenim poctu frekvencnich slozek signalu, napr. na 500 clear all figure fmin = 261.6; % c1 fmax = 523.3; % c2 fc = linspace((fmin),(fmax),100); fm = 0.8; % modulacni frekvence [Hz] doba = 4; % trvani [s] fs = 8000; % vzorkovaci frekvence [Hz] t = 0:1/fs:doba-1/fs; % casova osa mi = 1; % index modulace x=zeros(1,length(t)); for k=1:length(fc) x = x + sin(2*pi*fc(k)*t+2*pi*rand+k*mi.*sin(2*pi*fm*t)); end; subplot(211),specgram(sin(2*pi*fc(k)*t+2*pi*rand+k*mi.*sin(2*pi*fm*t))) subplot(212),specgram(x) z=[x x]; soundsc(z,fs) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% % Příklad 6: Jednoduché syntetické FM nástroje % http://www.ece.rochester.edu/courses/ECE140/resources/Labs/ECE140_Lab7_2011.pdf % obalky - viz bonusy.pdf %% % délka fc H =fm/fc Imax Imin % ZVON 15 200 1.4 10 0 % BICÍ 0.2 80 0.688 25 0 % KLARINET 0.5 900 0.667 4 2 % HOBOJ 0.5 1100 0.2 1.5 0 % ŽESTĚ 0.6 440 1.0 5 0 % délka fc H =fm/fc Imax Imin % ZVUK clear figure doba = 5; % trvani signalu [s] fs = ; % vzorkovani signalu [Hz] fc = ; % nosna frekvence (Hz) H = ; Imax = ; % max index modulace Imin = ; % min index modulace fm = ; t = 0 : 1/fs : doba-1/fs; % casovy vektor % obalky pro zvon: tau = 0.1*doba; A = exp(-t/tau); Io = Imax*exp(-t/tau); y = A.*sin(2*pi*fc*t + Io.*sin(2*pi*fm*t)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% % Příklad 7: VYSTRAHY % figure clear, % fc = [1500,1500,1500,1500,1500]; % nosna frekvence [Hz] fm = [1.25,2,5,5,10,25]; % modulacni frekvence [Hz] Io = [400,200,100,50,20]; % modulacni index doba = [2,2,2,2,2]; % trvani [s] fs = [44100,44100,44100,44100,44100]; % vzorkovaci frekvence [Hz] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% % Příklad 8: Synteticke kapky vody % Příklad modifikujte figure clear fs = 44100; doba1 = 0.02; % doba trvani prvni casti doba2 = 0.18; % doba trvani druhe casti t1 = 0:1/fs:doba1-1/fs; t2 = 0:1/fs:doba2-1/fs; t = 0:1/fs:doba1+doba2-1/fs; fm = 7; mi = 20; tau = 0.02; pocet_kapek = 5; y=[]; for por_kapky = 1:pocet_kapek, fc1 = 700+100*randn; cast1 = sin(2*pi*fc1*t1 + mi*cos(2*pi*fm*t1)); A=0.4; cast2=zeros(1,length(t2)); for h=1:5 fc2 = 1500+300*randn; cast2 = cast2 + A*sin(2*pi*fc2*t2 + mi*cos(2*pi*fm*t2)); end; kapka(por_kapky,:)=[cast1 cast2].*exp(-t/tau); subplot(pocet_kapek,1,por_kapky), plot(kapka(por_kapky,:)) sound(kapka(por_kapky,:),fs), pause(1) y=[y kapka(por_kapky,:) zeros(1,fs)]; end; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% % Příklad 9: Housle s vibrátem % viz "Formantová syntéza" % function [violin] = housle(f0,doba,fs) figure f0 = 440; doba=2; fs = 44100; fm = 4; % frekvence vibrata I = .1; % modulacni index vibrata %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% % Příklad 10: Vibráto % vibrato clear all; figure fs = 22050; f0 = 440; fm = 5; doba = 5; t = 0:1/fs:doba-1/fs; alfa = [1000 300 .1 .1 .1 3 .5 1 4]; % vibrato s aditivni syntezou x = zeros(1,length(t)); for n = 1:9 x = x + alfa(n)*sin(2*pi*f0*n.*t + 7*sqrt(n)*sin(2*pi*fm.*t)); end % obalka X = [0 .2 .8 .95 1].*t(end); Y = [0 1 .3 .1 0]; O=interp1(X,Y,t); x = x.*O; x = .98*x/(max(abs(x))); sound(x,fs); specgram(x,[],fs)