You are on page 1of 18

Izvještaj LV3 - Analiza signala zvuka

Luka Fajdetić, PE-LV3


Preddiplomski studij elektrotehnike, smjer EE
13. travnja 2022.
O izvještaju
U trećoj laboratorijskoj vježbi upoznali smo se s mogućnošću zvučnog
reproduciranja signala. Promatrali smo kako ampltuda, frekvencija, faza signala
utječe na njegovu reprodukciju.
Primjetili smo da na kvalitetu zvuka osim drugih faktora utječe i frekvencija
uzorkovanja, koja bi trebala biti što veća kako bi zvuk bio kvalitetniji.
Slabu sposobnost ljudskog sluha testirali smo pomoću randph.m programa u
kojem smo dobili dva ista signala ili dva koji su se međusobno razlikovali.
Zadatak 1
Napišite MATLAB skriptu tone.m kojom ćete generirati čisti ton trajanja 3
sekunde u srednjoj C noti. Koristite frekvenciju uzorkovanja 8kHz. Napisani
kod treba moći svirati zvuk putem vašeg zvukovnog sustava računala koristeći
sound naredbu te grafički prikazati prvih N uzoraka signala u vremenu (N=300),
amplitude 1 i bez faznog pomaka. Očistite workspace te pridružite sljedeće
varijable:
Fs – frekvencija uzorkovanja Hz
f – frekvencija tona HZ
w – frekvencija tona rad/sek
n - duljina signala
t – vektor uzoraka
Amp – amplituda tona
ph – faza tona
x – vektor vrijednosti signala
N – broj uzoraka koji će biti ispisani
a) Što se dogodi ako pokušate grafički prikazati cijeli signal u vremenu? Objasnite.
b) Na koji način utječe promjena vrijednost Amp na zvuk signala?
c) Na koji način utječe promjena vrijednosti ph na zvuk signala?
d) Što se dogodi ako smanjite frekvenciju uzorkovanja na 1KHz? Promijeni li se značajno
kvaliteta zvuka i kako?
Grafičkom prikazu pridružite grid, ispravno označene osi te naslov.
Naredbom clean najprije čistimo memoriju, sa clf reset čistimo, tj. brišemo plotane slike,
zatim unosimo vrijednosti zadane u zadatku. Traži nam se čisti ton u srednjoj C noti, a njezinu
frekvenciju znamo (262 Hz). Naredbom plot crtamo signal, naredbom grid postavljamo mrežu
na dobiveni graf, pomoću xlabel i ylabel postavljamo imena koordinatnih osi, s title
postavljamo naslov grafa, te pomoću naredbe sound možemo čuti kako zvuči naš zadani
signal.

Slika 1: Kod zadatka u skripti tone.m


Slika 2: Grafički prikaz prvih 300 uzoraka signala u vremenu

a) Akustični valovi su kontinuirani u amplitudi i vremenu. Za pohranjivanje


kontinuiranih signala bila bi potrebna beskonačna količina memorije, što je naravno
nemoguće. Zbog toga se za predstavljanje audio signala u računalu koristi
uzorkovanje. Kada bismo pokušali grafički prikazati cijeli signal u vremenu, zapravo
ne bismo dobili ništa (Slika 3).
Slika 3: Pokušaj grafičkog prikaza cijelog signala u vremenu

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?

Radi se o melodiji Sretan rođendan.

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

Slika 7: Kod skripte compose.m

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.

Dodani su vektori amplitude, faznog pomaka i frekvencije tona koji imaju po 3


vrijednosti. Pomoću for petlje smo prošli sve tri vrijednosti koje su se nalazile u
vektorima Amp, ph i f i tako za svaki K(odnosno i) smo dobili nove x signale koji su
se razlikovali po frekvenciji tona. Svakim povećanjem K(i), odnosno povećanjem
frekvencije, smo dobili viši ton.

title ('Signal x, Luka Fajdetić')


i=i+1;
sound(x,Fs)
pause(4)
end (nisam izrezao do kraja pod satom pa sam dodao ostali kod koji je i bio u skripti)
Slika 8: Kod skripte chords.m
Slika 9: Graf signala (prvih 300 uzoraka) u odnosu na vrijeme (za Amp=4, ph=0 i f=262)

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)

Slika 12: Čisti ton


Slika 13: Čisti ton i njegovi harmonici

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.

- Pokrenite i isprobajte program randph.m.


- Provjerite koliko puta možete odgovor „Točno“ tijekom 10 uzastopnih pokušaja.
- Što možete zaključiti o ovisnosti tolerancije ljudskog uha i različitih faza
harmoničkih komponenti?
Odgovor:
Od 10 poslušanih zvukova signala prepoznao sam 3. Ljudsko uho nekada ne može razlikovati
signale s različitim harmoničkim komponentama jer su razlike između tih signala jako male.
2.5
Kreirali smo program sa grafičkim sučeljem za sound funkciju i nekoliko zvukova prikazano
na Slici 2. Broj određen sa Sampling Frequency određuje koliko uzoraka se svira po sekundi.
U polju Workspace variable možete definirati ime varijable signala kojeg ste prethodno
kreirali. Isprobajte proizvoljno odabrani ugrađeni zvuk za različite vrijednosti frekvencije
uzorkovanja. Komentirajte:
- Što se dogodi sa zvukom kada se frekvencija uzorkovanja smanji ili poveća?
Smanjivanjem frekvencije uzrokovanja smanjuje se titranje čestica (zvuka) te je zvuk poput
slow motiona, dok povećavanjem frekvencije ubrzava se i povećava titranje čestica (zvuka) te je
zvuk poput neke vrste pištanja.

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.

Slika 15: Kreiranje signala

2.

Slika 15: Kreiranje varijable d

3.

Slika 15: Rješenje podzadatka 3


4.

Slika 16: Rješenje podzadatka 4

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

You might also like