distorsjonen for lossy audio codecs

K

knutinh

Gjest
Hva er karakteristikken til feilen ved f.eks "mp3" lossy kompresjon sammenlignet med et typisk musikk-signal, definert som:

E = Sref - Smp3

Hvor Sref er et referansesignal (f.eks CD) og Smp3 er komprimert/dekomprimert signal.

Kan den karakteriseres som hvit støy, eller er den sterkt korrelert med referanse-signalet? Med andre ord, kan man grovt sett si at lossy audio codecs utenfra ser ut som redundans-fjerning (lossless kompresjon) overlagret med støy (fra de forskjellige kvantiseringene)? Alternativt, vil Smp3 avvike sterkt fra Sref fordi "auditory model" tillater store avvik fra instantan amplitude innenfor hva som er "hørbart identisk"?

Gitt en variabel, ukjent transmisjonskanal hvor man ønsker kort forsinkelse og enveis kommunikasjon. Er det da fornuftig å bruke mp3/AAC som en "baseline" prediktor som pakkes godt inn i feilbeskyttende mekanismer, mens E (referert over) sendes med bare mulighet for feildeteksjon (ikke feilkorreksjon). Jeg vil da anta at hvis bufferlengde/interleaving er tilpasset kanal-variasjonen så vil "sårbare" lossy komprimerte lyddata overleve og gi brukeren en nært garantert nedre grense for lytteopplevelse, mens "audiofil" data mottas når situasjonen tillater det.

mvh
Knut
 
L

Lydtekniker

Gjest
Jeg har ikke noen inngående teknisk forklaring, men dersom du hører på differansen mellom original og MP3-enkodet fil, vil du høre en slags pumpende form for støy som varierer i frekvensinnhold. Du kan faktisk innimellom kjenne igjen musikkstykket bare ved å høre på hva kodeken har pælma ut av lyd.

Forøvrig husker jeg det var en diskusjon rundt dette med hvorvidt MP3 er dårlig til å kode diskantinformasjon uten hørbare artifakter kontra bass (no pun intended), og jeg har fått en forklaring på dette: Diskant trenger nødvendigvis høy samplefrekvens, og det er forholdsvis mer å hente for algoritmen i å utføre perseptuell koding her enn i bassbåndene som krever lav samplefrekvens for å gjengis uten artifakter. Diskant krever enkelt og greit mer data og det er dermed mer gevinst på å "kaste ut" diskantinformasjon. Det stemmer hvertfall overens med egne lytteerfaringer.
 
K

knutinh

Gjest
Jeg har ikke noen inngående teknisk forklaring, men dersom du hører på differansen mellom original og MP3-enkodet fil, vil du høre en slags pumpende form for støy som varierer i frekvensinnhold. Du kan faktisk innimellom kjenne igjen musikkstykket bare ved å høre på hva kodeken har pælma ut av lyd.

Forøvrig husker jeg det var en diskusjon rundt dette med hvorvidt MP3 er dårlig til å kode diskantinformasjon uten hørbare artifakter kontra bass (no pun intended), og jeg har fått en forklaring på dette: Diskant trenger nødvendigvis høy samplefrekvens, og det er forholdsvis mer å hente for algoritmen i å utføre perseptuell koding her enn i bassbåndene som krever lav samplefrekvens for å gjengis uten artifakter. Diskant krever enkelt og greit mer data og det er dermed mer gevinst på å "kaste ut" diskantinformasjon. Det stemmer hvertfall overens med egne lytteerfaringer.
10kHz til 20kHz krever like mye informasjon som 0Hz til 10kHz i en direkte PCM koding. Perseptuelt er det liten tvil om at den øverste oktaven tilfører lite informasjon. Dermed tilfører vel mp3 mer kvantiseringsstøy i de øvre oktaver. Dette kan også sees av ørets følsomhetskurver som peaker rundt 1-2kHz.

Det er sagt om mp3 at en av begrensningene er at det øverste båndet ikke har samme frihetsgrad som andre bånd. Jeg tror det var kvantiserings-nivåer som må "lånes" fra et av de andre båndene, men enkoderen står fritt til å gjøre et annet bånd suboptimalt for å gjøre ideelle prioriteringer i topp-båndet?

-k
 

Ivar_Loekken

Hi-Fi freak
Ble medlem
03.12.2006
Innlegg
2.486
Antall liker
2
E = Sref - Smp3
Da jeg skrev diplom snuste jeg litt på dette og brukte følgende måltall:

SER=10*log(Sx/Se)

