FIR Filter und Auflösung

Antworten
play-mate
Aktiver Hörer
Beiträge: 448
Registriert: 26.02.2010, 08:18
Wohnort: Berlin

FIR Filter und Auflösung

Beitrag von play-mate »

Geehrtes Forum,

Kann mir jemand erklären wie FIR Filter mit verschiedenen Bit-Raten umgeht.
Das ein FIR Filter natürlich eine feste Samplingfrequenz vorschreibt ist klar, aber wie beeinflusst das Filter die Bit-tiefe eines Signals ?

Wird eine 24/96 Masterfile im Dynamikumfang auf 16 Bit "heruntergerechnet" ?


Mit freundlichen Grüßen aus Berlin
Bild
Fujak
Moderator
Beiträge: 5752
Registriert: 05.05.2009, 21:00
Wohnort: Bayern
Kontaktdaten:

Beitrag von Fujak »

Hallo play-mate,

bei Acourate beträgt die Bittiefe 32 oder 64 bit (lässt sich einstellen) - und zwar unabhängig von der Samplingfrequenz. Wenn der Convolver und die beteiligte Playersoftware (z.B. Foobar) diese Bittiefe verarbeiten können, wird dies bei Musikmaterial mit 24bit keine Auswirkungen im Sinne einer Reduktion des Dynamikumfangs bedeuten. Foobar rechnet meines Wissens mit 42 bit intern. Es bleibt also noch genug Reserve - selbst bei Verwendung der digitalen Lautstärke-Regelung (in einem gewissen Umfang). Abgesehen davon, dass die kompletten 24 bit bei einem 96/24-Musikfile nie ausgereizt werden (da wie auch bei 16bit immer einige Bits für Metadaten verwendet werden), so kommt das Audio-Material am Ende unbeschadet im Sinne der originalen Bittiefe beim SPDIF-Signal an. Erst wenn der FIR-Filter 16bit hat, würde ich mir ernste Sorgen machen. ;)

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

Beitrag von uli.brueggemann »

Hi,

die Frage nach der Auflösung ist ein bisschen mehrdeutig.

Kleiner Grundkurs:
a)
Ein Filter der Länge 1000 taps (Daten, Samples) hat bei 48 kHz Abtastrate eine Auflösung von 48000/1000 = 48 Hz. Der Frequenzbereich von 0 bis 24 kHz (fs/2) wird also in 500 Abschnitte aufgeteilt.
Klar, dass dann Filter größerer Länge besser auflösen (wobei es noch andere Tricks a la Multiratefilter gibt, aber das ist hier zu speziell)
b)
Auflösung im Sinne von Rechengenauigkeit:
einem Filter ist dabei die Abtastrate und die Bittiefe des Eingangssignals erst einmal egal.
Es läuft folgende Beispielrechnung bei einer Faltung ab:
Eingangssignal 3 samples mit 1, 2, 3
Filter mit 4 taps 1, 2, 3, 1
Faltung = Multiplikation jedes samples mit jedem tap und anschliessend Addition:
1..2..3
...2..4..6
.......3..6..9
...........1..2..3
________________
1..4..10..13..11..3 = Ausgangssignal
In der Realität wird das Ganze bei langen Filtern mit Fourier-Transformation gerechnet. Das erlaubt eine einfachere und effektivere Berechnung = weniger Rechenschritte.
Das Beispiel zeigt das nun für ganze Zahlen. In Wirklichkeit liegen jedoch Gleitkommagrössen vor. Und da kommt es darauf an, wieviel Bit zur Verfügung stehen, um bei der Faltung die Rechengenauigkeit hochzuhalten. Damit eben nicht durch Überläufe und Rundungsfehler Ungenauigkeiten reinkommen. Mit 32 bit Gleitkomma ist das schon prima, mit 64 bit Gleitkomma eher akademisch.
Am Ende kommt dann wieder die gewünschte Bittiefe raus, 24 bit PCM bleiben 24 bit, 16 bit PCM wird zumeist in 24 bit PCM gewandelt (dann verbleiben noch 8 weitere niederwertige Bits aus der Faltung erhalten) oder eben wieder mit 16 bit ausgegeben (dann wird eben gerundet und vorteilshafterweise zusätzlich gedithert).

Grüsse, Uli
Bild
Udor
Aktiver Hörer
Beiträge: 388
Registriert: 02.09.2010, 00:17

Beitrag von Udor »

Hallo Uli

