I2S-verzwakker om DAC-oversturing te voorkomen

De rest......
(streaming-/computeraudio graag in de daarvoor aangewezen forumgroep)

Moderators: Barry2001, Beheerdersteam

MarcelvdG
Berichten: 519
Lid geworden op: do 31 jan 2013, 21:47
Locatie: Haarlem

I2S-verzwakker om DAC-oversturing te voorkomen

Berichtdoor MarcelvdG » ma 26 feb 2018, 0:03

Hallo allemaal,

Veel digitale opnames zijn tegenwoordig harder dan volle schaal. Ze worden genormaliseerd zodat de grootste monsters precies op 0 dB ten opzichte van volle schaal uitkomen, maar vaak is het dan zo dat de golfvorm tussen de monsters in iets boven de 0 dB uit moet steken. Digitale interpolatiefilters zoals die in DAC's en in bemonsteringsrequentieomzetters kunnen daardoor overstuurd raken. Een goede uitleg met mooie plaatjes en metingen aan CD's vind je op https://benchmarkmedia.com/blogs/applic ... recordings Ze hebben een opname gevonden waarbij dit effect 3,7 keer per seconde optreedt, en het is nog niet eens een platgecomprimeerde opname!

Om dit probleem op te lossen, moet je het signaal op een of andere manier zachter zien te maken voordat het een digitaal filter met te weinig of geen headroom in gaat (en de meeste DAC-interpolatiefilters en de meeste filters in bemonsteringsfrequentieomzetters hebben geen of zeer weinig headroom). Als de muziek op een computer staat kun je het hernormaliseren naar een wat lager niveau of een ReplayGain tag uitdelen, als je een digitale volumeregeling hebt die voor alle digitale filters zit kun je die niet helemaal op maximum zetten.

I2Sattenuatordeluxe.jpg


Heb je dat allemaal niet, dan kun je het I2S-signaal dat naar het eerste digitale filter gaat een bitje opschuiven. Het schema stelt een schakeling voor die dit zou horen te doen (met aan- en uitschakelbare verzwakking en ook nog een knop om de polariteit om te keren). Ik schrijf bewust "zou horen" want het is slechts een papieren ontwerp. Mijn eigen DAC heeft voldoende headroom, dus ik heb deze schakeling zelf niet nodig. De schakeling zou 384 kHz PCM aan moeten kunnen bij 3,3 V of 5 V voeding.

Nadelen zijn een 6,02 dB lagere signaal-ruisverhouding (het signaal is immers zachter) en dat het LSB weg kan vallen. Heb je bijvoorbeeld 24 bits data en een filter met 24 bits I2S-interface, dan komt het LSB niet door, wat een extra kwantisatievervorming van ongeveer -140 dBFS oplevert. Met 16 bits interfaces wordt het wat vervelender: -92 dBFS.

Met vriendelijke groeten,
Marcel
Je hebt niet voldoende permissies om de bijlagen van dit bericht te bekijken.

Gebruikersavatar
Ah!buis
Berichten: 11734
Lid geworden op: ma 15 nov 2010, 22:36
Locatie: Overijse

Re: I2S-verzwakker om DAC-oversturing te voorkomen

Berichtdoor Ah!buis » ma 26 feb 2018, 12:46

Wel lollig knobbelwerk, met bitjes schuiven :D
Heel lang geleden ook wel's verdiept in dat I²C gebeuren, zou weer aan de studie moeten omdat weer op te halen :( , de animo is niet zo groot, vergeet te vlug weer :-$
Voor wat 't waard is, twee verdachte dingen.
Je schakeld zo tussen met en zonder S0 bij het begin en het eind van LRCK, is dat niet een teveel ?
En moet er geen nul ipv de MSB bij delen door 2, ipv twee keer hetzelfde bit ?
Anne
Eén plaatje > 1000 woorden :-)

Gebruikersavatar
ds23man
Ook commercieel actief
Berichten: 18817
Lid geworden op: za 05 sep 2009, 18:46
Locatie: Bananenrepubliek

Re: I2S-verzwakker om DAC-oversturing te voorkomen

Berichtdoor ds23man » ma 26 feb 2018, 13:51

En waarom zit er zoveel clipping in die opnames? Door foutief te masteren waardoor er bij downsampling van alles fout gaat:

https://izotope-rx.livejournal.com/4971.html
Fusion Filterdesign

