Bittiefe beim Falten

Antworten
Hironimus_23
Aktiver Hörer
Beiträge: 807
Registriert: 29.12.2012, 21:49
Wohnort: Norddeutschland

Bittiefe beim Falten

Beitrag von Hironimus_23 »

Hallo Zusammen,

ich bitte mal wieder um etwas Aufklärung. Mir stellen sich noch grundsätzliche Fragen zur Funktionsweise der Faltung und zwar konkret zur Bittiefe. Mir geht es dabei nur um das Verständnis der Funktionsweise, nicht, ob entsprechende Dynamikumfänge im Gesamtsystem noch hörbar sind.

In folgender Skizze habe ich es visualisiert. Das Eingangsaudiofile ist ein FLAC in 16 Bit / 44.1Khz. Jedes Sample, das mit einer Frequenz von 44,1 KHz abgetastet wurde, hat einen Wert zwischen 0 und 65.535. Der Wert 0 entspricht dem niedrigsten Pegel und 65.535 dem höchsten Pegel des ursprünglichen analogen Signals.

Bild

Nun habe ich in Acourate ein der Samplerate entsprechendes Filter erstellt und möchte mit diesem das Eingangssignal falten. Und dazu Fragen:

Steckt im Filter auch eine Bittiefe oder ist diese bei der Faltung nicht relevant?

Sollte das Filter eine Bittiefe besitzen, wie stelle ich diese ein ? Über Marco4 und dann z. B. Outpufileformat „32 bit stereo WAV“ oder „64 bit stereo WAV“?

Was passiert, sofern es überhaupt möglich ist, wenn ich ein 24bit/44,1kHz-Eingangssignal mit einem 16bit/44,1kHz-Filter falte? Theoretische Verluste, da mit weniger „Details“ gefaltet?


Und dann noch ein paar Fragen zum Ausgabeformat bzw. dessen Anzeige am DAC. Bleiben wir bei der obigen Skizze: Eingangssignal 16Bit/44,1kHz wird mit Filter 32Bit/44,1kHz gefaltet, das Ergebnis müsste, ohne die Antworten auf die oberen Fragen vorwegzunehmen, ein Ausgangssignal in 32Bit/44,1kHz sein. Dieses müsste dann am DAC entsprechend angezeigt werden.

Nun höre ich mit zwei unterschiedlichen „Convolving-Engines“ mit identischen Filtern.

Covolving-Engines 1: DAC zeigt mir 32Bit/44,1kHz an, schalte ich Convolving aus wird 16Bit/44,1kHz angezeigt. Passt also m.M.n..

Covolving-Engines 2: DAC zeigt mir 24Bit/44,1kHz an, schalte ich Convolving aus wird 16Bit/44,1kHz angezeigt. Passt also m.M.nn nicht :? Bei diesem wird zum Filter auch noch die Info von 65.536 Taps gegeben, was ich 2^16 also 16bit zuordne. Filter hat aber 32Bit :? :?
Wo liegen die Ursachen?

Danke für neue Erkenntnisse vorab,

Viele Grüße
Hironimus
Bild
Buschel
Aktiver Hörer
Beiträge: 992
Registriert: 12.12.2013, 20:12
Wohnort: Raum Karlsruhe

Beitrag von Buschel »

Hallo Hironimus,

bei einer Faltung werden Signalwerte mit Filterkoeffizienten multipliziert. Ein einziger Ausgangswert entsteht dabei aus der Summe aus N (dazu später) solcher Produkte: so in der Art y(n) = a(n-1) * x(n-1) + a(n) * x(n) + a(n+1) * x(n+1), wobei x das Eingangssignal, a das Filter und y das Ausgangssignal ist.

1. Die Bittiefe bleibt bei Addition zweier Werte gleich, bei der Multiplikation addieren sie sich, d.h. 24 Bit Eingang * 16 Bit Filter = 40 Bit Ergebnis. Die Summe vieler solcher Werte behält die 40 Bit Auflösung.

2. Das Filterergebnis wird wieder auf eine gewünschte Bittiefe für das Ausgangssignal gebracht, z.B. wir dann von 40 Bit wieder auf 32 Bit gerundet. Deswegen siehst die unterschiedliche Auflösungen bei den unterschiedlichen Convolvern. Das ist Teil des Designs des Convolvers.

