Opetusohjelma

Spektriseen maailmaan!

Ajattelin kirjoittaa erillinen viesti perustekijät äänen digitointi ja taajuusanalyysi ennen kuin teen opetusohjelma noin havaita muistiinpanoja soitti kitara sisällä Unity3D. en mene hienoja yksityiskohtia tässä viestissä, mutta vain vain naarmuttaa pintaa, jotta antaa sinulle perus johdatus aiheeseen ja saada sinut perehtynyt joitakin termejä.

Äänen digitointi

Ääni, kuten kuulemme sen analogisessa verkkotunnuksessa, on jatkuva aaltomuoto. Kun siirrymme digitaaliseen verkkotunnukseen, kuten kun Tallennamme äänen tietokoneelle, näytämme sitä tietyllä taajuudella ja signaali pilkkoutuu, koska käytämme nyt erillistä signaalinkäsittelyjärjestelmää. Tämä tarkoittaa, että menetämme joitakin tietoja, jotka meillä oli alkuperäisessä, jatkuvassa aaltomuodossa. Tähän Nyquistin näytteenottolause tulee. Sen mukaan signaalista on otettava näytteitä kaksi kertaa niin suurella taajuudella kuin signaalin sisältämä korkein taajuus. Joten, jos näytteenottotaajuus on 44100Hz, joka on melko paljon standardi nykyään, suurin taajuus voimme digitoida tulee 22050hz. Tätä taajuutta kutsutaan myös Nyquistin taajuudeksi, joka on otetun signaalin kaistanleveys ja vastaa puolta kyseisen signaalin näytteenottotaajuudesta. Teoriassa signaalin kaistanleveyttä suurempi Nyquist-taajuus riittää mahdollistamaan täydellisen signaalin rekonstruktion näytteistä, mutta prosessi vaatii ihanteellisen suodattimen, joka läpäisee jotkin taajuudet muuttumattomina ja vaimentaa kaikki muut kokonaan. Käytännössä tämä ei ole mahdollista, koska jonkin verran alijäädytystä ei voida välttää. Nyquistin taajuutta korkeammat taajuudet ”taittavat” noin Nyquistin taajuuden takaisin matalammiksi taajuuksiksi. Esimerkiksi jos näytteenottotaajuus on 20kHz, Nyquist taajuus on 20000Hz ja 21000hz signaali taittuu, tai alias, 19000hz.

Anna Fourier

Olin soittanut ja säveltänyt musiikkia jo vuosia, kun sain ensimmäisen kerran tietää äänen taajuusspektristä. Olin kuullut termejä kuten taajuuksien ja signaalin kaistanleveys aiemmin, koska isäni oli CB radio harrastaja takaisin päivä. Äänianalyysiohjelmistopaketeissa, jotka näin, huomasin tämän asian nimeltä FFT. En tiennyt, mikä se oli, mutta pian tajusin, että se oli avain signaalin sisältämien taajuuksien näyttämiseen. Myöhemmin selvisi, että sitä kutsuttiin nopeaksi Fourier-muunnokseksi.

Kaivetaan vähän syvemmälle perustuksiin. Aikana minun engineering opinnot minulla oli kurssi noin signaaliteoria, joka oli melko paljon kaikki matematiikka ja sai käyttöön erilaisia muunnoksia. Yksi niistä oli diskreetti Fourier-muunnos (DFT). DFT on matemaattinen tapa siirtää signaalidataa sen alkuperäisestä verkkotunnuksesta (usein ajasta) taajuusalueelle. Tulonäytteet ovat kompleksilukuja ja myös lähtökertoimet ovat kompleksilukuja. Ulostulevien sinusoidien taajuudet ovat perustaajuuden kokonaislukukertoimia, joiden vastaava jakso on näytteenottovälin pituus. DFT: n kautta saatu sinusoidien yhdistelmä on siis jaksollinen saman ajan kanssa. Nopea Fourier-muunnos, FFT, on algoritmi DFT: n laskemiseksi ja se on käänteisessä suhteessa paljon nopeampi, mutta tuottaa silti samat tulokset. Nyt, se on jopa voit löytää itsellesi sopiva toteutus FFT. Jopa yksi on rakennettu Unity3D-moottoriin.