der Sx=1/N*sum(x[n]^2,n=0,N) og Se er ditto for E SER er mao signal-to-error-ratio. Målte følgende for MP3 for en gitt fil:

128kbps: SER=49.0dB
192kbps: SER=60.4dB
256kbps: SER=67.1dB

Alt enkodet med LAME.

Kan den karakteriseres som hvit støy, eller er den sterkt korrelert med referanse-signalet?
Den er sterkt korrelert med signalet. Det er jo nettopp slik lossy kompresjon virker, den fjerner irrelevant informasjon ved å la kvantiseringsstøyen vokse med signalnivået, dvs følge maskeringsprinsippet. Hvordan man styrer tillatt kvantiseringsstøy bestemmes av div. psykoakustiske modeller og en eller annen form for subbåndkoding.

Med andre ord, kan man grovt sett si at lossy audio codecs utenfra ser ut som redundans-fjerning (lossless kompresjon) overlagret med støy (fra de forskjellige kvantiseringene)? Alternativt, vil Smp3 avvike sterkt fra Sref fordi "auditory model" tillater store avvik fra instantan amplitude innenfor hva som er "hørbart identisk"?
Det siste.

Gitt en variabel, ukjent transmisjonskanal hvor man ønsker kort forsinkelse og enveis kommunikasjon. Er det da fornuftig å bruke mp3/AAC som en "baseline" prediktor som pakkes godt inn i feilbeskyttende mekanismer, mens E (referert over) sendes med bare mulighet for feildeteksjon (ikke feilkorreksjon). Jeg vil da anta at hvis bufferlengde/interleaving er tilpasset kanal-variasjonen så vil "sårbare" lossy komprimerte lyddata overleve og gi brukeren en nært garantert nedre grense for lytteopplevelse, mens "audiofil" data mottas når situasjonen tillater det.
Kanskje det, men for å finne E må du også dekode i senderen. E vil også selv kreve endel kanalkapasitet, selv om den er liten og kan komprimeres effektivt lossless. Hvis kanalen er variabel men nominelt tillater lossless eller nær lossless transmisjon tror jeg det vil være enklere med en bufret lossless enkoding hvor man går over i en lossy modus dersom bufferet tømmes (dvs at kanalen ikke kan ta unna data). Enkleste måten å gjøre det på er bare å barbere LSBer når dette kreves.
 
K

knutinh

Gjest
Da jeg skrev diplom snuste jeg litt på dette og brukte følgende måltall:

SER=10*log(Sx/Se)

der Sx=1/N*sum(x[n]^2,n=0,N) og Se er ditto for E SER er mao signal-to-error-ratio.
Er N lengden av hele sekvensen? Altså:
SER=10*log10((1/N)*sum(x.^2)/(1/N)*sum(e.^2))
=10*log10(sum(x.^2)/sum(e.^2))
(for å snakke MATLABsk)

Den er sterkt korrelert med signalet. Det er jo nettopp slik lossy kompresjon virker, den fjerner irrelevant informasjon ved å la kvantiseringsstøyen vokse med signalnivået, dvs følge maskeringsprinsippet.
Dette høres ut som en beskrivelse av ulineær kvantisering. Er det virkelig slik mp3 etc kan karakteriseres? Jeg trodde at kvantiseringsstøyen vokste med entropien i signalet, slik at "vanskelig modellerbare" sekvenser med effekten smørt utover frekvens (og stor varians) gav mye kvantiseringsstøy, mens enkle sinus-signaler gav tilnærmet null.

Er ikke maskering i tid og maskering i frekvens mer dominerende enn maskering i effekt?

Hvordan man styrer tillatt kvantiseringsstøy bestemmes av div. psykoakustiske modeller og en eller annen form for subbåndkoding.
Nettopp. Men jeg ville tro at selv om enkoderen er ustandardisert så har de ganske lik karakteristikk.

Kanskje det, men for å finne E må du også dekode i senderen. E vil også selv kreve endel kanalkapasitet, selv om den er liten og kan komprimeres effektivt lossless. Hvis kanalen er variabel men nominelt tillater lossless eller nær lossless transmisjon tror jeg det vil være enklere med en bufret lossless enkoding hvor man går over i en lossy modus dersom bufferet tømmes (dvs at kanalen ikke kan ta unna data). Enkleste måten å gjøre det på er bare å barbere LSBer når dette kreves.
Hvordan foreslår du å kunne detektere kanalens kapasitet hvis man har enveis kommunikasjon? :)

For å være mer spesifikk så er tanke-eksperimentet mitt som følger:

Trådløs kommunikasjon til bakhøyttalere (og evt fronter) i et hjemme-hifianlegg er en bra ting. Radio-elektronikk koster, mens regnekraft er billig (hvis man uansett skal basere seg på digital overføring og D/A). Man kan tenke seg infra-rød, radio eller ultra-lyd kanal (forsåvidt også Power-line). Disse har det felles at sender/mottakerutstyr har en kostnad, og det er sannsynligvis mest økonomisk å ha en kompleks sentralisert sender ved signalkilde, og så rimelige mottakere ved hver av 2,5 eller 7 høyttalere.

Hver installasjon kan ha svært forskjellige forhold, og også tidsvariasjon (hindringer, støykilder og flytting av sender/mottaker). Måten å gjøre alle fornøyd på er å ha en robust mekanisme som maskerer disse best mulig.

En måte å gjøre det på er å ha lang buffring/interleaving, men det fungerer bare når kanalbåndbredden i gjennomsnitt garantert overstiger kilderaten innen tidsvinduet, eller hvis man har en feedback-mekanisme som kan redusere produserte bits adaptivt.

Hvis man ikke har mulighet for en slik feedback-kanal må man basere seg på en konstant bitrate som er robust for feil. Et av Shannons teoremer sier løselig at hvis kildekodingen utføres perfekt (bitstrømmen ser ut som hvit støy) så kan man deretter utføre perfekt kanalkoding og ikke tape noe. I det reelle tilfellet hvor kildekodingen ikke er korrekt så er det derimot noe å tjene på å utføre disse to operasjonene joint (nå høres jeg ut som Ramstad).

I skissen min definerer jeg en nedre rate som kreves tilgjengelig (enten instantant eller midlet over et tidsrom) med lossy komprimert lyd inklusive overhead til feilkorrigerende kode. Jeg sier også at det er et reelt perseptuelt tap ved å bruke denne sammenlignet med tapsfritt kodet kilde, slik at det for brukeren vil være en gevinst å høre tapsfritt kodet kilde når det er mulig, både grunnet tids-varians og installasjons-varians. Enkelte vil kanskje fjerne hindringer for å oppnå bedre båndbredde mens andre er fornøyd med å ha blomsten der den er. Gitt at spriket mellom lossy ("god nok") og lossless koding er så stort (f.eks 64kbit AAC vs 7-800kbit FLAC) så er faktisk feilsignalet det som krever størst båndbredde.

Men det er ikke gitt at "E" er like sårbar som bitfeil som AAC-strømmen. Faktisk hviler hele opplegget på at bitfeil i AAC-strømmen er katastrofal og vil føre til hørbar degradasjon, mens bitfeil i korreksjonsstrømmen slett ikke sikkert er hørbart.

mvh
Knut
 

Ivar_Loekken

Hi-Fi freak
Ble medlem
03.12.2006
Innlegg
2.486
Antall liker
2
Er N lengden av hele sekvensen? Altså:
SER=10*log10((1/N)*sum(x.^2)/(1/N)*sum(e.^2))
=10*log10(sum(x.^2)/sum(e.^2))
(for å snakke MATLABsk)
Ja. 1/N forsvinner nødvendigvis, den er med i notasjonen av formelle hensyn.

Dette høres ut som en beskrivelse av ulineær kvantisering. Er det virkelig slik mp3 etc kan karakteriseres? Jeg trodde at kvantiseringsstøyen vokste med entropien i signalet, slik at "vanskelig modellerbare" sekvenser med effekten smørt utover frekvens (og stor varians) gav mye kvantiseringsstøy, mens enkle sinus-signaler gav tilnærmet null.
Første ledd i MP3 er en filterbank som deler opp signalet i 32 subbånd som tilsvarer det som i psykoakustikken kalles kritiske bånd, disse desimeres med en faktor 32, så det er i praksis en transform. Videre deles hvert av disse subbåndene opp i 18 diskrete frekvenskomponenter vha DCT (diskret cosinus tranform). Innenfor hvert subbånd avgjør man på grunnlag av kraftigste komponent hvor maskeringsterskelen er for de øvrige. De som er under maskeringsterskelen fjernes og de øvrige kvantiseres så grovt at kvantiseringsstøyen ligger tett oppunder maskeringsterskelen. Da kan det meste av informasjonen fjernes fordi det er svært stor grad av maskering innenfor et kritisk bånd. Til slutt enkoder man dataene med entropikoding (en lett modifisert Huffmann-koding). Dekoderen består i praksis kun av en Huffman-dekoder og en rekonstruksjons-filterbank.