MarcelvdG
Berichten: 519
Lid geworden op: do 31 jan 2013, 21:47
Locatie: Haarlem

Re: I2S-verzwakker om DAC-oversturing te voorkomen

Berichtdoor MarcelvdG » ma 26 feb 2018, 23:23

Ah!buis schreef:Wel lollig knobbelwerk, met bitjes schuiven :D
Heel lang geleden ook wel's verdiept in dat I²C gebeuren, zou weer aan de studie moeten omdat weer op te halen :( , de animo is niet zo groot, vergeet te vlug weer :-$
Voor wat 't waard is, twee verdachte dingen.
Je schakeld zo tussen met en zonder S0 bij het begin en het eind van LRCK, is dat niet een teveel ?
En moet er geen nul ipv de MSB bij delen door 2, ipv twee keer hetzelfde bit ?
Anne


Bedankt voor het nakijken! Ik denk dat het toch wel klopt.

Het schakelen bij het begin en einde van LRCK is nodig om beide kanalen (links en rechts) te verzwakken. Doe je het maar op 1 transitie, dan verzwak je maar 1 kanaal.

Wat het herhalen van het MSB betreft: je hebt me betrapt op een onvolledigheid in de tekst. Ik ga ervan uit dat er tweecomplementdata over de I2S-verbinding verstuurd worden, zoals gewoonlijk ook inderdaad het geval is, maar het was wel zo duidelijk geweest als ik dat erbij had gezet.

Tweecomplement is de binaire versie van tiencomplement, zoals je bijvoorbeeld ziet bij een mechanisch bandtellertje dat als hij onder de 0000 gaat bij 9999 verder telt. In 24-bits tweecomplement is 000000000000000000000000 gewoon 0 en 111111111111111111111111 is -1, net als de 9999 op het bandtellertje.

Staat de bandteller op 9800 en wil je dat door tien delen, dan moet je het hoogste cijfer herhalen en de rest opschuiven, dus 9980. Bij tweecomplement dat je door twee wil delen gaat dat net zo.

Iets anders dat ik vergeten ben erbij te zetten, is dat de ingang net niet helemaal aan de I2S-standaard voldoet. De I2S-standaard schrijft een houdtijd van 0 voor, maar de 74AHC273 heeft helaas 1 ns nodig. In het onwaarschijnlijke geval dat dat problemen oplevert, kun je een RC-netwerkje met een tijdconstante van een paar nanoseconden in de datalijn en de LRCK-lijn zetten.

MarcelvdG
Berichten: 519
Lid geworden op: do 31 jan 2013, 21:47
Locatie: Haarlem

Re: I2S-verzwakker om DAC-oversturing te voorkomen

Berichtdoor MarcelvdG » di 27 feb 2018, 0:10

ds23man schreef:En waarom zit er zoveel clipping in die opnames? Door foutief te masteren waardoor er bij downsampling van alles fout gaat:

https://izotope-rx.livejournal.com/4971.html


Tja, afhankelijk van hoe je ertegenaan kijkt, kun je de schuld bij de mastering, bij de DAC- en ASRC-fabrikanten of bij de markteconomie leggen. Hoe dan ook hebben we nu DAC's die met fantastische dynamisch-bereik- en vervormingscijfers sinussen van 0 dBFS en lager kunnen afspelen, maar overstuurd raken als je er muziek mee afspeelt. :(

Gebruikersavatar
ds23man
Ook commercieel actief
Berichten: 18817
Lid geworden op: za 05 sep 2009, 18:46
Locatie: Bananenrepubliek

Re: I2S-verzwakker om DAC-oversturing te voorkomen

Berichtdoor ds23man » di 27 feb 2018, 6:16

Het is een fenomeen wat ontstaat bij samplerate conversie, of die nou in een chip gebeurt of softwarematig maakt niet uit. Dit gebeurd ook als je iets omzet naar MP3 of itunes.
Fusion Filterdesign

MarcelvdG
Berichten: 519
Lid geworden op: do 31 jan 2013, 21:47
Locatie: Haarlem

Re: I2S-verzwakker om DAC-oversturing te voorkomen

Berichtdoor MarcelvdG » di 27 feb 2018, 6:49