Danke für die Aufklärung. Die sache mit den Bitraten hat mich auch immer ein wenig verwirrt.
Am Ende kommt dann wieder die gewünschte Bittiefe raus, 24 bit PCM bleiben 24 bit, 16 bit PCM wird zumeist in 24 bit PCM gewandelt (dann verbleiben noch 8 weitere niederwertige Bits aus der Faltung erhalten) oder eben wieder mit 16 bit ausgegeben (dann wird eben gerundet und vorteilshafterweise zusätzlich gedithert).
Das heißt wenn ich 16bit/44khz reinschicke kommt auch 16bit/44khz wieder raus. Dann dürfte es auch irrelevant sein das Jack intern "nur" mit 32bit arbeitet selbst wenn ich mit 24bit Material arbeite, oder ?
Es ist quasi nur für die interne Rechengenauigkeit vom Convolver relevant.

Um die Verwirrung noch komplett zu machen.
Was passiert wenn ich Brutefir auf 64bit compiliere ? :shock:
Ich vermute das diese Sache wiederum nur was mit der Rechengeschwindgkeit zu tun hat je
nach verwendeter Hardware, oder ?

Gruß Udo
Bild
uli.brueggemann
Aktiver Hersteller
Beiträge: 4658
Registriert: 23.03.2009, 15:58
Wohnort: 33649
Kontaktdaten:

Beitrag von uli.brueggemann »

In der Brutefir config wird vorgegeben was passiert:
mit
float_bits: 64; # internal floating point precision
wird vorgegeben ob intern mit 32 oder 64 bit Gleitkomma gerechnet wird

und mit
sample: "S24_4LE";
für input und output wird z.B. definiert, dass die Signale als 24 bit Festkomma interpretiert werden (in 4 Bytes gepackt). Die Vorgabe hängt auch davon abwas die jeweilige Soundkarte kann.
Auch wenn dann 16 bit ankommen wird dann in 24 bit gewandelt, dann mit Gleitkomma weitergerechnet und wieder mit 24 bit ausgegeben.

Also, wenn dann 16/44 reinkommen, kommt dann mit
sample: "S24_4LE"; #24 bit 4 bytes
oder
sample: "S24_LE"; #24 bit 3 bytes
eben 24 Bit hinten raus, also 24/44
mit
sample: "S16_LE";
sind es dann 16 Bit, also 16/44

Grüsse, Uli
Bild
Sleepwalker
inaktiv
Beiträge: 36
Registriert: 29.12.2010, 21:44

Beitrag von Sleepwalker »

Hallo Uli,

wie weit sollte man eigentlich das Eingangssignal absenken um Übersteuerungen durch die Faltung selbst zu verhindern? Wann ist man auf der sicheren Seite, oder ist das am Ende gar nicht nötig?
Welche Effekte gibt es eigentlich bei der Benutzung der verschiedenen attenuations bei coeffs und filter. Hat eine Absenkung bei z.B. den coeffs nur niedrigeren Pegel zur Folge, oder beeinflusst man damit auch die "Stärke" des Filters, bzw. die Wirkung?

Torsten
uli.brueggemann
Aktiver Hersteller
Beiträge: 4658
Registriert: 23.03.2009, 15:58
Wohnort: 33649
Kontaktdaten:

Beitrag von uli.brueggemann »