3. Die von dir genannten 65.536 beziehen sich auf die Anzahl der Filterkoeffizienten N. N ist üblicherweise auch eine Potenz von 2, (2, 4, 8, 16, ... ). Der Grund liegt darin, dass solche Filter sehr effizient gerechnet werden (siehe "Schnelle Faltung"). Das hat nichts mit der Bittiefe zu tun.

4. Die Bittiefe und Anzahl der Koeffizienten hat einen Einfluss auf die Wirkung des Filters. Vereinfacht gesagt: Je mehr Bits, desto stärker/präziser die mögliche Dämpfung. Je mehr Koeffizienten, desto höher die Frequenzgenauigkeit (schmalere peaks/dips).

Viele Grüße,
Andree
Bild
Buschel
Aktiver Hörer
Beiträge: 992
Registriert: 12.12.2013, 20:12
Wohnort: Raum Karlsruhe

Beitrag von Buschel »

Der Vollständigkeit halber sei noch erwähnt, dass die Bittiefe des Produkts von Eingangssignal und Filterkoeefizient nach oben hin durch die Rechengenauigkeit des Convolver begrenzt ist. Bei einer modernen SW-Umsetzung in 64 Bit Fließkomma oder Integer sehe ich dort keine relevant Begrenzung.
Bild
Hironimus_23
Aktiver Hörer
Beiträge: 807
Registriert: 29.12.2012, 21:49
Wohnort: Norddeutschland

Beitrag von Hironimus_23 »

Hallo Andree,

danke für deine Erläuterungen, das hilft mir zum Verständnis.

Was steuere ich denn beim Acourate in Marco4 bei Outpufileformat , z.B. „32 bit stereo WAV“ oder „64 bit stereo WAV“?

Ist das die abschließende Rundung der Bittiefe des Ausgangssignals, in deinem Beispiel von den 40 Bit auf 32 Bit?

Oder beeinflusse ich mit dem Outputformat auch die Bittiefe des Filters?

Oder nutzt Acourate intern immer eine feste Bittiefe (welche?) des Filters und nur das Ausgangssignal wird entsprechend gerundet?

Viele Grüße
Hironimus
Bild
Buschel
Aktiver Hörer
Beiträge: 992
Registriert: 12.12.2013, 20:12
Wohnort: Raum Karlsruhe

Beitrag von Buschel »

Hallo Hironimus,

Macro4 ist die Filtergeneration. Die Settings beziehen sich also ausschließlich auf die Bittiefe der Filterkoeffizienten. Meines Wissens nach nutzt Acourate intern Double Float Genauigkeit, das wäre 64 Bit Fließkomma. Aber das sollte Uli bestätigen.

Grüße,
Andree
Bild
uli.brueggemann
Aktiver Hersteller
Beiträge: 4670
Registriert: 23.03.2009, 15:58
Wohnort: 33649
Kontaktdaten:

Beitrag von uli.brueggemann »

Also,

PCM-Daten gibt es mit 8, 16, 24, 32 bit als ganzzahlige Größen (Integer).
Typischerweise erwarten DA-Wandler PCM-Daten in diesem Format. Dazu gibt es aucvh noch Zwischenformate, z.B. dass 24 bit eben mit 24 bit repräsentiert sind, aber auch mit 32 bit, wobei dann die 24 bit die linken oder die rechten 3 Bytes belegen.
Typischerweise gibt der Asio-Treiber eines DACs das benötigte Datenformat an (daneben zu.B. auch Anzahl Kanäle und Bezeichnungen).
Damit weiss der Rechner, welches Datenformat er ausgeben muss.

Intern kann der Rechner zwar auch ganzzahlig rechnen, was aber nicht wirklich Sinn macht, da Berechnungen typisch nicht ganzzahlig sind. Insofern wird auf Gleitkomma umgestiegen, dort finden wird typisch ein Format mit 32bit oder 64bit. Je mehr Bits umso besser ist die Auflösung und die Rechengenauigkeit.

Acourate verwendet intern durchgehend 64bit Gleitkomma. PCM-Daten werden schlichtweg passend umgerechnet indem sie am Eingang durch den maximalen Wert geteilt werden = Normalisierung auf den Wert -1 <= x <= 1. Dann wird beliebig gerechnet, z.B. mit Filtern im dbl-Format (double float precision = 64 bit). Wenn es dann am Ausgang wieder zum DAC geht, wird dann wieder passend in PCM zurückgerechnet, die Info hat der Rechner ja.