Klopt, en het zou zowel bij het masteren als bij bemonsteringsfrequentieomzettingen op te lossen zijn door wat headroom aan te houden. Geef je DAC-interpolatiefilter, je bemonsteringsfrequentieomzetter of je MP3-encoder een default conversieversterking van -3 dB en er is niks aan de hand. Je moet dat dan alleen niet tien keer achter elkaar doen, want dan zit je op -30 dB; wat dat betreft zou het inderdaad het handigste zijn als de opnames bij het masteren niet zo kneiterhard gemaakt werden. Als het omzetten niet in real time hoeft, kun je ook eerst uitrekenen hoe groot de gereconstrueerde pieken worden en dan daarvoor corrigeren wanneer nodig.

Toen ik het interpolatiefilter voor deze DAC https://linearaudio.net/article-detail/2284 ontwierp, werd ik door de gratis Xilinx FIR-compiler 5.0 netjes op de hoogte gebracht van hoeveel bits er extra nodig waren met het slechtst mogelijke ingangssignaal, dus je maakt mij niet wijs dat ontwerpers van interpolatiefilters niet bekend zijn met het probleem.

Gebruikersavatar
ds23man
Ook commercieel actief
Berichten: 18817
Lid geworden op: za 05 sep 2009, 18:46
Locatie: Bananenrepubliek

Re: I2S-verzwakker om DAC-oversturing te voorkomen

Berichtdoor ds23man » di 27 feb 2018, 7:21

Vroeger was het gewoon gebruikelijk om de max piek bij cd mastering op -3db te leggen en inderdaad door de loudness war denken mensen dat keihard tot de max masteren beter overkomt op de radio. Maar dat maakt geen donder uit, radiostations hebben al hun muziek op de servers staan met een replay gain correctie. Dit is alleen maar erger geworden met de introductie van goedkope DAW's en gebruikers die geen flauwe notie hebben van mastering.

In Roon kun je trouwens een clip indicator in je afspeelbar aanzetten, zelf heb ik RTW meter met digitale ingang waar een clip led op zit.

Reuze handig!
Fusion Filterdesign

MarcelvdG
Berichten: 519
Lid geworden op: do 31 jan 2013, 21:47
Locatie: Haarlem

Re: I2S-verzwakker om DAC-oversturing te voorkomen

Berichtdoor MarcelvdG » di 27 feb 2018, 20:27

MarcelvdG schreef:Staat de bandteller op 9800 en wil je dat door tien delen, dan moet je het hoogste cijfer herhalen en de rest opschuiven, dus 9980. Bij tweecomplement dat je door twee wil delen gaat dat net zo.


Wat ik geschreven heb over het door tien delen van tiencomplement klopt niet, tenzij het getal toevallig met 0 of 9 begint. Je moet vaststellen of er een negatief getal gerepresenteerd wordt. Is dat het geval, dan schrijf je een 9 op, anders een 0. Daarachter komen dan de opgeschoven cijfers van het oorspronkelijke getal. De eenheden vallen weg in de afronding of komen achter een komma te staan.

Bij het door twee delen van tweecomplement geldt er net zoiets, maar dan met een 1 of een 0 in plaats van een 9 of een 0. Aangezien het hoogste bit per definitie 1 is bij negatieve en 0 bij niet-negatieve tweecomplementgetallen, komt dat uiteindelijk neer op het herhalen van het hoogstwaardige bit.

Gebruikersavatar
Ah!buis
Berichten: 11734
Lid geworden op: ma 15 nov 2010, 22:36
Locatie: Overijse

Re: I2S-verzwakker om DAC-oversturing te voorkomen

Berichtdoor Ah!buis » wo 28 feb 2018, 13:18

MarcelvdG schreef:
MarcelvdG schreef:Staat de bandteller op 9800 en wil je dat door tien delen, dan moet je het hoogste cijfer herhalen en de rest opschuiven, dus 9980. Bij tweecomplement dat je door twee wil delen gaat dat net zo.


Wat ik geschreven heb over het door tien delen van tiencomplement klopt niet, tenzij het getal toevallig met 0 of 9 begint.
't Ging toch maar om de manier van doen, dat tiendelig meer dan allen 0 en 1 ken maakt maar moeilijker.
I²S is dus op verschillende punten anders dan I²C, een L/R lijn, pos/neg getallen en geen terugmelding.Nooit mee bemoeid, weten we ook weer :D (zolang ik 't weer niet vergeet :( )
Met dat pos/neg zie ik nog wel iets raars, maakt misschien niks uit :?
Delen door 2 doet een bit verdwijnen, wordt voor oneven getallen -1, positief is dat naar richting nul maar negatief naar -oneindig.Verschuift het gemiddelde wat normaal nul is een halve bit negatief.Vermoed dat je dan uit de DAC een (kleine) negatieve verschuiving van de nullijn krijgt.
Anne
Eén plaatje > 1000 woorden :-)

