hang tömörítés
Minél alacsonyabb a bitráta az adatfolyam, annál többet tud átadni. Ha sikerül szorítani a hangját 1-2 kb / s, akkor lehet kommunikálni, a parttól 25km (a CC1125 adóvevő). Próbáljuk fejleszteni egy hang codec egyedül, használata nélkül kész megoldásokat, mint codec2.
Hogy a hang? Ebben több elemből áll:
- magánhangzók
- mássalhangzók - zaj - robbanásveszélyes: n, k, t ...
- mássalhangzó - zaj - réshangokat / fütyülő: a, w, w, f, a ...
- mássalhangzó - hangzás - remegés: p
- mássalhangzók - hangzás - nazális: m, n
A magánhangzók lehet tekinteni, mint a zene - ez egy tiszta hang + annak felhangjai különböző amplitúdójú. Mássalhangzók - zaj hangzik egy másik hangszín és hangzás (hang + zaj).
Magán- és mássalhangzók kitűnnek nagy információ tartalmát, hasonlítsa össze:
A sors fintora, hogy magánhangzók nagyon könnyű leírni egy kis paraméterek. Ezek frekvenciák nonmultiple pályán gyakorisága, így az összes leírás csökken néhány értéket: + pitch frekvencia harmonikus amplitúdója. És a domináns frekvenciát kell pontosan mérhető (pontossággal 16 bit), de a felharmonikusok amplitúdói tolerálható és nagyon erős decimálás - tehát minden egyes amplitúdó lehet tömöríteni 1 bájt vagy falat.
Kezdjük magánhangzók, mert olyan könnyű leírni. Kidolgoztam egy algoritmust Python, egyszerűen azért, mert nagyon gyors és egyszerű.
Olvasás hangfájlt
Felvettem a hangját „a” a saját teljesítmény és a teljesítményt a lányok, és ott tartotta a nyers formában dikretizatsiey 8 kHz formájában 16 bites előjeles egész Audacity segítségével. Azt, hogy egy függvény a fájl olvasása:
Folyton csak 800 rendbeli, azaz 100ms hang - ebben a szegmensben még mindig lehetséges, hogy kap jelet rögzítettek, megváltoztathatatlan. A következő képkocka majd elemzik az egymást követő szakaszaiban az algoritmust. Építünk a keletkező hullámforma hang:
Építése a spektrum
Kiszámoljuk a Fourier-transzformáció a kapott hangot. Fourier visszaadja a komplex amplitúdó, amelynek ki lehet számítani az amplitúdó és fázis. Fül gyakorlatilag érzéketlen a fázis, így tudjuk menteni a felét az átviteli sebesség, így teljesen - hagyjuk csak az amplitúdó kiszámításához funkcióját absz.
Szép sor, igaz? Növekszik az érdeklődés a mi részlet:
Jól látható az alapvető hang és annak harmonikusok, a spektrum periodikus struktúra.
A helyszín egyes csúcsok viszonya határozza meg: gyakoriság = minták / időszakban. Az abszcisszán az aránya a csúcs kerethossz mintákban (ebben az esetben 800), hogy a hullám időszakra.
Van azonban egy probléma: ha Ön tiszta szinusz gyakorisággal nem tartozik egy kiválasztott frekvencia rácsot, ez lesz nem egy delta impulzus után Fourier-transzformáció (egyszeri tüske), és néhány maszatos alak:
Ez a hatás csökkenthetõ, szükséges alkalmazni a jelet az úgynevezett „ablak”. Azt szorozzuk meg a jelet Hanning ablakot.
Piros vonal - a spektrum az eredeti jel, zöld - spektrumú jelet Hanning ablak:
Sokkal jobb volt: a csúcsok vannak jelölve erősebb, a fél-szélessége kisebb és kevesebb zaj a spektrumban.
Az épület cepstrum
Itt lehet már látni mindent, amit kell, de hogyan lehet programozottan megtalálják a csúcsok és amplitúdója? Hajlamos a szokásos keresést helyi maximum - a hálátlan feladat: csúcsok kissé eltolódhat, sokszorosítani, és így csak azokat az egész időszak, és ez lehet szó tört. Hogy vagyunk, hogy meghatározza ezt az időszakot? Az azonos módon azt állapítottuk meg, időszakok az eredeti audio jelet, a Fourier-transzformáció. Csak akkor először logaritmusa kínálatunkat, hogy kiemelje a csúcs erősebb.
És ez vonatkozik a Fourier-transzformáció:
Mi építettünk nevezzük furcsa szó „cepstrum» (Cepstrum) - a név, akkor egyértelmű, hogy ez valami referencia spektrum.
Keresés alapfrekvencia
Ebben, meg kell csak az első csúcs, amelynek a helyzete pontosan azonos lesz az időszakban a kívánt pályát. Meg fogjuk találni a szokásos csúcs keresést a globális maximum korlátozása mellett a keresési frekvencia 80..270 Hz, mert ebben a tartományban az alapdíj felnőtt hangokat. A mi esetünkben ez az időszak tartomány 30..100 (8000 / 270..8000 / 80).
Az én esetemben, az alapfrekvencia volt 113Gts és a lány -, pontosan 200 Hz, ami jól korrelál az idézet a Wikipedia:
rekord felhangokkal
Most minden lehetséges, hogy visszatérjen a spektrum, menjen végig a harmonikus az alapfrekvencia és a megtalált rekordot amplitúdója. Én egy kicsit kiterjeszti a felhang frekvenciákat, hogy megtalálják az összessége csúcsok (csúcs terjednek, mert eltérés van a hálózati frekvencia az alapvető frekvencia).
Még a kilencedik harmonikus amplitúdója összemérhető amplitúdója az alapfrekvencia, így meg kell írni egy csomó felhangokkal, legalább 8-10. Másrészt, ez elegendő ahhoz, hogy korlátozza a sávszélesség 4 kHz, magasabb harmonikusok nem annyira szükséges hangátvitel.
csomagolási lehetőségek
Mert leírást egy hang frame (10 ms a mi esetünkben) előírja:
- alapfrekvencia - 2 byte
- N * amplitúdója felhangok - N / 2 bájt
Általában elég, nem több, mint 10 felharmonikusok, azaz jellemző vesz 2 + 5 = 7 bájt. A kiindulási keret lemért 1600 bájt, azaz az összenyomódás mértékét is
230 alkalommal. De meg kell értenünk, hogy ahogy megszorította csak magánhangzók, mássalhangzók mindig van -, amely sajnos közvetíteni sokkal több információt.
Kicsomagolása és hang összehasonlítás
audio dekompressziós vissza lehetne tenni a inverz Fourier-transzformáció, de még könnyebbé teszi - létrehoz egy szinuszhullám kívánt frekvenciájú és amplitúdójú, és adjunk hozzá őket össze.
Nyisd az Audacity forrás fájlt, és helyreáll, és hasonlítsa össze hullámformák:
Nagyon hasonló. A tárgyalás során is, úgy tűnik, 10 harmonikusok a hang sokkal jobb, mint 8.