Miten se toimii

Onnistuitko lukemaan näin pitkälle? Hyvä. Nyt tiedät, että voimme saada taajuustiedot pois signaalin käyttämällä FFT. Ja tiedät, että on olemassa rajoituksia taajuuksille, joita meillä voi olla digitoidussa signaalissamme. Nyt sitten, kun syötämme dataa FFT-toiminnollemme, meidän on päätettävä, kuinka monta säiliötä haluamme käyttää analyysiimme. Mitä enemmän astioita käytämme, sitä kauemmin se kestää, mutta tulos on myös tarkempi. Tämä tarkoittaa, että meidän on löydettävä sopiva tasapaino hakemuksellemme. ”Mutta mistä aloitan?”ehkä jotkut teistä kysyvät. Ensinnäkin, sinun pitäisi käyttää näytteen määrä, joka on teho kaksi, kuten 512, 1024 ja niin edelleen. Sitten voimme soveltaa matematiikkaa määrittääksemme, minkä resoluution saamme tuolla määrällä roskiksia.

Resolution = Samplerate / astiat

Esimerkiksi, jos meidän näytteenottotaajuus on edellä mainittu Fs = 44100Hz ja käytämme näytteen määrä N = 1024, saamme 44100/1024 = 43.0664062 noin. Tämä tarkoittaa, että alin taajuus voimme havaita on noin 44Hz ja saamme yksi taajuus ” bin ” noin välillä 43.07 Hz. Nyt tämä saattaa antaa sinulle tarpeeksi hyvä lähentämisestä sovelluksiin, jotka eivät vaadi kovin tarkkoja taajuustietoja ja voit tehdä, jos äänisignaali tulossa on vahvin basso, keski-tai diskanttitaajuudet. Mutta on myös toinen asia harkittavana. Todellisen tulosignaalin osalta FFT: n toinen puolisko ei sisällä hyödyllistä lisätietoa. Tämä johtuu Nyquistin taajuudesta, joten bin at N/2 vastaa taajuutta Fs/2, joten viimeinen käyttökelpoinen bin reaalimaailman sovelluksissa on N / 2-1. Jotkin FFT-kirjastot eivät edes palauta lokeroiden arvoja yli N/2, joten muista tarkistaa toteutuksesi tästä pienestä yksityiskohdasta.

Muutama sana tarkkuuden parantamisesta

Mitä tarkkuuteen tulee, sinulla on kaksi vaihtoehtoa. Laske näytteenottotaajuutta tai lisää astioiden määrää. Tai tehdä molempia. Se todella riippuu sovelluksesta ja erityisesti taajuusalueista, joissa tarvitset eniten tarkkuutta. Mutta on kolmaskin tapa parantaa tarkkuutta. Kippurassa. FFT: hen voidaan soveltaa ikkunatoimintoa spektrivuotojen vähentämiseksi. Jos tutkittavassa aaltomuodossa on kaksi eritaajuista sinusoidia, vuoto voi vaikeuttaa niiden spektristä tunnistamista. Jos toinen signaaleista on vahvempi, se voi peittää toisen kokonaan ja jos taajuudet ovat samanlaisia ja sinusoidit ovat yhtä vahvoja, vuoto voi tehdä niistä varauksettomia. Yksi käytetyimmistä ikkunatoiminnoista on Blackman-Harris-ikkuna, joten se lienee hyvä lähtökohta. Anna mennä, Käynnistä Wikipedia ja lue lisää ikkunan toimintoja. Siellä on paljon matematiikkaa takana, sekä kaikki asiat käsitellään tässä viestissä.

FFT yksikössä 3D

Unity3D tarjoaa meille Getspectrumdata-toiminto AudioSource ja AudioListener luokat. Se on joitakin rajoituksia määrä FFT Roskakorit, mutta toiminto tarjoaa helpon tavan kerätä taajuustiedot äänileikkeitä. On olemassa useita ikkunan toimintoja käytettävissä se liian. Seuraavassa viestissä aion näyttää sinulle yksinkertaisen käyttötapauksen GetSpectrumData-toiminnolle ja toivottavasti saan esittelyvideoni siitä pian myös valmiiksi.