MarcelvdG
Berichten: 519
Lid geworden op: do 31 jan 2013, 21:47
Locatie: Haarlem

Re: I2S-verzwakker om DAC-oversturing te voorkomen

Berichtdoor MarcelvdG » wo 28 feb 2018, 23:04

Klopt helemaal. Ik rond af naar beneden en dat levert een kleine negatieve offset op.

De nette manier om een digitaal audiosignaal af te ronden is als volgt: je telt er eerst twee LSB piek-piek (twee LSB van de woordlengte na afronden) aan ruis met driehoekvormige kansverdeling bij op, dan tel je er een offset bij op die net compenseert voor de afrondoffset en daarna gooi je de laagstwaardige bits weg. Als je een FPGA tot je beschikking hebt is dat makkelijk te doen, maar met enkele 74AHC IC'tjes zag ik dat niet zo zitten.

Gebruikersavatar
Ah!buis
Berichten: 11734
Lid geworden op: ma 15 nov 2010, 22:36
Locatie: Overijse

Re: I2S-verzwakker om DAC-oversturing te voorkomen

Berichtdoor Ah!buis » do 01 mar 2018, 12:16

Die verschuiving naar negatief is dan afhankelijk van het aantal oneven negatieve waardes die voorbij komen, is (heel waarschijnlijk) niet altijd even veel, krijg je ruis op de nullijn.
Jammer dat de lsb op het eind zit, nu moet eerst alles tussen twee LRCLK opgeslagen.Als 't negatief is en de lsb=1 er één bijtellen en dan delen door 2.
-1+1=0 dus 1111111 wordt 000000/2 de helft van -1 wordt 0
-2+0=-2 ofwel 111110 naar 1111110/2 van -2 wordt -1
-3+1=-2 geeft 1111101 -> 1111110/2 en -3 wordt ook -1 ...enz.
Maar ja, begint er 's aan.Eerst 16, 24 of hoeveel bit ? eerst opslaan, in een teller +1 onder voorwaarde en dan de boel weer buitenschuiven.
Anne
Eén plaatje > 1000 woorden :-)

MarcelvdG
Berichten: 519
Lid geworden op: do 31 jan 2013, 21:47
Locatie: Haarlem

Re: I2S-verzwakker om DAC-oversturing te voorkomen

Berichtdoor MarcelvdG » do 01 mar 2018, 23:31

Als de binnenkomende woordlengte plus 1 bit nog binnen het aantal bits van de ingangsinterface van de DAC en binnen het aantal beschikbare bitklokcycli past, is er niks aan de hand. Voorbeeld: 16-bits audio via mijn schakeling een 24-bits DAC in; normaal wordt het signaal dan aangevuld met acht nullen, dat worden dan nu zeven nullen.

Als het LSB niet meer past, krijg je inderdaad wat extra kwantisatievervorming en een kleine negatieve verschuiving. Dat laatste valt volgens mij in principe op te lossen door er eerst 1 bij op te tellen voor je het getal verschuift. Of het getal positief of negatief is maakt daarbij niet uit, maar je moet wel opletten dat het getal niet overloopt door het optellen. Als 0111 1111 1111 1111 verandert in 1000 0000 0000 0000 en dan in 1100 0000 0000 0000, ben je van een maximaal positief naar een fors negatief getal gegaan. Ik zou alleen niet weten waarom je zoveel moeite zou willen doen voor een piepkleine offset.

De extra kwantisatievervorming kun je wat meer op ruis laten lijken door te ditheren, een klein ruissignaal met een speciale kansverdeling erbij op te tellen voor je bits weggooit. Maar ja, dat wordt al helemaal een gedoe met 74AHC IC'tjes. Met een 24-bits DAC gaat het slechts om een vervorming van -140 dB.


Terug naar “Overige Elektronica”

Wie is er online

Gebruikers op dit forum: CCBot en 1 gast