Er ikke maskering i tid og maskering i frekvens mer dominerende enn maskering i effekt?
Det er nettopp maskering av frekvensnære komponenter man utnytter som følge av subbåndfiltreringen, men maskeringen som sådan er jo i effekt. Maskering i tid inngår ikke i MP3, men derimot i AAC.

Hvordan foreslår du å kunne detektere kanalens kapasitet hvis man har enveis kommunikasjon? :)
Den kan vel anslås. Hvis man skrur antall LSBer som kastes avhengig av utvikling av bufferinnhold så kan det justeres kontinuerlig. Bl.a. MLP (Meridian Lossless, som brukes i DVDA) har denne muligheten nettopp med hensyn på trådløs overføring.

Trådløs kommunikasjon til bakhøyttalere (og evt fronter) i et hjemme-hifianlegg er en bra ting.
Enig!

Radio-elektronikk koster...
I vår merkelige hifi-verden så koster kabler mye mer...

Disse har det felles at sender/mottakerutstyr har en kostnad, og det er sannsynligvis mest økonomisk å ha en kompleks sentralisert sender ved signalkilde, og så rimelige mottakere ved hver av 2,5 eller 7 høyttalere.
Jepp, slik som feks Nordic NRF24Z1.

En måte å gjøre det på er å ha lang buffring/interleaving, men det fungerer bare når kanalbåndbredden i gjennomsnitt garantert overstiger kilderaten innen tidsvinduet, eller hvis man har en feedback-mekanisme som kan redusere produserte bits adaptivt.
Det kan justeres adaptivt med et buffer i senderen som fylles kontinuerlig. Hvis kanalen ikke kan "ta unna" bufferet komprimerer man mer inntil balanse er gjenoppnådd. Slik gjøres det i praksis.

I skissen min definerer jeg en nedre rate som kreves tilgjengelig (enten instantant eller midlet over et tidsrom) med lossy komprimert lyd inklusive overhead til feilkorrigerende kode. Jeg sier også at det er et reelt perseptuelt tap ved å bruke denne sammenlignet med tapsfritt kodet kilde, slik at det for brukeren vil være en gevinst å høre tapsfritt kodet kilde når det er mulig, både grunnet tids-varians og installasjons-varians. Enkelte vil kanskje fjerne hindringer for å oppnå bedre båndbredde mens andre er fornøyd med å ha blomsten der den er. Gitt at spriket mellom lossy ("god nok") og lossless koding er så stort (f.eks 64kbit AAC vs 7-800kbit FLAC) så er faktisk feilsignalet det som krever størst båndbredde.
En "myk" overgang mellom lossy og lossless er selvfølgelig ønsket i en VBR-situasjon. Å fjerne LSBer fungerer overraskende bra dersom den nominelle raten er høy nok til lossless eller nær lossless. Men mer elaborerte metoder kan selvsagt tenkes implementert.

Men det er ikke gitt at "E" er like sårbar som bitfeil som AAC-strømmen. Faktisk hviler hele opplegget på at bitfeil i AAC-strømmen er katastrofal og vil føre til hørbar degradasjon, mens bitfeil i korreksjonsstrømmen slett ikke sikkert er hørbart.
Jeg tror jeg skjønner opplegget, men gitt at "E" er entropikodet er også bitfeil i denne katastrofal, i hvertfall innenfor en gitt blokk (de fleste komprimeringsmetoder er blokkdelt, så dekoderen kan hente seg inn igjen ved starten av neste blokk hvis data i nåværende blir korrumpert). Fordelen vil være at tap av en blokk med "E" ikke vil være vesentlig lydforringende hvis jeg forstår deg riktig. Imidlertid vet jeg ikke om det vil være mer effektivt enn å bruke buffering for å adaptivt regulere komprimeringsgraden og sende all data med redundans for solid feilkorreksjon. Man kan godt se for seg at den hopper mellom ulike modi. Da får man utnyttet kanalkapasiteten hele tiden, intuitivt bør det bli mer effektivt, overhead til feilkorreksjon er ganske liten og er dessuten bygget inn i de fleste sendere.
 
K

knutinh

