Laboration 2: Musikkodning
Uppgift
Målet med projektet är att konstruera en kodare och avkodare för musikdata. Kodaren ska uppfylla vissa krav på distorsion och datatakt.
Arbetet ska utföras i grupper om 1 eller 2 studenter.
Musik
Originalmusiken är mono, samplad med 44.1 kHz samplingsfrekvens och kvantiserad till 16 bitar/sampel. Det innebär att den okomprimerade datatakten är 705.6 kbit/s.
Krav
Projektet redovisas med en skriftlig rapport som beskriver hur er kodare fungerar och vilka prestanda ni får. För att bli godkänd krävs det att kodaren uppfyller följande krav:
- Datatakten ska vara högst 128 kbit/s, vilket motsvarar ca. 2.90 bitar/sampel.
- Signal-brus-förhållandet får vara lägst 25 dB.
- Den algoritmiska fördröjningen i avkodaren får vara högst 4096 sampel, dvs vid avkodning får ett sampel inte bero av andra sampel som ligger mer än 4096 steg framåt i tiden. Till exempel så sätter detta en begränsning på hur stora transformer man kan använda. Däremot får saker som bara beräknas i kodaren (t.ex. huffmankoder) bero av hela filen.
Distorsion och datatakt ska beräknas på hela den stora filen (eller medelvärdesbildas över de 16 småfilerna). Tänk på att även räkna med hur stor plats sidoinformationen (information om hur kvantiseringen ser ut, kodträd, et.c.) tar.
Kommentera i rapporten hur den upplevda ljudkvaliteten blir. Pröva gärna att koda annan musik än den givna med er kodare.
Metoder
Alla metoder är tillåtna, så länge ni kan förklara hur de fungerar. Det går att lösa problemet med alla metoder som tas upp i kursen (skalär kvantisering följt av källkodning som tar hänsyn till beroendet mellan sampel, vektorkvantisering, prediktiv kodning, transformkodning, delbandskodning.)
På samma sätt som i lab 1 så är det inte nödvändigt att göra eventuell källkodning ända ner på bitnivå, utan det räcker med att räkna hur många bitar som skulle gå åt vid kodningen.
I Matlab kan man enkelt läsa WAV-filer med funktionen audioread.
Den ger en vektor med samplen skalade så de ligger mellan -1 och 1.
Om ni vill skriva era avkodade musikdata till en
WAV-fil, så använder ni funktionen audiowrite.
Några saker att tänka på om ni väljer att arbeta i Matlab:
- Loopar är långsamma i Matlab, försök utnyttja Matlabs möjligheter till vektorberäkningar istället.
- Undvik att lägga till element i slutet av vektorer så att de ändrar storlek kontinuerligt, eftersom detta gör att Matlab måste hålla på och allokera om minne. Skapa istället tillräckligt stora vektorer från början (t.ex. genom att använda zeros) och ändra deras innehåll.
Redovisning
Resultatet redovisas med en skriftlig rapport som beskriver hur ni löste uppgiften och vilka resultat ni får.
Lämna en papperskopia av rapporten direkt till Harald, eller skicka en elektronisk version (PDF) via email.
Ange namn, personnummer och epostadress för alla gruppmedlemmar.
Tack
Tack till Kaye för att vi får använda hennes sång “Kiss-think-blink-think”.