Sleepwalker hat geschrieben: wie weit sollte man eigentlich das Eingangssignal absenken um Übersteuerungen durch die Faltung selbst zu verhindern? Wann ist man auf der sicheren Seite, oder ist das am Ende gar nicht nötig?
Welche Effekte gibt es eigentlich bei der Benutzung der verschiedenen attenuations bei coeffs und filter. Hat eine Absenkung bei z.B. den coeffs nur niedrigeren Pegel zur Folge, oder beeinflusst man damit auch die "Stärke" des Filters, bzw. die Wirkung?
Torsten,
viele Fragen und mindestens eine ist nicht leicht zu beantworten, wenn überhaupt.
Die attenuations bewirken einfach eine Abschwächung. Dabei ist zu überlegen, an welcher Stelle abgeschwächt wird. Bewirkt ein Filtern des Signals eine Übersteuerung, dann hilft es nichts, am Filterausgang abzusenken, Clipping bleibt Clipping. Demzufolge müsste man bei den coeffs am Eingang abschwächen. Das hat dieselbe Wirkung wie ein Filter mit niedrigerem Pegel.
Nun zur Schwierigkeit: wieviel absenken und überhaupt?
Ein nicht zu unterschätzendes Thema ist das Intersample-Clipping bzw. True-Peak-Metering. Ich befasse micht derzeit damit etwas näher, möchte aber noch nicht zu viel verraten. Und die Analyse von allen möglichen Tracks zeigt, dass viele ein Intersample-Clipping aufweisen. D.h. dass beim DA-Wandeln ein entsprechender Toleranzbereich nötig ist, damit das analoge Signal nicht limitiert ist. Eine simple Phasenverschiebung durch einen Allpass, der ja selbst von der Amplitude 1:1 überträgt, bewirkt aber im digitalen Bereich ein Clipping.
Ein Beispiel: Gossip - Heavy Cross - hat einen Spitzenwert von +3,83 dB bei maximalem Sample von 0 dB. Demzufolge müsste man vorher mindestens um die 3,83 dB absenken, um am Filterausgang (irgendein beliebiger Allpass) sicher keine Übersteuerung zu erhalten.
Es gibt Beispiele, sicherlich eher akademischer Art und nicht normale Musik, wo ein Headroom von 10 dB nötig wäre.
In der Praxis zeigen sich viele Musikstücke mit ca. + 1 dB, bei klassischer Musik ist es eher weniger, da gibt es ja uch nicht den typischen Loudness War.
Na ja, und was ist nun zu tun? Ich weiss es nicht wirklich. Ich selbst habe eine Standardabsenkung von 0.5 dB eingestellt. Glücklicherweise höre ich seltenst voll komprimierte Musik und mir fallen dann auch evtl. kurzzeitige Begrenzungen nicht auf. Vielleicht berichten da mal andere Mitleser.
Eine Absenkung von 3 dB wäre vermutlich auf der sicheren Seite.

Grüsse, Uli
Bild
Sleepwalker
inaktiv
Beiträge: 36
Registriert: 29.12.2010, 21:44

Beitrag von Sleepwalker »

Hallo Uli,

danke erstmal für die Antwort. Bei der Frage des Clippings gehe ich von einer Abschwächung der Inputs aus (in meinem Fall Brutefir über spdif).
Die Frage entstand neben einigen Forenbeiträgen (auch von dir), durch diesen Artikel:

http://www.hifi-selbstbau.de/index.php? ... &Itemid=70

der aus meiner Sicht eine ähnliche Problematik beschreibt (oder gar die gleiche?)

Mit dem absenken der Coeffs meinte ich eigentlich etwas anderes. Mal angenommen mein Filter ist ein Hochpass. Verringere ich durch ein z.B. "attenuation 12" (bei eben diesem Coeff) irgendwas am Übertragungsverhalten, oder wirkt sich das nur auf den Gesamtpegel des am Ausgang ankommenden Ausgangssignals aus?

Ich gebe zu das ich diese ganze Filtergeschichte nicht so richtig durchblicke. Bisher hab ich mir das so vorgestellt, das die Coeffs im Prinzip Multiplikatoren für das Spektrum des Signals darstellen. D.h. jede Zahl (Koeffizient) gehört zu einer Frequenz im Spektrum des Signals, und wie weit dieser spezielle Frequenzanteil abgesenkt wird, hängt eben vom Koeffizienten ab.
Völliger Unsinn ??

Ich habe leider noch keine Quelle gefunden die das für Kleinkinder erklärt. Ich wüsste aber schon gerne was ich da mache :)

Torsten
uli.brueggemann
Aktiver Hersteller
Beiträge: 4658
Registriert: 23.03.2009, 15:58
Wohnort: 33649
Kontaktdaten:

Beitrag von uli.brueggemann »

Torsten,

also die attenuation bei der coeff-Struktur (die die Filter beschreibt) bewirkt eine Abschwächung aller Filter-Taps. Der Ausgangspegel geht damit runter, das Übertragungsverhalten bleibt gleich.

Ich selbst hab das noch nie verwendet, weil Acourate die Filter auf max. 0 dB im Filteramplitudengang normiert. Das gibt die max. Bittiefe.

Ansonsten verwende ich selbst die attenuation (0.5) in der Filter-Struktur im Feld from_inputs.

Grüsse, Uli

PS: der zitierte Artikel geht m.E. in eine andere Richtung
Bild
Sleepwalker
inaktiv
Beiträge: 36
Registriert: 29.12.2010, 21:44

Beitrag von Sleepwalker »

Hallo,

ok, Danke Dir...schonmal eine "Sorge" weniger. :)

Torsten
Antworten