Univerza v Ljubljani
Fakulteta za raˇ cunalniˇ stvo in informatiko
Gaˇsper Govekar
Kromatski uglaˇ sevalec na STM32F7 razvojni ploˇ sˇ ci
DIPLOMSKO DELO
UNIVERZITETNI ˇSTUDIJSKI PROGRAM PRVE STOPNJE
RA ˇCUNALNIˇSTVO IN INFORMATIKA
Mentor : izr. prof. dr. Patricio Buli´ c
Ljubljana, 2021
Copyright. Rezultati diplomske naloge so intelektualna lastnina av- torja in Fakultete za raˇcunalniˇstvo in informatiko Univerze v Ljubljani. Za objavo in koriˇsˇcenje rezultatov diplomske naloge je potrebno pisno privoljenje avtorja, Fakultete za raˇcunalniˇstvo in informatiko ter mentorja.
Besedilo je oblikovano z urejevalnikom besedil LATEX.
Fakulteta za raˇcunalniˇstvo in informatiko izdaja naslednjo nalogo:
Tematika naloge:
Izdelajte uglaˇsevalec glasbenih instrumentov na razvojni ploˇsˇci STM32F746G- Discovery. Uglaˇsevalec naj v realnem ˇcasu raˇcuna viˇsino tona zvoka iz okolja in uporabniku sporoˇca odmik od najbliˇzjega poltona. Uglaˇsevalec naj temelji na metodah analize spektra ter SNAC (Special normalized autocorrelation).
Implementirajte tudi grafiˇcni vmesnik na LCD zaslonu na dotik. Izmerite natanˇcnost implementiranega uglaˇsevalca.
Kazalo
Povzetek Abstract
1 Uvod 1
2 Komponente sistema 3
3 Vzorˇcenje zvoka 7
4 Analiza vzorcev 11
4.1 Pristopi analize v ˇcasovni domeni . . . 11
4.2 Pristopi analize v frekvenˇcni domeni . . . 23
4.3 Uporaba metod za uglaˇsevanje . . . 24
4.4 Implementacija na razvojni ploˇsˇci . . . 25
5 Uporabniˇski vmesnik 35
6 Meritve 41
7 Zakljuˇcek 43
Literatura 45
Seznam uporabljenih kratic
kratica angleˇsko slovensko
FFT Fast Fourier transform Hitra Fourierjeva transfor- macija
SNAC Special normalized auto- correlation
Posebno normalizirana av- tokorelacija
LCD Liquid crystal display Zaslon s tekoˇcimi kristali ARGB Red green blue alpha Rdeˇca zelena modra alfa MEMS Micro-electro-mechanical
system
Mikro-elektro-mehanski sistem
DMA Direct memory access Neposredni dostop do po- mnilnika
BSP Board support package Paket knjiˇznic za podporo razvojni ploˇsˇci
HAL Hardware abstraction la- yer
Knjiˇznice za abstrakcijo strojne opreme
I2S Inter-integrated circuit so- und
Zvok preko I2C
WSNAC Windowed special norma- lized autocorrelation
Posebno normalizirana avtokorelacija z okensko funkcijo
DFT Discrete Fourier transform Diskretna Fourierjeva transformacija
RFFT Real fast Fourier trans- form
Realna hitra Fourierjeva transformacija
Povzetek
Naslov: Kromatski uglaˇsevalec na STM32F7 razvojni ploˇsˇci Avtor: Gaˇsper Govekar
V diplomskem delu je predstavljen uglaˇsevalec glasbenih instrumentov na razvojni ploˇsˇci STM32F746G-Discovery, ki v realnem ˇcasu raˇcuna viˇsina tona zvoka iz okolja in uporabniku sporoˇca odmik od najbliˇzjega poltona.
Predstavljene so naprave na razvojni ploˇsˇci, ki vzorˇcijo zvok. Naˇsteti so primeri metod, s katerimi se pogosto doloˇca viˇsino tona. Podrobneje sta predstavljeni metodi analize spektra moˇci in SNAC (Special normalized au- tocorrelation). Ti metodi sta implementirani na razvojni ploˇsˇci. Opisan je grafiˇcni uporabniˇski vmesnik na LCD zaslonu. Predstavljene so meritve natanˇcnosti metod.
Kljuˇcne besede: STM32F7, FFT, avtokorelacija, uglaˇsevalec, digitalno procesiranje signalov.
Abstract
Title: Chromatic Tuner on STM32F7 Series Development Board Author: Gaˇsper Govekar
The diploma thesis describes a musical instrument tuner on the
STM32F746G-Discovery development board. The tuner determines the pitch of the ambient sound in real time and informs the user of the offset from the closest semitone. The hardware which samples sound on the development board is described. The common pitch detection methods are listed. The power spectrum analysis and SNAC methods are explained in more detail.
They are implemented on the development board. The graphic user inter- face on the LCD screen is described. The accuracy of both pitch detection methods is measured.
Keywords: STM32F7, FFT, autocorrelation, tuner, digital signal pro- cessing
Poglavje 1 Uvod
Uglaˇsevalec je nepogreˇsljivo orodje slehernega glasbenika, ˇse posebej ne- izkuˇsenih. ˇCe ˇzelimo igrati brezhibno glasbo, moramo imeti brezhibno uglaˇsen instrument, za kar je naˇs sluh dovolj natanˇcen, vendar je vseeno uporabno imeti pomoˇc.
Razvoj uglaˇsevalcev je precej zapleten, saj moramo biti pozorni na precej razliˇcnih dejavnikov. Kljuˇcna funkcionalnost, ocenjevanje viˇsine tona zvoka, je ˇsiroko raziskan problem, za katerega obstaja veliko razliˇcnih pristopov s prednostmi in slabostmi, med katerimi se moramo odloˇciti za najbolj ustre- znega. Pri kromatskih uglaˇsevalcih je to ˇse posebej poudarjeno, saj moramo izbrati metodo, ki deluje ˇcim bolje pri visokih in nizkih frekvencah, pri se- stavljenih zvokih, ki jih nekateri instrumenti proizvedejo itd. Poleg tega mora biti metoda zmoˇzna dovolj hitre analize, da dobi uporabnik povratne informacije v ustreznem ˇcasu. Za naˇs uglaˇsevalec smo izbrali dve metodi, enostavno iz druˇzine metod, ki analizirajo zvok v frekvenˇcni domeni in bolj zapleteno iz druˇzine, ki analizira zvok v ˇcasovni domeni. Vzorˇcenje in ana- liza zvoka na uglaˇsevalcu sta podrobneje predstavljena v poglavjih 3 in 4.
Meritve natanˇcnosti izbranih metod so predstavljene v poglavju 6.
Uglaˇsevalec mora biti kompakten, prenosljiv in enostaven za uporabo z intuitivnim uporabniˇskim vmesnikom. Te lastnosti najlaˇzje doseˇzemo, ˇce ga implementiramo kot vgrajeni sistem ali na prenosnem telefonu. Naˇs
1
2 Gaˇsper Govekar uglaˇsevalec smo implementirali na razvojni ploˇsˇci STM32F746G-Discovery, ki je podrobneje predstavljena v poglavju 2. Uporabniˇski vmesnik smo im- plementirali na zaslonu na dotik na razvojni ploˇsˇci, kot je opisano v poglavju 5.
Poglavje 2
Komponente sistema
Uglaˇsevalec je implementiran na razvojni ploˇsˇci STM32F746G-Discovery, na- menjeni razvoju prototipov z mikrokrmilnikom STM32F746NGH6 na osnovi procesorja ARM Cortex-M7 [3]. Procesor je zmoˇzen delovati s frekvenco ure do 216 MHz. Vsebuje enoto za aritmetiko v plavajoˇci vejici, ki lahko izvaja ukaze za obdelavo podatkov v plavajoˇci vejici z enojno natanˇcnostjo, in na- bor posebnih ukazov za digitalno procesiranje signalov [7]. Razvojna ploˇsˇca je prikazana na sliki 2.1.
Na ploˇsˇci je nameˇsˇcena naslednja oprema, potrebna za uglaˇsevalec instru- mentov:
• 4,3-inˇcni 480x272 LCD-TFT zaslon s ploˇsˇco na dotik, ki podpira 24- bitni ARGB in 16-bitni RGB format [3].
• Dva MP34DT01TR digitalna MEMS mikrofona [3]. Mikrofona za delo- vanje potrebujeta zunanji urin signal in signal za izbiro kanala. Signal za izbiro kanala doloˇci, v kateri polperiodi urinega signala mikrofon poˇsilja podatke in v kateri vzdrˇzuje stanje visoke impedance na izhodu.
Signal za izbiro kanala enega mikrofona je povezan na napajalno nape- tost, drugega pa na ozemljitev, tako da mikrofona izmeniˇcno poˇsljeta svojo meritev. Podatkovna signala sta skupaj povezana na vhod avdio kodirnika [2]. Na sliki 2.2 je prikazana povezava med kodirnikom in mikrofonoma, na sliki 2.3 pa ˇcasovni diagram poˇsiljanja podatkov.
3
4 Gaˇsper Govekar
Slika 2.1: Razvojna ploˇsˇca STM32F746G-Discovery [6].
• WM8994 avdio kodirnik. Kodirnik je zmoˇzen visoko-kakovostne obde- lave zvoˇcnih podatkov pri nizki porabi energije, saj je namenjen upo- rabi v pametnih telefonih in ostalih prenosnih multimedijskih napravah.
Vsebuje veˇckanalne 24-bitne digitalno analogne pretvornike in analogno digitalne pretvornike, ima gonilnike za razliˇcne naprave za predvajanje zvoka, podpira tako digitalne kot analogne vhode z moˇznostjo zaznave zvoka, dinamiˇcnega nadzora dometa mikrofona, filtriranja signalov in izniˇcevanja ˇsuma. Poleg tega omogoˇca uporabniku poljubno konfigu- racijo vhodnih in izhodnih signalov z meˇsalnikom [2].
• Dva serijska avdio vmesnika, namenjena komunikaciji z zvoˇcnimi napra- vami [3]. Vsak vsebuje dva bloka, ki imata svoje vodilo za prekinitvene zahteve in DMA prenose, svojo nastavljivo uro ter FIFO pomnilnik.
Diplomska naloga 5 Vsak blok je moˇzno nastaviti v naˇcinu gospodar ali suˇzenj, torej lahko tvori uro ali prejema zunanjo. Poleg tega je moˇzno poljubno nastaviti protokol poˇsiljanja ali prejemanja podatkov [4].
Slika 2.2: Povezava med mikrofonoma in kodirnikom. Vhod CLK poda mi- krofonoma urin signal. Podatkovna izhoda mikrofonov sta zvezana v skupna vhoda v kodirnik DMICDAT1 in DMICDAT2 [2]. Vhod za izbiro kanala CHAN prvega mikrofona je povezan na napajalno napetost, drugega pa na ozemljitev. S tem je zagotovljeno, da mikrofona ne poˇsiljata podatkov v enaki polperiodi ure CLK.
6 Gaˇsper Govekar
Slika 2.3: ˇCasovni diagram poˇsiljanja meritev posameznega mikrofona glede na urin signal [2].
Poglavje 3
Vzorˇ cenje zvoka
Zvok vzorˇcimo s pomoˇcjo digitalnih mikrofonov, avdio kodirnika in serijskega avdio vmesnika. Uporabljamo knjiˇznico BSP audio iz paketa za podporo ra- zvojne ploˇsˇce ali BSP (Board support package) [11], ki s pomoˇcjo knjiˇznic za abstrakcijo strojne opreme ali HAL (Hardware abstraction layer) in gonilni- kov naprav omogoˇca enostavnejˇse upravljanje zvoˇcnih naprav. Potrebujemo naslednje funkcije knjiˇznice:
• BSP AUDIO IN Init(). Funkcija s pomoˇcjo HAL knjiˇznic nastavi po- trebne naprave za serijski avdio vmesnik. Funkcija nastavi sistem- ske ure glede na ˇzeleno frekvenco vzorˇcenja, pine sploˇsnonamenskih vhodno-izhodnih naprav, DMA povezave in prekinitve. Nato nastavi serijski avdio vmesnik s protokolom, podobnim I2S, ki ustreza privze- temu protokolu, ki ga uporablja kodirnik. Nato kliˇce ˇse inicializacijsko funkcijo gonilnika kodirnika.
• BSP AUDIO IN Record(), ki zaˇcne DMA pretok podatkov iz kodirnika preko serijskega avdio vmesnika v spomin razvojne ploˇsˇce.
• BSP AUDIO IN Pause(), ki trenutno prekine DMA pretok.
• BSP AUDIO IN Resume(), ki spet zaˇcne prekinjen DMA pretok.
• BSP AUDIO IN TransferComplete CallBack(), ki jo kliˇce rokovalnik 7
8 Gaˇsper Govekar prekinitve, ko DMA prenese vnaprej doloˇceno koliˇcino podatkov in po- nastavi kazalec na zaˇcetek ciljne tabele.
V poglavjih 3 in 4 zaporedje vzorcev imenujemo okno. Velikost okna ozi- roma ˇstevilo vzorcev oznaˇcimo z W. V odseku 3.1 je inicializacijska koda in cikel vzorˇcenja ter analize zvoka. V tabeli i2s buffer hranimo vzorce, ki jih pridobimo z DMA prenosom. Ker vzorˇcimo stereo zvok, moramo imeti tabelo velikosti 2∗W. Inicializiramo kodirnik in serijski vmesnik z izbrano frekvenco vzorˇcenjasampling frequency. Ta mora biti po Nyquist-Shannon teoremu vsaj dvakratnik najviˇsje frekvence v vzorcih, ki jo ˇzelimo zaznati.
Ce nas kot najviˇsji ton zanima B8 pri 7902 Hz, je najniˇˇ zja moˇzna standardna frekvenca vzorˇcenja 16 kHz. Zdaj lahko zaˇcnemo vzorˇciti zvok in rezultate shranjevati v tabelo i2s buffer. Nato vstopimo v glavno zanko aplikacije.
S spremenljivko waiting preverimo, ali se je vzorˇcenje zvoka ˇze zakljuˇcilo.
Pred analizo vzorcev jih moramo iz stereo povpreˇciti v mono in normalizi- rati na interval [−1,1]. To storimo s funkcijo sample transform. Po ana- lizi in prikazu rezultatov postavimo spremenljivko waiting, da poˇcakamo na nove vzorce in kliˇcemo BSP AUDIO IN Resume. Ko se tabela i2s buffer zapolni z novimi vzorci, se izvede rokovalnik DMA prekinitve, ki pokliˇce BSP AUDIO IN TransferComplete CallBack. Zaˇcasno ustavimo DMA pre- nos s klicemBSP AUDIO IN Pause. Zagotoviti moramo vstop v glavno zanko, zato nastavimo boolean waiting na false. Na sliki 3.1 je prikazan potek vzorˇcenja.
i n t 1 6 t i 2 s b u f f e r [ s a m p l e b u f f e r s i z e∗2 ] ; BSP AUDIO IN Init ( s a m p l i n g f r e q u e n c y ,
DEFAULT AUDIO IN BIT RESOLUTION , DEFAULT AUDIO IN CHANNEL NBR ) ; BSP AUDIO IN Record ( ( u i n t 1 6 t∗) i 2 s b u f f e r , s a m p l e b u f f e r s i z e∗2 ) ; // g l a v n a z a n k a
f o r( ; ; ){
i f( ! w a i t i n g ){
f l o a t 3 2 t f r e q u e n c y = 0 . 0 ;
s a m p l e t r a n s f o r m ( i 2 s b u f f e r , s a m p l e b u f f e r , s a m p l e b u f f e r s i z e ) ; // a n a l i z a v z o r c e v
// p r i k a z r e z u l t a t a
Diplomska naloga 9
w a i t i n g=t r u e ;
BSP AUDIO IN Resume ( ) ; }
}
void s a m p l e t r a n s f o r m ( i n t 1 6 t∗ s t e r e o , f l o a t 3 2 t∗ out , u i n t 3 2 t s a m p l e s ){
f l o a t 3 2 t l e f t ; f l o a t 3 2 t r i g h t ;
f o r(i n t i =0; i<s a m p l e s ; i ++){
l e f t =( f l o a t 3 2 t ) s t e r e o [ 2∗i ] ; r i g h t =( f l o a t 3 2 t ) s t e r e o [ 2∗i + 1 ] ; o u t [ i ] = ( l e f t +r i g h t ) / 6 5 5 3 6 ; }
}
void BSP AUDIO IN TransferComplete CallBack (void){
BSP AUDIO IN Pause ( ) ; w a i t i n g= f a l s e ;
return; }
Odsek 3.1: Inicializacija naprav za vzorˇcenje, glavna zanka, funkcija za pri- pravo vzorcev na analizo in rokovalnik DMA prekinitve ob koncu vzorˇcenja.
10 Gaˇsper Govekar
Slika 3.1: Diagram poteka vzorˇcenja.
Poglavje 4
Analiza vzorcev
Vzorce zvoka analiziramo z algoritmom za doloˇcanje viˇsine tona. Ti se grobo delijo po vrsti analize, ki jo opravijo. V tem poglavju so opisane skupine al- goritmov za doloˇcanje viˇsine tona s pomoˇcjo primerov. Podrobno so opisane funkcija kvadrante razlike, avtokorelacija, posebno normalizirana avtokore- lacija in analiza spektra moˇci.
4.1 Pristopi analize v ˇ casovni domeni
Pristopi analize v ˇcasovni domeni poskuˇsajo odkriti lastnosti zvoka nepos- redno iz vzorcev.
4.1.1 Avtokorelacija
Avtokorelacijar(τ) je navzkriˇzna korelacija dela funkcije z zamaknjenim de- lom iste funkcije. To si lahko predstavljamo kot mero prileganja krivulj.
Ce je signal periodiˇˇ cen, funkcija doseˇze maksimume pri veˇckratnikih peri- ode. Maksimum vedno doseˇze tudi pri τ = 0, saj se funkcija popolnoma prilega sama sebi [9]. r(τ) opiˇsemo z enaˇcbo 4.1. τ predstavlja zamik,xi pa posamezni vzorec.
11
12 Gaˇsper Govekar
r(τ) =
∞
X
i=−∞
xixi+τ (4.1)
V praksi perioda zvoka ne ostane enaka skozi ˇcas, zato raˇcunamo kratko- trajno avtokorelacijo, pri kateri je τ omejen z velikostjo oknaW. Obstajata dve vrsti kratkotrajne avtokorelacije, tip 1 in tip 2 [9].
r(τ) =
W/2−1
X
i=0
xixi+τ 0≤τ ≤W/2 (4.2)
Z enaˇcbo 4.2 opiˇsemo avtokorelacijo tipa 1. Zamik se veˇca do polovice ve- likosti oknaW. Enaˇcbo si lahko predstavljamo kot primerjanje fiksne krivulje od zaˇcetka okna do polovice s krivuljo iste dolˇzine z zaˇcetkom, zamaknjenim zaτ. Primer zamika je prikazan na sliki 4.1, celoten rezultat pa na sliki 4.3.
r(τ) =
W−1−τ
X
i=0
xixi+τ 0≤τ < W (4.3) Z enaˇcbo 4.3 opiˇsemo avtokorelacijo tipa 2. Zamik se veˇca do velikosti okna W. Enaˇcbo si lahko predstavljamo kot primerjanje krivulje, ki ima fiksen zaˇcetek na indeksu 0, s krivuljo, ki ima fiksen konec na indeksu W-1.
Krivulji se z veˇcanjem τ krˇcita v obratni smeri. Primer zamika je prikazan na sliki 4.2, celoten rezultat pa na sliki 4.4.
Diplomska naloga 13
Slika 4.1: Intervala vzorcev za raˇcunanje avtokorelacije tipa 1 pri τ = 150.
Slika 4.2: Intervala vzorcev za raˇcunanje avtokorelacije tipa 2 pri τ = 150.
14 Gaˇsper Govekar Efektivna sredina tc(τ) je povpreˇcni ˇcas oziroma indeks vzorcev v obeh intervalih pri doloˇcenem τ. Enaˇcba 4.4 opiˇse tc(τ) za avtokorelacijo tipa 1, 4.5 pa za avtokorelacijo tipa 2. Pri tipu 2 se intervala simetriˇcno krˇcita, zato tc(τ) ni odvisen odτ, temveˇc le od W. Zaradi te lastnosti je laˇzje neposredno primerjati vrednosti korelacije pri razliˇcnihτ brez upoˇstevanja moˇznosti raz- like v nihanju frekvence zvoka zaradi ˇcasovne razlike med intervaloma. Poleg tega je zato bolj smiselno poskuˇsati interpolirati periodo, ki ni veˇckratnik periode vzorˇcenja [9].
tc(τ) = 1 W/2
W/2−1
X
i=0
i+ (i+τ)
2 = W
4 + τ−1
2 (4.4)
tc(τ) = 1 W −τ
W−1−τ
X
i=0
i+ (i+τ)
2 = W −1
2 (4.5)
Diplomska naloga 15
Slika 4.3: Rdeˇca krivulja predstavlja 1024 vzorcev sinusoide s frekvenco 440 Hz, vzorˇceno s frekvenco 44100 Hz. Modra krivulja predstavlja normalizirano vrednost r(τ) tipa 1 za τ od 0 do W/2 = 512.
Slika 4.4: Rdeˇca krivulja predstavlja 1024 vzorcev sinusoide s frekvenco 440 Hz, vzorˇceno s frekvenco 44100 Hz. Modra krivulja predstavlja normalizirano vrednost r(τ) tipa 2 za τ od 0 do W −1 = 1023.
16 Gaˇsper Govekar
4.1.2 Funkcija kvadratne razlike
Funkcija kvadratne razlike d(τ) na podoben naˇcin kot avtokorelacija izmeri prileganje krivulj. Ce jo izraˇˇ cunamo nad signalom in njegovim zamikom, funkcija doseˇze minimume pri veˇckratnikih periode signala. Minimum vedno doseˇze tudi priτ = 0, saj se funkcija popolnoma prilega sama sebi. Obstajata 2 tipa funkcije kvadratne razlike [9].
d(τ) =
W/2−1
X
i=0
(xi−xi+τ)2 0≤τ ≤W/2 (4.6) Z enaˇcbo 4.6 opiˇsemo funkcijo kvadratne razlike tipa 1. Zamik se veˇca do polovice velikosti okna W. Primer zamika je prikazan na sliki 4.1, celoten rezultat pa na sliki 4.5.
d(τ) =
W−1−τ
X
i=0
(xi−xi+τ)2 0≤τ < W (4.7) Z enaˇcbo 4.7 opiˇsemo funkcijo kvadratne razlike tipa 2. Zamik se veˇca do velikosti okna W. Primer zamika je prikazan na sliki 4.1, funkcija pa na sliki 4.6.
Prednost funkcije kvadratne razlike pred avtokorelacijo je, da dobimo lepˇse rezultate pri necelem ˇstevilu period zvoka v vzorcu. Pri funkciji kva- dratne razlike lahko celo uporabimo manj kot 1 periodo zvoka. To pomeni, da lahko poveˇcamo frekvenco vzorˇcenja in skrajˇsamo ˇcas vzorˇcenja, tako da obdrˇzimo enako koliˇcino vzorcev, vendar izboljˇsamo loˇcljivost rezultata. Sla- bost pa je, da funkcije kvadratne razlike ne moremo normalizirati tako, da bi imela fiksne vrednosti najmanjˇsega in najveˇcjega prileganja ter sredine. Taka normalizacija olajˇsa izbiranje maksimuma oziroma minimuma v rezultatu, ki ustreza frekvenci signala [9].
Diplomska naloga 17
Slika 4.5: Rdeˇca krivulja predstavlja 1024 vzorcev sinusoide s frekvenco 440 Hz, vzorˇceno s frekvenco 44100 Hz. Modra krivulja predstavlja normalizirano vrednost d(τ) tipa 1 za τ od 0 do W/2−1 = 511.
18 Gaˇsper Govekar
Slika 4.6: Rdeˇca krivulja predstavlja 1024 vzorcev sinusoide s frekvenco 440 Hz, vzorˇceno s frekvenco 44100 Hz. Modra krivulja predstavlja vrednostd(τ) tipa 2 za τ od 0 doW −1 = 1023.
Slika 4.7: Rdeˇca krivulja predstavlja vrednostr(τ) tipa 1, modra pa vrednost d(τ) tipa 1 za τ od 0 do W/2−1 = 511. Ko r(τ) doseˇze maksimum, d(τ) doseˇze minimum.
Diplomska naloga 19
4.1.3 Posebno normalizirana avtokorelacija
Metodi, predstavljeni v podpoglavjih 4.1.1 in 4.1.2, za uporabno oceno viˇsine tona ne potrebujeta velikega ˇstevila period signala, zato sta primerni za upo- rabo v sistemih, ki vzorce analizirajo v realnem ˇcasu. Posebno normalizirana avtokorelacija je izboljˇsava avtokorelacije in funkcije kvadratne razlike, ki zdruˇzuje pozitivne in poskuˇsa zniˇzati vpliv negativnih lastnosti obeh. Poleg tega vpelje nov naˇcin normalizacije. Za osnovo te metode se zaradi statiˇcne efektivne sredine uporablja avtokorelacija tipa 2 [9]. Posebno normalizirana avtokorelacija ali SNAC (Special normalized autocorrelation) je doloˇcena z enaˇcbo 4.8.
n0(τ) = 2PW−1−τ i=0 xixi+τ PW−1−τ
i=0 (x2i +x2i+τ) = 2r0(τ)
m0(τ) (4.8)
V ˇstevcu r0(τ) predstavlja avtokorelacijo tipa 2, v imenovalcu pa m02(τ) posebni normalizacijski faktor, ki upoˇsteva le vzorce v vsoti za posamezni τ. Pogosto se avtokorelacija normalizira z mnoˇzenjem z (W−τ)rW 0(0), ˇcemur pravimo nepristranska avtokorelacija. r0(0) vsebuje celotno energijo okna vzorcev, W−τW pa odstrani oˇzanje korelacije z veˇcanjem τ pri avtokorelaciji tipa 2. Teˇzava tega pristopa je v predpostavki, da je energija v oknu ena- komerno porazdeljena, kar pogosto ni res. Zaradi tega r0(0) ne predstavlja vedno najviˇsje moˇzne korelacije [9]. SNAC se lahko izrazi s pomoˇcjo avtoko- relacije kot v enaˇcbi 4.8 ali s pomoˇcjo funkcije kvadratne razlike kot v enaˇcbi 4.11, zato obdrˇzi obe pozitivni lastnosti avtokorelacije in funkcije kvadratne razlike, opisani v podpoglavju 4.1.2 [10].
n0(τ) = 2r0(τ)
m0(τ) (4.9)
d0(τ) = m0(τ)−2r0(τ) (4.10) n0(τ) = 1− d0(τ)
m0(τ) (4.11)
20 Gaˇsper Govekar Okenska funkcija
Metoda SNAC ne potrebuje nujno predhodne obdelave vzorcev z okensko funkcijo, saj ima zadostno natanˇcnost doloˇcanja viˇsine tona za potrebe uglaˇse- vanja instrumentov. Kljub temu se z uporabo okenske funkcije natanˇcnost ocene viˇsine tona v veliko razliˇcnih primerih zviˇsa [9]. SNAC z okensko funk- cijo ali WSNAC (Windowed special normalized autocorrelation) je doloˇcen z enaˇcbo 4.12. V enaˇcbi wi predstavlja vrednost okenske funkcije z indeksom i.
ˆ
n0(τ) = 2PW−i−τ
i=0 (wiwi+τxixi+τ) PW−i−τ
i=0 [wiwi+τ(x2i +x2i+τ)] = 2ˆr0(τ) ˆ
m0(τ) (4.12) Moˇzna je izbira razliˇcnih okenskih funkcij, vendar zadostuje Hannova funkcija, doloˇcena z enaˇcbo 4.13.
w(i) = 1
2[1−cos(2πi
W )] (4.13)
Na sliki 4.8 je prikazan primer posebno normalizirane avtokorelacije z okensko funkcijo.
Diplomska naloga 21
Slika 4.8: Rdeˇca krivulja predstavlja 1024 vzorcev sinusoide s frekvenco 440Hz, vzorˇceno s frekvenco 44100Hz. Zelena krivulja predstavlja vzorce, preoblikovane s Hannovo funkcijo. Modra krivulja predstavlja vrednost ˆn0(τ) zaτ od 0 do W −1 = 1023.
Uˇcinkovito raˇcunanje WSNAC
Raˇcunanje WSNAC po enaˇcbi 4.12 ima asimptotsko zahtevnostO(W2), ven- dar je moˇzno zahtevnost zmanjˇsati naO(W log(W)). ˆr0(τ) in ˆm0(τ) se namreˇc lahko izraˇcuna s pomoˇcjo Fourierjeve transformacije [9] po Wiener-Khinchin teoremu [12].
22 Gaˇsper Govekar Postopek raˇcunanja ˆr0(τ) je naslednji [9]:
• okno vzorcev razˇsirimo s p niˇclami, pri ˇcemer je p ˇzeljena dolˇzina ˆr0(τ),
• vzorce zmnoˇzimo z okensko funkcijo,
• izraˇcunamo Fourierjevo transformacijo razˇsirjenega okna,
• izraˇcunamo kvadrat absolutne vrednosti kompleksnih ˇstevil transfor- macije, da dobimo spekter moˇci in
• izraˇcunamo inverz Fourierjeve transformacije spektra moˇci, da dobimo avtokorelacijo tipa 2.
ˆ
m0(τ) lahko izrazimo z enaˇcbo 4.15. Vsoti v enaˇcbi lahko izraˇcunamo kot navzkriˇzno korelacijo med vektorjema va in vb, pri ˇcemer va vsebuje zmnoˇzke elementov okenske funkcije s kvadrati istoleˇznih vzorcev iz okna,vb
pa vrednosti okenske funkcije [9].
ˆ m0(τ) =
W−i−τ
X
i=0
[wiwi+τ(x2i +x2i+τ)] (4.14)
=
W−i−τ
X
i=0
(x2iwiwi+τ) +
W−i−τ
X
i=0
(x2i+τwi+τwi) (4.15) Postopek raˇcunanja ˆm0(τ) je naslednji [9]:
• va invb razˇsirimo s p niˇclami, pri ˇcemer je p ˇzelena dolˇzina ˆm0(τ),
• izraˇcunamo Fourierjevi transformaciji Va va in Vb vb,
• zmnoˇzimo absolutne vrednosti istoleˇznih elementovVab =|Va| · |Vb|,
• izraˇcunamo inverz Fourierjeve transformacijeVab, da dobimo navzkriˇzno korelacijo tipa 2 med va invb.
Oba postopka imata asimptotsko zahtevnost O(W log(W)), za izraˇcun konˇcnega rezultata pa potrebujemo zgolj enostavne aritmetiˇcne operacije s konstantno zahtevnostjo, tako da je tudi skupna zahtevnost raˇcunanja ˆn0(τ) O(W log(W)) [10].
Diplomska naloga 23
4.2 Pristopi analize v frekvenˇ cni domeni
Pristopi analize v frekvenˇcni domeni poskuˇsajo odkriti lastnosti zvoka iz Fou- rierjeve transformacije vzorcev.
4.2.1 Analiza spektra moˇ ci
Spekter moˇci zvoka izraˇcunamo iz diskretne Fourierjeve transformacije. Fou- rierjeva transformacija je doloˇcena z enaˇcbo 4.16 za neskonˇcne signale. V pra- ksi nimamo zveznega signala, temveˇc konˇcno mnogo vzorcev zvoka, zato upo- rabimo diskretno Fourierjevo transformacijo po enaˇcbi 4.17 [9]. V enaˇcbah f predstavlja frekvenco, t pa ˇcas.
X(f) = Z ∞
−∞
x(t)e−2πif tdt, f, t∈R (4.16)
X(f) =
W−1
X
t=0
x(t)e−2πiWf t, f, t∈R (4.17) Diskretna Fourierjeva transformacija signal razstavi na informacije o W enakomerno razporejenih frekvencah. Te informacije predstavi s komple- ksnim ˇstevilom. Spekter moˇci signala lahko izraˇcunamo iz diskretne Fou- rierjeve transformacije s pomoˇcjo enaˇcbe 4.18 [9]. Iz spektra moˇci lahko neposredno preberemo moˇcne frekvenˇcne komponente s primerjavo velikosti ˇstevil.
S(f) =|X(f)|2 (4.18)
Za uˇcinkovito raˇcunanje Fourierjeve transformacije se uporablja algori- tem hitre Fourierjeve transformacije. Ta kompleksnost raˇcunanja z O(W2) zmanjˇsa naO(W log(W)). ˇCe za vzorˇcenje signala uporabimo frekvencofsin izmerimo W vzorcev, hitra Fourierjeva transformacija izraˇcuna informacije o frekvencah fWs do f2s s korakom Wfs. Primer spektra moˇci, izraˇcunanega iz rezultatov FFT (Fast Fourier transform), je prikazan na sliki 4.10.
24 Gaˇsper Govekar
Slika 4.9: 1024 vzorcev vsote sinusoid s frekvencama 440 Hz in 5000 Hz, vzorˇcene s frekvenco 44100 Hz.
Okenska funkcija
Ko vzorˇcimo signal, si lahko to predstavljamo, kot da v izbranem obmoˇcju uporabimo pravokotno okensko funkcijo, torej mnoˇzimo vzorce v okvirju z 1, vse ostale (ki jih pravzaprav ne izmerimo) pa z 0. Taka okenska funkcija ima ostre robove, kar povzroˇci spektralno puˇsˇcanje. Obiˇcajno se vzorci pre- oblikujejo z okensko funkcijo, ki ima gladkejˇse robove, na primer Hannovo funkcijo, da se zmanjˇsa vpliv spektralnega puˇsˇcanja [9]. Hannova funkcija je opisana z enaˇcbo 4.13.
4.3 Uporaba metod za uglaˇ sevanje
Uglaˇsevalec za analizo zvoka uporablja dve od opisanih metod, posebno nor- malizirano avtokorelacijo z okensko funkcijo in analizo spektra moˇci. Upo- rabnik lahko med njima izbira preko vmesnika, kot je opisano v poglavju
Diplomska naloga 25
Slika 4.10: Spekter moˇci sinusoide 4.9. Vidna sta 2 jasna vrhova okoli 440 Hz in 5000 Hz.
5. Po vsakem vzorˇcenju vzorce povpreˇcimo in normaliziramo, kot je opi- sano v poglavju 3, nato pa izraˇcunamo rezultat izbrane metode. Iz rezul- tata izberemo najviˇsji lokalni maksimum. S pomoˇcjo poloˇzaja maksimuma izraˇcunamo oceno viˇsine tona, kot je opisano v podpoglavju 4.4. Na sliki 4.11 je prikazan primer analize vzorca z metodo WSNAC, na slikah 4.12 in 4.13 pa z metodo spektra moˇci.
4.4 Implementacija na razvojni ploˇ sˇ ci
Za implementacijo WSNAC in analize spektra moˇci na razvojni ploˇsˇci smo uporabili ARM knjiˇznico za digitalno procesiranje signalov za procesorje Cor- tex [1]. Za raˇcunanje realne Fourierjeve transformacije ta definira strukturo arm rfft fast instance f32. Ta vsebuje tabelo konstantnih koeficientov za raˇcunanje DFT (Discrete Fourier transform), dolˇzino tabele s podatki in
26 Gaˇsper Govekar
Slika 4.11: Primer analize 4096 vzorcev zvoka violinske strune D pri frekvenci vzorˇcenja 44100 Hz z metodo WSNAC. Zeleno oznaˇceni maksimum pri τ = 150,31 ustreza frekvenci 44100/150,31 = 293,4 Hz.
interno strukturo za raˇcunanje kompleksne Fourierjeve transformacije, ker knjiˇznica realne transformacije v ozadju raˇcuna kot kompleksne [1]. Posto- pek raˇcunanja RFFT (Real fast Fourier transform) je prikazan na sliki 4.14.
Za pripravo tabel in raˇcunanje doloˇcenih matematiˇcnih operacij upora- bimo naslednje funkcije knjiˇznice arm math:
• arm mult f32(), ki zmnoˇzi istoleˇzne elemente tabel ˇstevil tipafloat32 t,
• arm fill f32(), ki tabelo tipa float32 t zapolni s poljubno vredno- stjo,
• arm copy f32(), ki kopira vsebino tabele tipa float32 t v drugo ta- belo,
• arm rfft fast f32(), ki izraˇcuna diskretno Fourierjevo transformacijo tabele ˇstevil. Med raˇcunanjem spremeni podatke, zato je treba rezultat shraniti v drugo tabelo. Kompleksna ˇstevila transformacije predstavi
Diplomska naloga 27
Slika 4.12: 4096 vzorcev zvoka violinske strune D pri frekvenci vzorˇcenja 44100 Hz.
kot urejene pare ˇstevil v tabeli tako, da zapiˇse realni del ˇstevila na indeks 2∗i, kompleksni pa na 2 ∗i+ 1, pri ˇcemer je i na intervalu [0, W/2−1]. Funkcija kot argument vzame tudi zastavico. Pri vredno- sti 0 se izraˇcuna transformacija, pri vrednosti 1 pa inverz. ˇCe ˇzelimo izraˇcunati inverz, moramo vhodne podatke podati v enakem formatu, kot jih vrne funkcija pri transformaciji.
• arm cmplx mag f32(), ki izraˇcuna absolutno vrednost kompleksnih ˇstevil v tabeli. Ker upoˇsteva, da so kompleksna ˇstevila predstavljena tako, kot jih vrne funkcija arm rfft fast f32, zapolni prvih W/2 indeksov tabele.
Ob zagonu aplikacije je treba strukturoarm rfft fast instance f32ini- cializirati, kot je prikazano v odseku 4.1.
a r m r f f t f a s t i n i t f 3 2 (& f f t i n s t a n c e , i 2 s b u f f e r s i z e∗2 ) ;
Odsek 4.1: Funkciji za inicializacijo strukture za raˇcunanje RFFT podamo
28 Gaˇsper Govekar
Slika 4.13: Primer analize spektra moˇci vzorcev na sliki 4.12. Zeleno oznaˇceni maksimum ustreza frekvenci 292,06 Hz.
naslov naˇse spremenljivke s strukturo in ˇzeleno dolˇzino podatkov RFFT.
4.4.1 Implementacija WSNAC
V odseku 4.2 je prikazan del funkcije za raˇcunanje viˇsine tona s pomoˇcjo WSNAC.
Najprej izraˇcunamo ˆm0. Kvadriramo vzorce float datain rezultat shra- nimo v va. Nato v vb izraˇcunamo vrednosti Hannovega okna na intervalu [0, W/2−1] in va zmnoˇzimo z vb. Obe tabeli ˇse zapolnimo z W niˇclami.
Zdajva vsebuje vrednosti x2w, vb paw, tako da lahko izraˇcunamo Fourier- jevo transformacijo obeh. Transformacijovazaˇcasno shranimo v tabelom,vb
Diplomska naloga 29
Slika 4.14: Nad vhodnimi podatki se zaradi simetrije rezultata pri realnih vhodih izraˇcuna kompleksni FFT poloviˇcne velikosti [1].
pa v r. Izraˇcunamo kvadrat absolutne vrednosti kompleksnih ˇstevil v obeh tabelah, tako da vsebujeta |Va| in |Vb|. Istoleˇzne elemente m in r zmnoˇzimo in rezultate shranimo v m. i-te vrednostim kopiramo v va na indeks 2∗i, na ostale indekse pa zapiˇsemo niˇcle, da zdajvavsebuje|Va| · |Vb|v formatu kom- pleksnih ˇstevil, ki ga priˇcakuje arm rfft fast f32. Izraˇcunamo ˇse inverzno transformacijo va in rezultat shranimo v m, ki zdaj vsebuje ˆm0.
Izraˇcunati moramo ˇse ˆr0. Vzorce float data zmnoˇzimo s Hannovim oknom in rezultat shranimo v va, tako da vsebuje wx. va dopolnimo z W niˇclami. Izraˇcunamo Fourierjevo transformacijo in rezultat shranimo v r. Izraˇcunamo kvadrat absolutne vrednosti kompleksnih ˇstevil. Vrednosti r kopiramo v va v formatu, kot ga priˇcakuje arm rfft fast f32. Izraˇcunamo inverzno transformacijo in rezultat shranimo v r, ki zdaj vsebuje ˆr0.
30 Gaˇsper Govekar
f l o a t 3 2 t wsnac method ( f l o a t 3 2 t∗ f l o a t d a t a , u i n t 3 2 t d a t a s i z e ,
a r m r f f t f a s t i n s t a n c e f 3 2∗ f f t h a n d l e r , f l o a t 3 2 t s a m p l i n g f r e q u e n c y ){
f l o a t 3 2 t va [ d a t a s i z e ∗2 ] ; f l o a t 3 2 t vb [ d a t a s i z e ∗2 ] ; f l o a t 3 2 t r [ d a t a s i z e ∗2 ] ; f l o a t 3 2 t m[ d a t a s i z e ∗2 ] ;
a r m m u l t f 3 2 ( f l o a t d a t a , f l o a t d a t a , va , d a t a s i z e ) ; f o r(i n t i =0; i<d a t a s i z e ; i ++){
vb [ i ]=0.5∗(1−a r m c o s f 3 2 ( 2∗PI∗i / d a t a s i z e ) ) ; }
a r m m u l t f 3 2 ( va , vb , va , d a t a s i z e ) ;
a r m f i l l f 3 2 ( 0 . 0 , va+d a t a s i z e , d a t a s i z e ) ; a r m f i l l f 3 2 ( 0 . 0 , vb+d a t a s i z e , d a t a s i z e ) ; a r m r f f t f a s t f 3 2 ( f f t h a n d l e r , va , m, 0 ) ; a r m r f f t f a s t f 3 2 ( f f t h a n d l e r , vb , r , 0 ) ; a r m c m p l x m a g f 3 2 (m, m, d a t a s i z e ) ;
a r m c m p l x m a g f 3 2 ( r , r , d a t a s i z e ) ; a r m m u l t f 3 2 (m, r , m, d a t a s i z e ) ; f o r(i n t i =0; i<d a t a s i z e ; i ++){
va [ 2∗i ]=m[ i ] ; va [ 2∗i + 1 ] = 0 . 0 ; }
a r m r f f t f a s t f 3 2 ( f f t h a n d l e r , va , m, 1 ) ;
window ( f l o a t d a t a , d a t a s i z e ) ;
a r m c o p y f 3 2 ( f l o a t d a t a , va , d a t a s i z e ) ; a r m f i l l f 3 2 ( 0 . 0 , va+d a t a s i z e , d a t a s i z e ) ; a r m r f f t f a s t f 3 2 ( f f t h a n d l e r , va , r , 0 ) ; a r m c m p l x m a g s q u a r e d f 3 2 ( r , r , d a t a s i z e ) ; f o r(i n t i =0; i<d a t a s i z e ; i ++){
va [ 2∗i ]= r [ i ] ; va [ 2∗i + 1 ] = 0 . 0 ; }
a r m r f f t f a s t f 3 2 ( f f t h a n d l e r , va , r , 1 ) ; }
Odsek 4.2: Funkcija za raˇcunanje posebno normalizirane avtokorelacije z okensko funkcijo.
Diplomska naloga 31
4.4.2 Implementacija analize spektra moˇ ci
V odseku 4.3 je prikazan del funkcije za raˇcunanje viˇsine tona z analizo spektra moˇci. Tabelo vzorcev float data zapolnimo z W niˇclami. Vzorce zmnoˇzimo s Hannovim oknom. Izraˇcunamo Fourierjevo transformacijo vzor- cev in rezultat shranimo v tabeli transform. Nato izraˇcunamo ˇse kvadrat absolutne vrednosti kompleksnih ˇstevil in rezultat shranimo v tabeli mag, ki zdaj vsebuje spekter moˇci zvoka.
f l o a t 3 2 t f f t m e t h o d ( f l o a t 3 2 t∗ f l o a t d a t a , u i n t 3 2 t d a t a s i z e ,
a r m r f f t f a s t i n s t a n c e f 3 2∗ f f t h a n d l e r , f l o a t 3 2 t s a m p l i n g f r e q u e n c y ){
f l o a t 3 2 t t r a n s f o r m [ d a t a s i z e ] ; f l o a t 3 2 t mag [ d a t a s i z e / 2 ] ;
window ( f l o a t d a t a , d a t a s i z e ) ;
a r m r f f t f a s t f 3 2 ( f f t h a n d l e r , f l o a t d a t a , t r a n s f o r m , 0 ) ; a r m c m p l x m a g s q u a r e d f 3 2 ( t r a n s f o r m , mag , d a t a s i z e / 2 ) ; }
Odsek 4.3: Funkcija za raˇcunanje spektra moˇci.
4.4.3 Ocena viˇ sine tona
Iz rezultata analiz moramo razbrati, katera frekvenca je najboljˇsi kandidat za frekvenco vzorˇcenega zvoka. Ker moramo preiskati zgolj interval frekvenc, ki jih glasbeni instrumenti lahko proizvedejo, glede na izbrano frekvenco vzorˇcenja, ni vedno treba izraˇcunati in preiskati vseh vrednosti. Izberemo lahko najviˇsji lokalni maksimum nad niˇclo v spektru moˇci ali WSNAC, vendar lahko pri takem pristopu zaradi kvantizacijske napake rezultat ni toˇcen, saj imamo na izbiro zgoljW razliˇcnih frekvenc. To lahko odpravimo z izraˇcunom vrha parabole, ki gre skozi izbran lokalni maksimum pri τ = n in sosednji vrednosti. Na sliki 4.15 sta prikazana rezultat posebno normalizirane avtoko- relacije z okensko funkcijo in maksimum parabole okoli najveˇcjega lokalnega maksimuma. Slika 4.16 je pribliˇzek primera s slike 4.15 na okolico najveˇcjega lokalnega maksimuma in maksimuma parabole.
32 Gaˇsper Govekar
Slika 4.15: WSNAC 4096 vzorcev ˇzviˇzganja s frekvenco 1186,68 Hz pri fre- kvenci vzorˇcenja 44100 Hz.
Koda, ki izraˇcuna maksimum parabole, je prikazana v odseku 4.4.
f l o a t 3 2 t p e a k i n f e r e n c e ( f l o a t 3 2 t x1 , f l o a t 3 2 t y1 , f l o a t 3 2 t x2 , f l o a t 3 2 t y2 , f l o a t 3 2 t x3 , f l o a t 3 2 t y3 ){
f l o a t 3 2 t p a r t i a l a 1 2=x1∗x1−x2∗x2 ; f l o a t 3 2 t p a r t i a l b 1 2=x1−x2 ;
f l o a t 3 2 t p a r t i a l y 1 2=y1−y2 ;
f l o a t 3 2 t p a r t i a l a 1 3=x1∗x1−x3∗x3 ; f l o a t 3 2 t p a r t i a l b 1 3=x1−x3 ;
f l o a t 3 2 t p a r t i a l y 1 3=y1−y3 ;
f l o a t 3 2 t a=( p a r t i a l y 1 3∗p a r t i a l b 1 2−p a r t i a l b 1 3∗p a r t i a l y 1 2 ) / ( p a r t i a l a 1 3∗p a r t i a l b 1 2−p a r t i a l b 1 3∗p a r t i a l a 1 2 ) ;
f l o a t 3 2 t b=( p a r t i a l y 1 2−p a r t i a l a 1 2∗a ) / p a r t i a l b 1 2 ; return −b / ( 2∗a ) ;
}
Odsek 4.4: Funkcija za raˇcunanje vrha parabole skozi toˇcke ob lokalnem maksimumu.
Diplomska naloga 33
Slika 4.16: Za raˇcunanje maksimuma parabole uporabimo z modro oznaˇcene toˇcke okoli lokalnega maksimuma WSNAC pri τ = 37. Maksimum parabole je oznaˇcen z rdeˇco toˇcko pri τ = 37,16, torej je napaka pri oceni frekvence zvoka pri frekvenci vzorˇcenjaFs= 44100 Hz enaka (44100/37−44100/37,16) Hz, kar znaˇsa 5,22 Hz.
Ko izberemo najverjetnejˇso frekvenco zvoka, moramo ugotoviti najbliˇzji polton in popravek, ki je potreben, da doseˇzemo ˇcisti polton. ˇCe privzamemo za oktavo 12 enakomerno porazdeljenih poltonov, lahko tone indeksiramo.
Ton A4 ima na primer indeks 69. Indeks najbliˇzjega poltona poljubne fre- kvence lahko izraˇcunamo po enaˇcbi 4.19. f v enaˇcbi predstavlja izraˇcunano frekvenco zvoka, fA4 pa frekvenco tona A4, ki je obiˇcajno 440 Hz, vendar se lahko tudi prilagaja glede na potrebe uporabnika. V odseku 4.4.3 je koda, ki izraˇcuna indeks najbliˇzjega poltona ocene frekvence zvoka in razliko med njima v centih oziroma stotinah poltona. Ker mora funkcija vrniti informa- cijo o najbliˇzjem poltonu in razliki, definiramo strukturo struct note.
p= 69 + 12log2( f
fA4) (4.19)
34 Gaˇsper Govekar
typedef s t r u c t n o t e{ u i n t 8 t m i d i i n d e x ; f l o a t 3 2 t o f f s e t ; } n o t e ;
n o t e n o t e i n f e r e n c e ( f l o a t 3 2 t f r e q u e n c y , f l o a t 3 2 t a4 ){ n o t e r e s u l t ;
f l o a t 3 2 t m i d i n o t e =69+12∗l o g 2 ( f r e q u e n c y / a4 ) ; f l o a t 3 2 t rounded =( f l o a t 3 2 t ) round ( m i d i n o t e ) ; r e s u l t . m i d i i n d e x =( u i n t 8 t ) rounded ;
r e s u l t . o f f s e t =m i d i n o t e−rounded ; return r e s u l t ;
}
Poglavje 5
Uporabniˇ ski vmesnik
Uporabniˇski vmesnik uglaˇsevalca implementiramo na LCD zaslonu s pomoˇcjo knjiˇznice iz paketa podpore za razvojno ploˇsˇco [11]. Za upravljanje zaslona uporabljamo naslednje funkcije:
• BSP LCD Init(), ki inicializira zaslon;
• BSP LCD LayerDefaultInit(), ki inicializira izbrano plast zaslona v formatu ARGB8888;
• BSP LCD SelectLayer(), ki spremeni aktivno plast;
• BSP LCD SetFont(), ki izbere font;
• BSP LCD Clear(), ki zapolni zaslon z izbrano barvo;
• BSP LCD SetTextColor(), ki nastavi barvo nadaljnjih likov ali pisave;
• BSP LCD SetBackColor(), ki nastavi barvo ozadja;
• BSP LCD DisplayStringAt(), ki izpiˇse niz z zaˇcetkom v izbrani toˇcki.
Vedno uporabljamo isti koordinatni sistem,LEFT MODE, ki privzame, da za x = 0 velja leva stranica zaslona, x rase proti desni stranici, y pa rase od zgornje stranice proti spodnji;
• BSP LCD DisplayChar(), ki izpiˇse znak z zaˇcetkom v izbrani toˇcki;
35
36 Gaˇsper Govekar
• BSP LCD FillRect(), ki izriˇse zapolnjen pravokotnik z zaˇcetkom v iz- brani toˇcki in doloˇceno viˇsino ter ˇsirino;
• BSP TS Init(), ki inicializira zaslon na dotik;
• BSP TS ITConfig(), ki nastavi obravnavanje dotikov s prekinitvami in
• BSP TS GetState(), ki v strukturo tipa TS StateTypeDef zapiˇse po- datke o ˇstevilu zaznanih dotikov in njihovih koordinatah.
Uporabniˇski vmesnik vsebuje:
• oceno viˇsine tona v Hz in ameriˇski standardni notni notaciji,
• indikator prevelike ali premajhne viˇsine tona,
• izbrano metodo uglaˇsevanja,
• izbrano frekvenco A4 in
• dva gumba, ki jo nastavita.
Na sliki 5.1 je prikazan uporabniˇski vmesnik uglaˇsevalca.
V odseku 5.1 je koda, ki nastavi zaslon, v odseku 5.2 pa koda, ki izriˇse zaˇcetno sliko. Ta vsebuje privzeto frekvenco tona A4, gumba za nastavljanje frekvence A4 in privzeto metodo uglaˇsevanja. x in y predstavljata ˇsirino in viˇsino zaslona. Koda se kliˇce zgolj enkrat na zaˇcetku aplikacije.
void l c d i n i t ( ){
BSP LCD Init ( ) ;
B S P L C D L a y e r D e f a u l t I n i t ( 1 , LCD FB START ADDRESS ) ; BSP LCD SelectLayer ( 1 ) ;
BSP LCD SetFont(&LCD DEFAULT FONT ) ; BSP LCD Clear (LCD COLOR DARKMAGENTA) ; l c d s t a r t d r a w ( ) ;
B S P T S I n i t ( x , y ) ; BSP TS ITConfig ( ) ; }
Odsek 5.1: Inicializacijska funkcija zaslona
Diplomska naloga 37
Slika 5.1: Uporabniˇski vmesnik uglaˇsevalca. Zgoraj levo je izpisana metoda analize zvoka. To polje sluˇzi tudi kot gumb za spremembo metode. Zgoraj desno je izpisana frekvenca tona A4 z gumbi za viˇsanje in niˇzanje te. Na sredini sta izpisana izraˇcunani polton in njegova frekvenca. Spodaj desno oziroma levo sta po potrebi izpisana indikatorja prenizkega ali previsokega poltona.
void l c d s t a r t d r a w (void){
BSP LCD SetTextColor (LCD COLOR BLACK ) ;
BSP LCD SetBackColor (LCD COLOR DARKMAGENTA) ; BSP LCD DisplayStringAt ( a 4 s t a r t x , a 4 s t a r t y , ( u i n t 8 t∗) ”A4=” , LEFT MODE ) ;
BSP LCD DisplayStringAt ( a 4 s t r s t a r t x , a 4 s t r s t a r t y , ( u i n t 8 t∗) a 4 s t r , LEFT MODE ) ;
BSP LCD DisplayChar ( p l u s s t a r t x , p l u s s t a r t y , ( u i n t 8 t ) ’+ ’ ) ;
BSP LCD DisplayChar ( m i n u s s t a r t x , m i n u s s t a r t y , ( u i n t 8 t ) ’−’ ) ;
BSP LCD DisplayStringAt ( m e t h o d s t a r t x , m e t h o d s t a r t y , ( u i n t 8 t∗) method , LEFT MODE ) ;
38 Gaˇsper Govekar
}
Odsek 5.2: Funkcija, ki izriˇse zaˇcetno sliko
Po vsaki oceni viˇsine tona se izpis posodobi s kodo v odseku 5.3. Preko starih izpisov ocene viˇsine tona in indikatorjev previsokega ali prenizkega tona nariˇsemo zapolnjen pravokotnik, da jih pobriˇsemo. Nato izpiˇsemo novo oceno frekvence in najbliˇzjega poltona ter po potrebi indikatorje razlike. Potrebo po indikatorju doloˇcimo glede na ocenjeno frekvenco in mejo okoli ˇcistega tona, pri kateri lahko sliˇsimo neuglaˇsenost. Pod 500 Hz je meja 3 Hz od poltona, nad 1000 Hz pa 0,6% frekvence poltona [8].
void l c d u p d a t e ( f l o a t 3 2 t f r e q u e n c y ){
BSP LCD SetTextColor (LCD COLOR DARKMAGENTA) ; BSP LCD FillRect ( 0 , p i t c h s t a r t y , x , f o n t h ) ;
BSP LCD FillRect ( s h a r p s t a r t x , s h a r p s t a r t y , 3∗f o n t w , f o n t h ) ; BSP LCD FillRect ( f l a t s t a r t x , f l a t s t a r t y , 3∗f o n t w , f o n t h ) ; BSP LCD SetTextColor (LCD COLOR BLACK ) ;
i f( f r e q u e n c y>0 . 0 ){
n o t e n o t e v a r=n o t e i n f e r e n c e ( f r e q u e n c y , ( f l o a t 3 2 t ) a4 ) ; s n p r i n t f ( tone , 1 4 , ”%s : %.2 fHz ” ,
n o t e s [ n o t e v a r . m i d i i n d e x %12] , f r e q u e n c y ) ;
BSP LCD DisplayStringAt ( p i t c h s t a r t x , p i t c h s t a r t y , ( u i n t 8 t∗) tone , LEFT MODE ) ;
i f( n o t e v a r . o f f s e t >0 . 1 2 ){
BSP LCD DisplayStringAt ( s h a r p s t a r t x , s h a r p s t a r t y , ( u i n t 8 t∗) ”<<<” , LEFT MODE ) ;
}
e l s e i f( n o t e v a r . o f f s e t <−0.12){
BSP LCD DisplayStringAt ( f l a t s t a r t x , f l a t s t a r t y , ( u i n t 8 t∗) ”>>>” , LEFT MODE ) ;
} } }
Odsek 5.3: Funkcija, ki posodobi sliko na zaslonu.
Ob dotiku zaslona se izvede rokovalnik prekinitve v odseku 5.4. S funk- cijo HAL GetTick beleˇzimo ˇcas med pritiski, da lahko ignoriramo prepogo-
Diplomska naloga 39 ste pritiske in smiselno razdelimo posodobitve, ko uporabnik drˇzi pritisk.
V strukturo touchscreen state preberemo podatke o pritiskih. Iteriramo po dotikih in kliˇcemo lcd update touch. Preverimo, ali koordinate dotika spadajo na povrˇsino gumbov za nastavljanje frekvence A4 ali izpisa metode uglaˇsevanja. Ob dotiku gumba posodobimo spremenljivko, ki hrani frekvenco A4 in izpiˇsemo novo vrednost. Ob dotiku polja z metodo nanjo nariˇsemo pra- vokotnik, da pobriˇsemo besedilo in izpiˇsemo novo metodo. Vrnemo boolean, ki pove, ali je uporabnik zahteval spremembo metode, da lahko v naslednjem ciklu vzorˇcenja in analize zvoka to izvedemo.
void HAL GPIO EXTI Callback ( u i n t 1 6 t GPIO Pin ){ i f( HAL GetTick ()−t i c k c o u n t>200){
BSP TS GetState(& t o u c h s c r e e n s t a t e ) ;
f o r(i n t i =0; i<t o u c h s c r e e n s t a t e . t o u c h D e t e c t e d ; i ++){
i f( l c d u p d a t e t o u c h ( t o u c h s c r e e n s t a t e . touchX [ i ] , t o u c h s c r e e n s t a t e . touchY [ i ] , s n a c )! = s n a c ){
method changed=t r u e ; }
}
t i c k c o u n t=HAL GetTick ( ) ; }
return; }
b o o l l c d u p d a t e t o u c h ( u i n t 1 6 t xpos , u i n t 1 6 t ypos , b o o l method ){ i f( xpos>=p l u s s t a r t x&&xpos<=p l u s s t a r t x+f o n t w ){
i f( ypos>=p l u s s t a r t y&&ypos<=p l u s s t a r t y+f o n t h&&a4<500){
a4++;
s n p r i n t f ( a 4 s t r , 6 , ”%dHz” , a4 ) ;
BSP LCD DisplayStringAt ( a 4 s t r s t a r t x , a 4 s t r s t a r t y , ( u i n t 8 t∗) a 4 s t r , LEFT MODE ) ;
}
e l s e i f( ypos>=m i n u s s t a r t y&&ypos<=m i n u s s t a r t y+f o n t h∗2&&a4>400){
a4−−;
s n p r i n t f ( a 4 s t r , 6 , ”%dHz” , a4 ) ;
BSP LCD DisplayStringAt ( a 4 s t r s t a r t x , a 4 s t r s t a r t y , ( u i n t 8 t∗) a 4 s t r , LEFT MODE ) ;
40 Gaˇsper Govekar
} }
e l s e i f( xpos>=m e t h o d s t a r t x&&xpos<=m e t h o d s t a r t x+f o n t w∗4&&
ypos>=m e t h o d s t a r t y&&ypos<=m e t h o d s t a r t y+f o n t h ){
method =! method ; i f( method ){
s t r c p y ( method , ”SNAC” ) ; } e l s e{
s t r c p y ( method , ”FFT” ) ; }
BSP LCD SetTextColor (LCD COLOR DARKMAGENTA) ;
BSP LCD FillRect ( m e t h o d s t a r t x , m e t h o d s t a r t y , f o n t w∗4 , f o n t h ) ; BSP LCD SetTextColor (LCD COLOR BLACK ) ;
BSP LCD DisplayStringAt ( m e t h o d s t a r t x , m e t h o d s t a r t y , ( u i n t 8 t∗) method , LEFT MODE ) ;
}
return method ; }
Odsek 5.4: Rokovalnik prekinitve ob dotiku zaslona.
Poglavje 6 Meritve
V tem poglavju so predstavljene meritve natanˇcnosti metod za oceno viˇsine tona. Natanˇcnost smo izmerili tako, da smo strune violine uglasili z uglaˇse- valcem aplikacije Soundcorset [5] in ocenili frekvenco tona z uglaˇsevalcem na razvojni ploˇsˇci. Z obema metodama smo za vsako struno violine opravili 100 ocen. Napako doloˇcimo kot absolutno razliko v oceni frekvence med uglaˇsevalcem na razvojni ploˇsˇci in uglaˇsevalcem Soundcorset [5]. Zadovoljiva napaka ocene frekvence tonov strun je najveˇc 3 Hz [8].
V tabeli 6.2 so prikazani povpreˇcja in standardni odkloni ocen frekvenc z metodo SNAC ter povpreˇcja in standardni odkloni ocen frekvenc z metodo analize spektra moˇci za vsako struno. V tabeli 6.1 so prikazane frekvence uglaˇsenih strun violine. Analiza spektra moˇci v 10% meritev napaˇcno zazna veˇckratnik frekvence igranega tona, torej enak ton v viˇsji oktavi, zato so v tabeli 6.2 prikazani ˇse povpreˇcja in standardni odkloni ocen analize spektra moˇci brez napaˇcnih ocen. Iz meritev lahko razberemo, da obe metodi nudita zadovoljivo natanˇcnost, vendar lahko analiza spektra moˇci proizvede napaˇcne zaznave.
41
42 Gaˇsper Govekar
Struna Frekvenca uglaˇsene strune
E 659,26 Hz
A 440 Hz
D 293,66 Hz
G 196 Hz
Tabela 6.1: Frekvence tonov uglaˇsenih strun violine.
Struna Povpreˇcje SNAC Povpreˇcje spektra moˇci Povpreˇcje brez viˇsjih harmonikov E 658,32±1,31 Hz 784,63±287,34 Hz 660,84±1,04 Hz
A 439,58±0,6 Hz 489,72±138,1 Hz 440,98±0,86 Hz D 294,18±0,67 Hz 381,2±212,71 Hz 291,94±0,73 Hz G 196,22±0,24 Hz 724,29±254,9 Hz 197,4±0,31 Hz Tabela 6.2: Povpreˇcji in standardna odklona 100 ocen frekvence strun vio- line z metodama SNAC in analiza spektra moˇci. Ker lahko analiza spektra moˇci napaˇcno zazna frekvenco enakega tona v viˇsji oktavi, sta navedena ˇse povpreˇcje in standardni odklon, ki ne upoˇstevata napaˇcnih zaznav viˇsjih har- monikov.
Poglavje 7 Zakljuˇ cek
Na razvojni ploˇsˇci STMF746G-Discovery smo razvili kromatski uglaˇsevalec, ki uporabniku omogoˇca izbiro med dvema metodama analize zvoka. Pred- stavili smo potrebno strojno opremo na razvojni ploˇsˇci, ki vsebuje zaslon na dotik, digitalne mikrofone, avdio kodirnik, avdio vmesnik in mikrokontroler.
Predstavili smo kodo, ki implementira vzorˇcenje zvoka in pripravo vzorcev na analizo. Podrobno smo opisali avtokorelacijo, funkcijo kvadratne razlike, posebno normalizirano avtokorelacijo in analizo spektra moˇci. Predstavili smo implementacijo posebno normalizirane avtokorelacije in analize spektra moˇci na razvojni ploˇsˇci. Predstavili smo kodo, ki implementira uporabniˇski vmesnik in opisali njegov izgled. Izmerili smo natanˇcnost implementiranih metod uglaˇsevanja pri uglaˇsevanju violine in ugotovili, da sta obe metodi zadovoljivo natanˇcni, vendar lahko analiza spektra moˇci napaˇcno zazna ton v viˇsji oktavi.
43
44 Gaˇsper Govekar
Literatura
[1] Dokumentacija cmsis dsp knjiˇznice. Dosegljivo: https://www.keil.
com/pack/doc/CMSIS/DSP/html/index.html. [Dostopano: 13. 9.
2021].
[2] Dokumentacija wm8994 codeca. Dosegljivo: https://statics.
cirrus.com/pubs/proDatasheet/WM8994_Rev4.6.pdf. [Dostopano:
28. 7. 2021].
[3] Navodila za uporabo stm32f746g-discovery. Dosegljivo: https://www.
st.com/resource/en/user_manual/um1907-discovery-kit-for- stm32f7-series-with-stm32f746ng-mcu-stmicroelectronics.pdf.
[Dostopano: 28. 7. 2021].
[4] Predstavitev serijskega audio vmesnika. Dosegljivo: https:
//www.st.com/content/ccc/resource/training/technical/
product_training/group0/35/bb/c4/23/6a/74/4a/2b/STM32F7_
Peripheral_SAI/files/STM32F7_Peripheral_SAI.pdf/_jcr_
content/translations/en.STM32F7_Peripheral_SAI.pdf. [Do- stopano: 28. 7. 2021].
[5] Spletna stran aplikacije soundcorset. Dosegljivo: https://
soundcorset.com/. [Dostopano: 2. 10. 2021].
[6] Spletna stran stm32f746g-discovery. Dosegljivo: https://www.st.com/
en/evaluation-tools/32f746gdiscovery.html. [Dostopano: 28. 7.
2021].
45
46 Gaˇsper Govekar [7] Stm32f746ng. Dosegljivo: https://www.st.com/en/
microcontrollers-microprocessors/stm32f746ng.html. [Do- stopano: 28. 7. 2021].
[8] Birger Kollmeier, Thomas Brand, and Bernd Meyer. Perception of spe- ech and sound. In Springer handbook of speech processing, pages 61–82.
Springer, 2008.
[9] Philip McLeod. Fast, accurate pitch detection tools for music analysis.
PhD thesis, 2008.
[10] Philip McLeod and Geoff Wyvill. A smarter way to find pitch. InICMC, volume 5, pages 138–141, 2005.
[11] ST Microelectronics. 32f746gdiscovery. https://github.com/
STMicroelectronics/32f746gdiscovery, 2021.
[12] Eric W. Weisstein. Wiener-khinchin theorem. From MathWorld–
A Wolfram Web Resource. https://mathworld.wolfram.com/Wiener- KhinchinTheorem.html. [Dostopano 23. 9. 2021].