Gjest
Første ledd i MP3 er en filterbank som deler opp signalet i 32 subbånd som tilsvarer det som i psykoakustikken kalles kritiske bånd, disse desimeres med en faktor 32, så det er i praksis en transform. Videre deles hvert av disse subbåndene opp i 18 diskrete frekvenskomponenter vha DCT (diskret cosinus tranform). Innenfor hvert subbånd avgjør man på grunnlag av kraftigste komponent hvor maskeringsterskelen er for de øvrige. De som er under maskeringsterskelen fjernes og de øvrige kvantiseres så grovt at kvantiseringsstøyen ligger tett oppunder maskeringsterskelen. Da kan det meste av informasjonen fjernes fordi det er svært stor grad av maskering innenfor et kritisk bånd. Til slutt enkoder man dataene med entropikoding (en lett modifisert Huffmann-koding). Dekoderen består i praksis kun av en Huffman-dekoder og en rekonstruksjons-filterbank.
Dette er greit. Man tilfører "støy" ved å selektivt fjerne frekvenskomponenter, og å kvantisere de man slipper igjennom.

Maskering i tid inngår ikke i MP3, men derimot i AAC.
Aha. Dette var jeg ikke klar over.

Den kan vel anslås. Hvis man skrur antall LSBer som kastes avhengig av utvikling av bufferinnhold så kan det justeres kontinuerlig. Bl.a. MLP (Meridian Lossless, som brukes i DVDA) har denne muligheten nettopp med hensyn på trådløs overføring.
Snakker vi forbi hverandre nå? Jeg snakker om å modulere en carrierfrekvens (fm eller am eller hva man nå måtte finne ut er lurt) med en bitstrøm (som kommer fra buffer). Dette forsterkes, sendes ut fra en antenne/IR-diode/supersonisk transducer og avsender mister all kontroll med dataene. Dermed er det umulig å anslå hva som skjer ved mottakersiden. Mottakeren kan være skrudd av eller 10km unna for det senderen vet :)


I vår merkelige hifi-verden så koster kabler mye mer...
Nå tenker jeg på å modulere "gullbølger" som har uovertrufne audiofile egenskaper (og pris selvfølgelig).

Jepp, slik som feks Nordic NRF24Z1.
Snik-reklame? =)

Det kan justeres adaptivt med et buffer i senderen som fylles kontinuerlig. Hvis kanalen ikke kan "ta unna" bufferet komprimerer man mer inntil balanse er gjenoppnådd. Slik gjøres det i praksis.
Tenk DVD. Hvis bitfeil oppstår ved avlesning så er man pukka nødt til å håndtere dem på mottakssida siden ingen feedbackmekanisme finnes tilbake til masteringstudioet som lar dem kjøre ned Qp i MPEG2 komprimeringa.

En "myk" overgang mellom lossy og lossless er selvfølgelig ønsket i en VBR-situasjon. Å fjerne LSBer fungerer overraskende bra dersom den nominelle raten er høy nok til lossless eller nær lossless. Men mer elaborerte metoder kan selvsagt tenkes implementert.


Jeg tror jeg skjønner opplegget, men gitt at "E" er entropikodet er også bitfeil i denne katastrofal, i hvertfall innenfor en gitt blokk (de fleste komprimeringsmetoder er blokkdelt, så dekoderen kan hente seg inn igjen ved starten av neste blokk hvis data i nåværende blir korrumpert).
Et godt poeng. Hvis "E" hadde kunnet tilnærmes som hvit støy så ville det uansett ikke vært noen verdi i å entropikode den og man kunne bare pakke den inn i CRC som man ønsket. Enkeltstående bit-feil (eller "pakketap") vill da få begrenset temporær utstrekning.

Det er interessant å prøve å kombinere kildekoding/kanalkoding og kanalmodellering for å komme opp med noe nytt (og forhåpentligvis) spennende =)

-k
 

Ivar_Loekken

Hi-Fi freak
Ble medlem
03.12.2006
Innlegg
2.486
Antall liker
2
Snakker vi forbi hverandre nå? Jeg snakker om å modulere en carrierfrekvens (fm eller am eller hva man nå måtte finne ut er lurt) med en bitstrøm (som kommer fra buffer). Dette forsterkes, sendes ut fra en antenne/IR-diode/supersonisk transducer og avsender mister all kontroll med dataene. Dermed er det umulig å anslå hva som skjer ved mottakersiden. Mottakeren kan være skrudd av eller 10km unna for det senderen vet :)
OK, da misforstod jeg. Senderen skal gå med konstant hastighet uansett, men feilraten vil variere pga begrenset kanalkapasitet. Da blir det vel en trade-off mellom kost til feilkorreksjonsalgoritmer (hvis overheaden for korreksjonsalgoritmen du vil kjøre på "grunndataene" er liten for å bruke den på alle data er det liten vits å separere) og kodingseffektivitet. Hvis du mister data kan jo også mottageren håndtere det med feks prediksjon.
 
Topp Bunn