Professional Documents
Culture Documents
b) Povećanjem vrijednosti amplitude Amp zvuk se pojačava, glasniji je, odnosno ima viši
ton. Smanjivanjem amplitude zvuk postaje tiši, dublji.
Slika 4: Promjena vrijednosti amplitude (gornja: Amp=5; doljnja: Amp=0.25)
c) U ovome zadatku početni fazni pomak ph je nula. Kako smo dodavali različite
vrijednosti tako se signal u grafu pomicao ovisno o faznom pomaku. Tako je zvuk
počeo od različitih trenutaka, nije uvijek kretao od početka. No, s obzirom da je
ljudsko uho veoma tolerantno promjenama faze, jako je teško čuti promjenu u zvuku.
d) Ako smanjimo frekvenciju uzrokovanja na 1KHz zvuk se produbio i kvaliteta zvuka
je lošija. Na samome početku osjeti se nešto kao brujanje. Kako smo smanjili Fs=1
KHz tako se i korak smanjio s 0.0008 na 0.001. Prema grafu vidimo da imamo veliku
gustoću amplituda.
Slika 5: Smanjenje vrijednosti frekvencije uzrokovanja na Fs=1000 Hz
Zadatak 2
S obzirom da nam je poznat način generiranja sinusnog vala, možete komponirati bilo
koji zvuk koji želite. Prema tome, napišite MATLAB skriptu compose.m koja će
reproducirati zvuk za sljedeću kompoziciju:
C C D C F E C C D C G F C C C5 A F E D Bb Bb A F G F
Možete li prepoznati o kojoj kompoziciji se radi?
Kako bismo uspjeli napraviti skriptu compose.m koja bi reproducirala zvuk za zadanu
kompoziciju, najprije moramo napraviti funkciju mytone (radimo ju u novoj skripti
istoga imena - mytone.m). Pozivanjem funkcije predajemo joj notu, frekvenciju
uzorkovanja, trajanje signala, odnosno note, i amplitudu. Unutar funkcije korištena je
petlja switch kako bi se pronašla upisana nota te vidjelo koja je njezina frekvencija.
Zatim, kreiran je signal x za određenu (upisanu) notu. U skripti compose.m, za svaku
notu koja nam treba pozovemo funkciju predajući joj potrebne parametre, nakon čega
stvaramo matricu, tj. vektor moja_pjesma kojoj dodajemo note zadane u zadatku.
Pomoću sound reproduciraju nam se redom note koje smo zadali.
Slika 6: Kod funkcije mytone
Zadatak 3
Kopirajte i modificirajte program tone.m iz prethodnog zadatka u novi file chords.m
tako da generira K čistih tonova, svaki sa svojom frekvencijom, amplitudom i fazom.
Potrebno je samo promijeniti da Amp, ph i f budu vektori umjesto konstanti, te da
generiraju signale unutar petlje. Vrijednosti podesite na K=3, Amp=[4 4 4], ph=[0 0
0], i f=[262 330 392]. Vaš program treba grafički prikazati svaki signal (prvih N
uzoraka) u odnosu na vrijeme.
Slika 10: Graf signala (prvih 300 uzoraka) u odnosu na vrijeme (za Amp=4, ph=0 i f=330)
Slika 11: Graf signala (prvih 300 uzoraka) u odnosu na vrijeme (za Amp=4, ph=0 i f=392)
Zadatak 4
Kopirajte svoj M-file tone.m u novi file harmon.m i modificirajte novi file tako da
generira signal trajanja od 1.5 sekunde (to je suma srednje note C i njezinih prvih 10
harmonija). Koristite frekvenciju uzorkovanja od 16KHz. Omogućite da harmonije
imaju drugačije amplitude i faze. Ovo možete napraviti tako da jedna matrica
predstavlja amplitude, a druga faze složenog signala.
Vaš program treba:
- grafički prikazati čisti ton i sumu čistog tona i njegovih harmonija na istom grafu u
ovisnosti o vremenu (ponovno samo za N prvih uzoraka). Na grafu označite osi te mu
dajte naslov
- svirati oba signala pomoću sound naredbe
- svirati signal koji se sastoji od čistog tona u trajanju od 1,5 sekunde spojene s čistim
tonom plus harmonika u trajanju od 1,5 sekunde, koji je spojen s samo harmonikom za
1,5 sekundi
Na ovaj način ćete čuti efekte harmonika veoma jasno. Možete li prepoznati visinu
samo sa harmonicima? Pokušajte spustiti prvih nekoliko harmonika, možete li još
uvijek prepoznati visinu tona? Možete li sugerirati zašto je to tako?
harmon.m
clear
clf reset
Amp_vr=[1 2 3 4 5 6 7 8 9 10];
Amp_harm=[2 3 4 5 6 7 8 9 10];
T=1.5;
Fs=16000;
f=[262];
f_vr=[f 2*f 3*f 4*f 5*f 6*f 7*f 8*f 9*f 10*f];
f_harm=[2*f 3*f 4*f 5*f 6*f 7*f 8*f 9*f 10*f];
N=300;
ph_vr=[0 2 4 6 8 10 12 14 16 18];
ph_harm=[2 4 6 8 10 12 14 16 18];
i=[1 2 3 4 5 6 7 8 9 10];
j=[2 3 4 5 6 7 8 9 10];
t=[0:1/Fs:T];
x0=Amp_vr(1)*sin(2*pi*f*t+ph_vr(1));
figure(1);
plot(t(1:N),x0(1:N),'r');
grid;
xlabel('Vrijeme, t')
ylabel('Amplituda, x')
title('Čisti ton, Luka Fajdetić')
figure(2);
plot(t(1:N),x0(1:N),'r');
hold on
y=0;
for K=i
n=T*Fs;
w=f_vr(K)*2*pi;
x=Amp_vr(K)*sin(t*w+ph_vr(K));
y=y+x;
i=i+1;
end
plot (t(1:N),y(1:N), 'b')
grid
xlabel('Vrijeme, t')
ylabel('Amplituda, x')
title('Čisti ton i njegovi harmonici, Luka Fajdetić')
z=0;
j=i;
for K=j
n=T*Fs;
w=f_harm(K)*2*pi;
x=Amp_harm(K)*sin(t*w+ph_harm(K));
z=z+x;
j=j+1;
end
sound(x0,Fs)
pause(3)
sound(y/max(y),Fs)
pause(3)
sound(z/max(z),Fs)
Ljudsko uho prepoznaje o kojoj se visini tona radi na temelju osnovnog harmonika.
No, postoje i slučajevi kada osnovni harmonik može nedostajati iz spektra signala, ali
visina tona svejedno može biti prepoznatljiva ako je ostatak spektra jasno koreliran sa
osnovnim harmonikom.
Zadatak 5
Pokrenite program randph.m koji generira i svira dva signala. Prvo generira signal pri
frekvenciji srednje C sa deset harmonika. Nakon toga generira drugi signal koristeći
iste harmonične amplitude, ali sa drugačijim fazama koji su slučajni brojevi u rasponu
[-pi,pi] Slučajni brojevi generiraju se pomoću naredbe rand. Svaki puta kada se poziva
rand, generira se nasumični broj između 0 i 1. Oba signala su nacrtana na istom grafu
kako bi se lakše uočile razlike u fazi. Program nasumično odabire jedan od signala te
svira odgovarajući zvukovni signal. Nakon toga čeka 3 sekunde, ponovno nasumično
odabire jedan od signala i svira ga. Naposlijetku program Vas pita jesu li preslušana
dva signala ista ili različita (Were the signals the same [Y/N]?) te je potrebno
odgovoriti upisivanjem Y ili N.
Izvještaj za LV3
Zadatak 1
1. Kreirajte signale definirane matematičkim funkcijama te ih reproducirajte kao zvuk.
Koristite frekvenciju uzorkovanja 10 000, amplitudu 0.5 te pomak 0.
2. Kreirajte varijablu d koja je suma dvije sinusne funkcije sa frekvencijama 350 Hz i 440 Hz, u
intervalu [0,4].
3. Kreirajte varijablu b1 koja je suma dvije sinusne funkcije sa frekvencijama 480 Hz i 620 Hz,
u intervalu [0,5]. Nakon toga kreirajte vektor z1 sa 5 000 nula. Kreirajte varijablu b koja se
sastoji od naizmjeničnih kopija elemenata b1 i z1, po četiri elementa od svakog vektora,
naizmjenično.
4. Kreirajte varijablu r1 koja je suma dvije sinusne funkcije sa frekvencijama 440 Hz i 480 Hz,
u interval [0,2]. Kreirajte vektor z2 sa 40 000 nula. Kreirajte varijablu r koja se sastoji od
naizmjeničnih kopija elemenata r1 i z2, po tri elementa svakog vektora.
Prilikom izrade programskog koda, koristite funkcije.
1.
2.
3.
Zadatak 2
Kreirajte MATLAB funkciju koja će primiti string oblika sličnog ovome: '4C 4D 4C 4D 2C 2D 1E
'. Pojedine note u stringu su odvojene razmakom. Svaka nota sastoji se od trajanja note
( puna nota [1], pola note [2], četvrt note [4] ) i tona note (slova od A do Gs prema tablici u
predlošku). Vaš zadatak je dobiveni string razložiti na pojedine note (razdvojiti string po
razmaku), u svakoj noti prepoznati broj koji predstavlja trajanje note i slova koja
predstavljaju notu, generirati vektore zvuka za svaku pojedinu notu, spojiti sve generirane
vektora u jedan i odsvirati ga pomoću naredbe sound(). Odabrati neku pjesmu za koju
možete naći notni zapis, zapisati ju kao string i odsvirati pomoću svoje funkcije.
Odabran je početak pjesme „Twinkle Twinkle Little Star“
Slika 17: Kod zadatka