A2B31SMS 2. PŘEDNÁŠKA - cvut.czsami.fel.cvut.cz/sms/SMS02.pdf · 2020. 4. 16. · A2B31SMS –...
Transcript of A2B31SMS 2. PŘEDNÁŠKA - cvut.czsami.fel.cvut.cz/sms/SMS02.pdf · 2020. 4. 16. · A2B31SMS –...
A2B31SMS – 2. PŘEDNÁŠKA 9. října 2017
Čí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é
Exponenciální signál I
t=0:0.1:8;
a=0.8; b=-0.5;
x_t=a*exp(b*t);
btatx e)( ncanx ][
0 1 2 3 4 5 6 7 80
0.2
0.4
0.6
0.8x(t) = X eb t
t
x(t
)
0 1 2 3 4 5 6 7 8 9 100
0.2
0.4
0.6
0.8
Exponenciální signál I
doba=8; fs=10;
a=0.8; tau=2;
t=0:1/fs:doba-1/fs;
x_t=a*exp(-t/tau);
pb=10;
n=0:pb;
c=exp(-doba/(pb*tau));
x_n=a*c.^n;
% c=0.6703
btatx e)( ncanx ][
Exponenciální signál II
0 1 2 3 4 5 6 7 8 9 100
0.5
1a*cn
0 < c < 1 (c=0,67)
0 1 2 3 4 5 6 7 8 9 100
0.5
1
c = 1
0 1 2 3 4 5 6 7 8 9 100
50
100
150
c > 1 (c=1,67)
Exponenciální signál III
0 1 2 3 4 5 6 7 8 9 10-1
0
1a*cn
0 > c > -1 (c=-0,67)
0 1 2 3 4 5 6 7 8 9 10-1
0
1
c = -1
0 1 2 3 4 5 6 7 8 9 10-100
0
100
200
c < -1 (c=-1,67)
Jednotkový skok
0,0
0,1)(
t
ttu
0,0
0,1][
n
nnu
t=-2:0.01:6;
x_t = [t >= 0];
-2 -1 0 1 2 3 4 5 6
0
0.5
1
-2 -1 0 1 2 3 4 5 6
0
0.5
1
Jednotkový skok
0,0
0,1)(
t
ttu
0,0
0,1][
n
nnu
t=-2:0.01:6;
x_t = [t >= 0];
n=-2:6;
x_n = [n >= 0];
-2 -1 0 1 2 3 4 5 6
0
0.5
1
-2 -1 0 1 2 3 4 5 6
0
0.5
1
Jednotkový impulz (Dirac)
0,0
0,1][
n
nn
-5 0 5 10-0.2
0
0.2
0.4
0.6
0.8
1
n=-5:10;
x_n = [n == 0];
Obdélník
• square(om*t, delta)
– stejné jako generování sin()
– delta … % z periody, které má být kladné
>> o1_t = square(2*pi*f*t1);
>> o2_t = square(2*pi*f*t1,25);
>> o3_t = square(2*pi*f*t1,75);
0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018 0.02
-1
0
1 = 50%
0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018 0.02
-1
0
1 = 25%
0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018 0.02
-1
0
1 = 75%
Obdélník
• square(om*t, delta)
– stejné jako generování sin()
– delta … % z periody, které má být kladné
>> o1_t = square(2*pi*f*t1);
>> o2_t = square(2*pi*f*t1,25);
>> o3_t = square(2*pi*f*t1,75);
>> x_min =-.001; x_max =0.021;
>> y_min =-1.2; y_max =1.2;
>> axis([x_min x_max y_min y_max])
0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018 0.02
-1
0
1 = 50%
0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018 0.02
-1
0
1 = 25%
0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018 0.02
-1
0
1 = 75%
Pila
• sawtooth(om*t, DELTA)
– Stejné jako generování sin()
– DELTA … maximum na intervalu 0..1
>> p1_t = sawtooth(2*pi*f*t1,0);
0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018 0.02
-1
0
1 = 0
0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018 0.02
-1
0
1 = 0,5
0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018 0.02
-1
0
1 = 1
Pila
• sawtooth(om*t, DELTA)
– Stejné jako generování sin()
– DELTA … maximum na intervalu 0..1
>> p1_t = sawtooth(2*pi*f*t1,0);
>> p2_t = sawtooth(2*pi*f*t1,0.5);
0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018 0.02
-1
0
1 = 0
0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018 0.02
-1
0
1 = 0,5
0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018 0.02
-1
0
1 = 1
Pila
• sawtooth(om*t, DELTA)
– Stejné jako generování sin()
– DELTA … maximum na intervalu 0..1
>> p1_t = sawtooth(2*pi*f*t1,0);
>> p2_t = sawtooth(2*pi*f*t1,0.5);
>> p3_t = sawtooth(2*pi*f*t1,1);
0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018 0.02
-1
0
1 = 0
0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018 0.02
-1
0
1 = 0,5
0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018 0.02
-1
0
1 = 1
Analogově-číslicový převod
0 2 4 6 8 10 12 14 16 18 20-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
---> n
--->
x[n
]
T=1/f
Ts=1/fs
)2sin()(0
tfXtxm
frekvence [Hz]
Harmonický signál
amplituda fáze [rad]
čas [s]
)2sin()(00
tfXXtxm
Harmonický signál
? ?
?
?
)2sin()(00
tfXXtxm
Harmonický signál
0,8 1
50
0,95
Generování harmonického
signálu v MATLABu
• Generujme 20 ms harmonického signálu o
frekvenci 440 Hz a vzorkovací frekvenci 8 kHz
• Generujme 4 periody signálu o frekvenci 440
Hz a vzorkovací frekvenci 8 kHz
• Generujme 25 vzorků signálu o frekvenci 440
Hz a vzorkovací frekvenci 8 kHz
Generování harmonického
signálu v MATLABu I
• Generujme 20 ms harmonického signálu o
frekvenci 440 Hz a vzorkovací frekvenci 8 kHz
>> f=440; fs=8000; doba=.02;
>> t1 = 0:1/fs:doba-1/fs;
>> x1_t = sin(2*pi*f*t1);
>> n1 = 0:1:fs*doba-1;
>> x1_n = sin(2*pi*f*n1/fs);
0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018 0.02-1
-0.5
0
0.5
1
---> t [sekundy]
0 20 40 60 80 100 120 140 160-1
-0.5
0
0.5
1
---> n [vzorky]
Generování harmonického
signálu v MATLABu II
• Generujme 4 periody signálu o frekvenci 440
Hz a vzorkovací frekvenci 8 kHz
>> f=440; fs=8000; pp=4;
>> t2 = 0:1/fs:pp/f-1/fs;
>> x2_t = sin(2*pi*f*t2);
>> n2 = 0:1:pp*fs/f-1;
>> x2_n = sin(2*pi*f*n2/fs);
0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01-1
-0.5
0
0.5
1
---> t [sekundy]
0 10 20 30 40 50 60 70 80-1
-0.5
0
0.5
1
---> n [vzorky]
Generování harmonického
signálu v MATLABu III
• Generujme 25 vzorků signálu o frekvenci 440
Hz a vzorkovací frekvenci 8 kHz
>> f=440; fs=8000; N=25;
>> t3 = 0:1/fs:N/fs-1/fs;
>> x3_t = sin(2*pi*f*t3);
>> n3 = 0:1:N-1;
>> x3_n = sin(2*pi*f*n3/fs);
0 0.5 1 1.5 2 2.5 3
x 10-3
-1
-0.5
0
0.5
1
---> t [sekundy]
0 5 10 15 20 25-1
-0.5
0
0.5
1
---> n [vzorky]
Zvuky telefonu
% a) Oznamovací tón: F = [425 0 425 0 ]; [Hz]
% T = [0.33 0.33 0.66 0.66 ]; [s]
%
% b) Vyzváněcí tón: F = [425 0]; [Hz]
% T = [1 3]; [s]
%
% c) Odkazovací tón: F = [950 0 1400 0 1800 0 ]; [Hz]
% T = [0.33 0.03 0.33 0.03 0.33 1.25]; [s]
% d) Obsazovací tón: F = [425 0]; [Hz]
% T = [0.33 0.42]; [s]
Hudební stupnice I
>> logspace(log10(261.63),log10(2*261.63),13)
>>261.63; 277.19; 293.67; 311.13; 329.63; 349.23; 370.00; 392.00; 415.31; 440.01; 466.17; 493.89; 523.26
Hudební stupnice III
close all,clear
x = []; % inicializace promenne
fs = 8000; % zmenit také ve funkci
klavesy = [40 42 44 45 47 49 51 52];
doby = 0.5*ones(1,length(klavesy));
for k = 1: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 0 3]);
function tony = DTMFvolba(cisla)
Fs = 8000;
t = (0:799)/Fs; % generovani casove osy
f = [697 697 697 770 770 770 852 852 852 941 941 941;
1209 1336 1477 1209 1336 1477 1209 1336 1477 1336 1209 1477];
tony=[];
for i=1:length(cisla),
if(cisla(i)==0), cisla(i)=10; end;
ton1 = 0.5*sin(2*pi*f(1,cisla(i))*t);
ton2 = 0.5*sin(2*pi*f(2,cisla(i))*t);
tony =[tony; ton1+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
• 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. 1
E.g. 2
Tabulková (wavetable) syntéza
Tabulková (wavetable) syntéza
• Lineární prolínaní (crossfade)
Tabulková (wavetable) syntéza
*
=
t
t
t
Tabulková (wavetable) syntéza
t
peak
amplitude
duration
peak amplitude
Tabulková (wavetable) syntéza
t
t
t
high
med.
low
ff
mf
p
Tabulková (wavetable) syntéza
fs=8000;
f0=400;
N0=fs/f0;
n0=0:N0-1;
P=sin(2*pi*f0/fs*n0);
f1=f0*2^(1/12);
N1=fs/f1;
n1=0:N1-1;
delta=f1*length(P)/fs;
% delta=f1/f0; % delta=T0/T1;
ind = round(0:delta:delta*(N1-1))+1;
stem(n1,P(ind))
Tabulková (wavetable) syntéza % transformace tabulky s jednou periodou f0
% na libovolně dlouhý signál o délce doba a o frekvenci f1
doba=1;
ind = mod(round(0:delta:(delta*doba*fs-1)),N0)+1;
stem(ind),
stem(P(ind))
Tabulková (wavetable) syntéza
nT
int ceil
A
B
Tabulková (wavetable) syntéza % transformace tabulky s jednou periodou f0
% na libovolne dlouhy signal o frekvenci f1
% pomoci linearni interpolace
doba=1;
ind = mod(0:delta:(delta*doba*fs-1),N0)+1;
x=ind-floor(ind);
P=[P P(1)];
A=P(floor(ind));
B=P(ceil(ind));
y=(B-A).*x+A;
stem(ind)
stem(y)
A
B
ind
y
x
Tabulková (wavetable) syntéza
% priklad tabulkove syntezy banja
[x,fs]=wavread('banjo.wav');
P=x(144:172);
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(0:delta:(delta*doba*fs-1),length(P))+1;
x = ind-floor(ind);
P = [P P(1)];
A = P(floor(ind));
B = P(ceil(ind));
y = (B-A).*x+A;
Tabulková (wavetable) syntéza
y=tabsynt(P,f0,doba,fs);
y=exp(-[0:length(y)-1]./fs./.1).*y;
Tabulková (wavetable) syntéza