Psykoakustik Ljudtrycksnivå Människans hörsel är ganska väl studerad och det finns bra modeller för den. Detta kan utnyttjas vid ljudkodning för att placera distorsionen (kvantiseringsbruset) så att det ska märkas så lite som möjligt. Alla moderna ljudkodningsmetoder utnyttjar psykoakustik vid kodningen, vilket ger en signifikant förbättring av den upplevda kvaliteten. Ljudet kan representeras som en tryckvåg med trycket p. Ljudtrycksnivån (sound pressure level, SPL) definieras som SPL =10 log 10 ( p p 0 ) 2 [db] där p 0 =20µP a är det minsta ljudtryck som kan uppfattas för en ton vid 2 khz. Ofta beskriver man ljud i termer av ljudintensiteten I, vilket är effekten per ytenhet (W/m 2 ) i ljudvågen. I är proportionell mot p 2. Sålunda kan SPL också beräknas som SPL =10 log 10 I I 0 [db] där I 0 =10 12 W/m 2 motsvarar intensiteten för en våg med tryck p 0. TSBK35 ljudkodning p.1/42 TSBK35 ljudkodning p.2/42 Hörnivå(loudness) Hörselns omfång Hörnivån för ett ljud definieras som ljudtrycksnivån på en sinuston vid 1 khz som uppfattas som lika starkt som ljudet. Hörnivån beror på intensiteten, frekvensinnehåll och längd. Hörnivån är ett subjektivt mått. Figuren visar hur hörnivån varierar med nivå och frekvens för tonsignaler. Hörnivån 0 db sätter en gräns för hur svaga ljud som kan uppfattas, den så kallade hörseltröskeln. Figuren visar hela omfånget för människans hörsel, samt typiska värden för tal och musik. TSBK35 ljudkodning p.3/42 TSBK35 ljudkodning p.4/42
Samplingsfrekvens Hörseltröskel Eftersom människor hör frekvenser över 20 khz väldigt dåligt brukar man lägga samplingsfrekvensen strax över dubbla detta värde. På CD-skivor ligger samplingsfrekvensen på 44.1 khz. Filmljud har oftast samplingsfrekvensen 48 khz. Ljudformat som är tänkta att användas för högkvalitativt ljud tillåter oftast ännu högre samplingsfrekvenser, som 96 khz eller 192 khz. Figuren visar hur hörseltröskeln typiskt varierar med åldern. TSBK35 ljudkodning p.5/42 TSBK35 ljudkodning p.6/42 Hörseltröskel Maskering Hörseltröskeln är viktig i ljudkodningssammanhang. Frekvenskomponenter i insignalen som ligger under tröskeln kan tas bort utan att lyssnaren märker någon skillnad. Om kvantiseringsbruset för de frekvenskomponenter som skickas ligger under tröskeln kommer det inte att vara märkbart. Observera att när man kodar vet man inte vilken volym som lyssnaren kommer att använda. Fel som inte hörs vid en volym kan höras vid en högre volym. Ett vanligt antagande vid kodning är att kvantiseringen av originaldatat (t.ex. 16 bitar/sampel på CD) är sådan att det kvantiseringsbruset ligger precis under hörseltröskeln. Förutom hörseltröskeln kan man även utnyttja ett fenomen som kallas maskering (eng. masking) vid ljudkodning. Maskering innebär att starka ljud dränker ut svaga ljud. Dessa svaga ljud kan då tas bort helt eller kvantiseras hårdare. Maskeringen uppträder både i tid (temporal maskering) och i frekvens. Avståndet mellan nivån för en signalkomponent och den maskeringskurva den ger upphov till vid en viss frekvens brukar benämnas signal to mask ratio, SMR. Ju högre SMR, desto mindre maskering. TSBK35 ljudkodning p.7/42 TSBK35 ljudkodning p.8/42
Frekvensmaskering Smalbandigt brus Ett starkt ljud maskerar svagare ljud vid närliggande frekvenser. Figuren visar hur smalbandigt brus maskerar tonsignaler vid olika frekvenser. TSBK35 ljudkodning p.9/42 TSBK35 ljudkodning p. 10/42 Smalbandigt brus Toner Figuren visar hur en ton vid 1 khz maskerar andra tonsignaler. Figuren visar hur smalbandigt brus maskerar tonsignaler vid olika nivåer. TSBK35 ljudkodning p. 11/42 TSBK35 ljudkodning p. 12/42
Temporal maskering Kritiska band Som synes i tidigare kurvor beror maskeringens bredd på frekvensen hos den maskerande komponenten. Detta är direkt kopplat till hur hörselsinnet fungerar rent fysiskt. Man brukar därför beskriva signalen i den så kallade barkskalan, där man delar in frekvenserna i band som motsvarar hörselsinnets frekvensupplösning. Ett starkt ljud maskerar svagare ljud både innan (pre-masking) och efteråt (post-masking). Post-masking varar mycket längre än pre-masking. TSBK35 ljudkodning p. 13/42 TSBK35 ljudkodning p. 14/42 Barkskalan Smalbandigt brus z f l f u f z f l f u f Bark Hz Hz Hz Bark Hz Hz Hz 0 0 100 100 13 2000 2320 320 1 100 200 100 14 2320 2700 380 2 200 300 100 15 2700 3150 450 3 300 400 100 16 3150 3700 550 4 400 510 110 17 3700 4400 700 5 510 630 120 18 4400 5300 900 6 630 770 140 19 5300 6400 1100 7 770 920 150 20 6400 7700 1300 8 920 1080 160 21 7700 9500 1800 9 1080 1270 190 22 9500 12000 2500 10 1270 1480 210 23 12000 15500 3500 11 1480 1720 240 24 15500 22050 6550 12 1720 2000 280 Figuren visar hur maskeringen för smalbandigt brus ser ut beskriven i barkskalan. Maskeringen ser i princip likadan ut för alla frekvenser (jämför med tidigare figur.) TSBK35 ljudkodning p. 15/42 TSBK35 ljudkodning p. 16/42
Smalbandigt brus Psykoakustiska modeller Vid ljudkodning kodas signalen typiskt i block av storleksordningen 1000 sampel. För att utnyttja psykoakustiken mäter man blockets innehåll av olika frekvenskomponenter (helst i barkskalan). Man försöker även klassificera de olika banden som toner eller brus. Prototypmaskeringskurvor för de olika banden kombineras med hörseltröskeln till en total SMR-kurva. Bitar delas ut till de olika banden så att SNR (om möjligt) är större än SMR för alla band. Om bitarna inte räcker, delas de ut så att den totala skillnaden mellan SNR och SMR maximeras. Skillnaden mellan SNR och SMR brukar kallas mask to noise ratio, MNR. Maskering för smalbandigt brus vid 1 khz vi olika nivåer. TSBK35 ljudkodning p. 17/42 TSBK35 ljudkodning p. 18/42 MDCT MDCT En populär transform i ljudkodningssammanhang är MDCT (modified DCT) som är en utvidgning av vanlig DCT till överlappande block. Antag att x t (k) är sampel i signaldomänen och X t (m) sampel i transformdomänen för block t. n 1 X t (m) = w(k) x t (k) cos( π 2n (2k +1+n )(2m +1)) 2 för m =0,..., n 2 1 k=0 w(k) är en fönsterfunktion som ska uppfylla vissa krav: w(k) =w(n 1 k), w(k) 2 + w(k + n 2 )2 =1 Transformen tar alltså n sampel och transformerar till n 2 transformkomponenter. För nästa block tar man n 2 sampel från förra blocket och n 2 nya sampel. TSBK35 ljudkodning p. 19/42 Inverstransform: y t (p) =w(p) 4 n 2 1 X t (m) cos( π n 2n (2p +1+n )(2m +1)) 2 för p =0,...,n 1 för q =0,..., n 2 1 m=0 Exempel på fönsterfunktioner: x t (q) =y t 1 (q + n 2 )+y t(q) w(k) =sin( π n (k + 1 2 )) w(k) =sin( π 2 sin2 ( π n (k + 1 2 ))) TSBK35 ljudkodning p. 20/42
Fönstring i MDCT Blockstorlek vs kvantiseringsbrus Ett block om 512 sampel från en musiksignal. I början är det tyst och drygt halvägs in i blocket börjar musiken. 0.25 0.2 0.15 0.1 0.05 0 0.05 0.1 0.15 0.2 0.25 0 50 100 150 200 250 300 350 400 450 500 TSBK35 ljudkodning p. 21/42 TSBK35 ljudkodning p. 22/42 Blockstorlek vs kvantiseringsbrus Blockstorlek vs kvantiseringsbrus Blocket transformeras (DCT), kvantiseras och inverstransformeras. 0.25 0.2 0.15 0.1 0.05 0 0.05 0.1 0.15 0.2 0.25 Om vi istället delar blocket i tvåblock om 256 sampel och transformerar och kvantiserar får vi 0.25 0.2 0.15 0.1 0.05 0 0.05 0.1 0.15 0.2 0 50 100 150 200 250 300 350 400 450 500 Kvantiseringen av transformkomponenterna gör att den del av signalen som var tyst nu innehåller ljud. Om blockstorleken är för stor kan det hända att den temporala maskeringen inte räcker till, utan att man hör lite brus innan det riktiga ljudet börjar (pre-echo). 0.25 0 50 100 150 200 250 300 350 400 450 500 Bruset innan ljudet börjar är nu mycket kortare och maskeras lättare. I ljudkodare är det därför vanligt att man kan välja mellan flera olika blockstorlekar för att kunna anpassa kodningen till signalen. TSBK35 ljudkodning p. 23/42 TSBK35 ljudkodning p. 24/42
MPEG-1 audio Joint stereo Ljudkodningsdelen i videokodningsstandarden MPEG-1. Stöder samplingsfrekvenser på 32, 44.1 och 48 khz. En eller två kanaler: Mono Två monokanaler (Dual channel) Stereo Simple stereo: En högerkanal och en vänsterkanal. Joint stereo: Utnyttja beroendet mellan kanalerna. Datatakt på 32 till 224 kbit/s per kanal. Beroendet mellan de två kanalerna kan utnyttjas på två olika sätt. Middle/Side stereo: Istället för att koda vänster och höger kanal, kodar man summan respektive skillnaden mellan höger och vänster kanal. Skillnadskanalen innehåller oftast lite information och är därför lättkodad. Intensity stereo: För höga frekvenser ges stereoinformationen mer av tidsenvelopen än av det exakta frekvensinnehållet. För frekvenser över någon nivå kodar man bara en kanal med frekvensinnehåll, men man skickar olika skalfaktorer för höger och vänster kanal. Middle/Side och Intensity stereo kan kombineras. TSBK35 ljudkodning p. 25/42 TSBK35 ljudkodning p. 26/42 MPEG-1 layers MPEG-1, layer I Tre nivåer (layers) av komprimering, med olika komplexitet och kompression Layer I Enkel, passar för > 128 kbit/s per kanal (DCC) Layer II Mer komplex, passar för datatakter runt 128 kbit/s per kanal (DAB) Layer III Störst komplexitet, ger bäst kompression, godtagbar kvalitet vid 64 kbit/s per kanal (mp3) Alla tre nivåerna bygger i grunden på en delbandskodare med 32 lika breda frekvensband. Kodas i frames om 384 sampel (12 sampel vardera från varje delband). En psykoakustisk modell används för att fördela bitar till de olika delbanden. Varje delband ges mellan 0 och 15 bitar, och en skalfaktor som används för att skala om kvantiseraren. Kvantiseringen är likformig. Skalfaktorerna och bittilldelningen skickas som sidoinformation i bitströmmen. Detta är alltså en form av zonkodning, där man byter kvantisering för varje frame. TSBK35 ljudkodning p. 27/42 TSBK35 ljudkodning p. 28/42
MPEG-1, layer II MPEG-1, layer III Kodas i frames om 1152 sampel (3 12 sampel vardera från varje delband). En psykoakustisk modell används för att fördela bitar till de olika delbanden. Varje delband ges mellan 0 och 15 bitar, och 0-3 skalfaktorer (varje grupp om 12 sampel ha var sin skalfaktor, eller såkan de dela på skalfaktor) som används för att skala om kvantiserarna. Kvantiseringen är likformig. Skalfaktorerna och bittilldelningen skickas som sidoinformation i bitströmmen. 1152 sampel/frame. Först använder man samma delbandskodare som i layer I och II. Därefter görs en MDCT inom delbanden, med blocklängd 12 eller 36, för att förfina frekvensuppdelningen. Därigenom får man en frekvensuppdelning som bättre kan anpassas till barkskalan. Till skillnad från Layer I och II så används olikformig kvantisering (en typ av kompander). Skalfaktorer tilldelas till olika frekvensband, som nästan motsvarar kritiska band, för att skala om kvantiserarna. Statisk huffmankodning (fixa kodord) används för att ytterligare minska datatakten. Standarden tillåter också att man kan låta omgivande frames använda det tillgängliga bitutrymmet om de skulle visa sig vara svårare att koda. På så sätt kan den momentana datatakten variera något från block till block. TSBK35 ljudkodning p. 29/42 TSBK35 ljudkodning p. 30/42 Vorbis Envelop typ 1 Open source-projekt för att göra en ljudkodare som inte innehåller några patenterade delar. MDCT med blockstorlek mellan 64 och 8192 (jämna tvåpotenser). Envelopen till transformdatat beräknas och skickas kompakt som frekvenssvaret till ett linjärt filter, eller som en styckvis linjär (i db-skala) funktion. Residualen, dvs transformdatat dividerat med envelopen vektorkvantiseras och huffmankodas. TSBK35 ljudkodning p. 31/42 TSBK35 ljudkodning p. 32/42
Kvantisering och huffmankodning Residualkodning Ett antal olika vektorkvantiserare skickas som sidoinformation. Antalet dimensioner maximalt 65535. I praktiken används bara små dimensioner. Kvantiserarna är antingen generella (explicita värden på alla vektorer), eller gitterkvantiserare (rekonstruktionspunkterna läggs ut i ett regelbundet mönster). Till varje kvantiserare skickas även en huffmankod. Varje kanal delas in i ett antal lika stora partitioner. För varje partition specificeras vilka kvantiserare som ska användas för den partitionen. Man kan koda med en enda kvantiserare, eller så kan man kvantisera i flera pass (multi-stage VQ). Det finns även en möjlighet att interleava flera kanaler till en enda kanal innan kvantiseringen. Kvantiseringspass TSBK35 ljudkodning p. 33/42 Kvantiseringspass TSBK35 ljudkodning p. 34/42 TSBK35 ljudkodning p. 35/42 TSBK35 ljudkodning p. 36/42
Interleaving Kanalkorrelation Korrelationen mellan kanalerna (i stereofallet höger och vänster kanal) kan utnyttjas på några olika sätt. Genom interleaving kan man utnyttja beroendet mellan kanalerna i vektorkvantiseringen. Ett annat alternativ är att koda det största värdet samt skillnaden mellan det största och det minsta värdet. Skillnadssignalen kan sen kvantiseras hårdare än maxsignalen. I extremfallet tas den bort helt. Den enda stereoinformationen ges då av kanalernas olika envelop (jämför Intensity Stereo i mp3) TSBK35 ljudkodning p. 37/42 TSBK35 ljudkodning p. 38/42 Dolby Digital Dolby Digital, forts. Stöder samplingsfrekvenser på 32, 44.1 och 48 khz. Upp till 5+1 kanaler. Datatakt mellan 32 och 640 kbit/s. Ljud kodas i frames som består av 1536 sampel. I första hand används MDCT med n = 512, Om ett block innehåller en transient från låg amplitud till hög används i stället MDCT med n = 256. Man kan kombinera kanaler så att man bara skickar en kanal med frekvensinnehåll plus skalfaktorer för alla kanalerna (jfr intensity stereo för mp3). För rena stereosignaler kan man koda antingen vänster och höger kanal för sig, eller summa- och skillnadskanaler (jfr middle/side stereo för mp3). Transformkoefficienterna kodas med exponent plus normerad mantissa. Bittilldelningen skickas inte explicit. Istället skickar man en SMR-kurva och så får avkodaren göra bittilldelningen till mantissorna utgående från den kurvan och de avkodade exponenterna. Naturligtvis bör kodaren göra bittilldelningen på samma sätt. TSBK35 ljudkodning p. 39/42 TSBK35 ljudkodning p. 40/42
AAC Spectral Band Replication (SBR) Advanced Audio Coding Kodningsmetod som först standardiserades i MPEG-2 och senare också i MPEG-4. MDCT med blockstorlek n = 2048 eller n = 256. Olikformig kvantisering (en typ av kompander). Huffmankodning av kvantiserade koefficienter (färdiga tabeller att välja bland, 2 eller 4 koefficienter i taget). I MPEG-4 tillkom saker som aritmetisk kodning och vektorkvantisering. En metod där man skär bort högpassinnehållet ur ljudsignalen innan kodningen. Vid avkodningen återskapas högfrekvensinnehållet från lågpassinnehållet. Man skickar även med lite extra information i det kodade datat för att hjälpa till vid återskapandet av högpasssignalen. Kan användas tillsammans med nästan vilken kodningsmetod som helst. I kombination med mp3 kallas det mp3pro. I kombination med AAC kallas det aacplus. Påstås ge 25-50 procents minskning av datatakten vid samma upplevda kvalitet. aacplus används i DRM (Digital Radio Mondiale) som är digitalradio via kort- och mellanvågsbanden, samt i den nya versionen av DAB. TSBK35 ljudkodning p. 41/42 TSBK35 ljudkodning p. 42/42