Verschiedene Programme erwarten nun unterschiedliche Formate, der HQPlayer braucht z.B. 32bit float Filter als wav-Datei. Insofern gibt es bei Acourate die Möglichkeit, eben passende Formate zu erzeugen.

That's it

Grüsse
Uli
Bild
Hironimus_23
Aktiver Hörer
Beiträge: 807
Registriert: 29.12.2012, 21:49
Wohnort: Norddeutschland

Beitrag von Hironimus_23 »

Hallo Uli,

danke für deine Erläuterungen.
uli.brueggemann hat geschrieben: 15.05.2024, 15:08 Also,

[...] Typischerweise gibt der Asio-Treiber eines DACs das benötigte Datenformat an (daneben zu.B. auch Anzahl Kanäle und Bezeichnungen).
Damit weiss der Rechner, welches Datenformat er ausgeben muss.
[...]
Das würde bedeuten, wenn derselbe DAC hinter zwei verschiedenen Convolving-Engines hängt, sollte bei beiden Convolving-Engines das selbe Format vom DAC angefordert werden. Ist bei mir nicht der Fall, siehe:
Hironimus_23 hat geschrieben 14.05.2024, 21:25
Nun höre ich mit zwei unterschiedlichen „Convolving-Engines“ mit identischen Filtern.
Convolving-Engines 1: (Eupony/Stylus) DAC zeigt mir 32Bit/44,1kHz an, schalte ich Convolving aus wird 16Bit/44,1kHz angezeigt. Passt also m.M.n..

Convolving-Engines 2 (ConvoProxy): DAC zeigt mir 24Bit/44,1kHz an, schalte ich Convolving aus wird 16Bit/44,1kHz angezeigt. Passt also m.M.nn nicht (…). Filter hat aber 32Bit

Das ist damit natürlich kein Acourate Thema und wäre hier Off-Topic. Ich könnte dieses Thema in meinen Vorstellungsfaden schieben und dort auf Aufklärung hoffen.

Auch ist mir nicht klar, wie der DAC das benötigte Datenformat bei der Convolving-Engine anfordern soll. Das ist doch auch vom Eingangssignal abhängig. Z.B. könnte ich ein 16bit/44,1kHz oder 24bit/96kHz zuführen. Welche Bittiefe will der DAC dabei bei der Convolving-Engine anfordern?
uli.brueggemann hat geschrieben: 15.05.2024, 15:08 [...]
Intern kann der Rechner zwar auch ganzzahlig rechnen, was aber nicht wirklich Sinn macht, da Berechnungen typisch nicht ganzzahlig sind. Insofern wird auf Gleitkomma umgestiegen, dort finden wird typisch ein Format mit 32bit oder 64bit. Je mehr Bits umso besser ist die Auflösung und die Rechengenauigkeit.

Acourate verwendet intern durchgehend 64bit Gleitkomma.
[...]
Dein Acourate Convolver arbeitet also wegen bestmöglicher Rechengenauigkeit mit 64bit Gleitkomma. Andere Programme rechnen möglicherweise ganzzahligen, auch wenn das suboptimal wäre. Wäre das der folgende von Buschel genannte Fall?
Buschel hat geschrieben: 14.05.2024, 22:08 [...]
1. Die Bittiefe bleibt bei Addition zweier Werte gleich, bei der Multiplikation addieren sie sich, d.h. 24 Bit Eingang * 16 Bit Filter = 40 Bit Ergebnis. Die Summe vieler solcher Werte behält die 40 Bit Auflösung.
[...]

Sollten meine laienhaften Fragen jetzt für eine Beantwortung zu aufwendig werden, können wir hier gerne abbrechen. Ich würde das Thema dann in Weisenheim nochmals thematisieren.

Viele Grüße
Hironimus
Bild
uli.brueggemann
Aktiver Hersteller
Beiträge: 4670
Registriert: 23.03.2009, 15:58
Wohnort: 33649
Kontaktdaten:

Beitrag von uli.brueggemann »

Ich gehe davon aus, dass der DAC das gewünschte Format über Asio bekannt gibt. Daneben gibt es auch noch Windows Sound, der sein Eigenleben betreibt. Geben nun zwei Player eben über jeweils eine dieser Schnittstellen aus, kann es evtl. zu Unterschieden kommen.

Grüsse
Uli
Bild
Antworten