DSP - Best Practice bei Formatumwandlung und Faltung?

Bernd Peter
Aktiver Hörer
Beiträge: 3996
Registriert: 04.05.2010, 19:37

Beitrag von Bernd Peter »

Hallo,

im Netz gefunden:
I'm e.g. currently running the sox rate effect with

-v = very best
-I = intermediate phase
-a = allow aliasing
-b 98 = bandwitdh
-D = no dither ( re-dithering an already dithered signal might not be the best idea)
-b = bitrate = 24 bit

That settings sounds clean and crisp and natural to me. The low level details are not smeared as experienced with min phase filters.
My current setup IMO beats many of those min phase and linear phase settings that I tried.
Gruß

Bernd Peter
Bild
mm2
Aktiver Hörer
Beiträge: 295
Registriert: 17.05.2010, 22:12
Wohnort: München

Beitrag von mm2 »

Hallo Frank,
Außerdem habe ich 'resample-soxr' noch eine Option '--phase=25' zur Festlegung der Phase des Aliasing-Filters spendiert.
Warum ist Dir die Phaseneinstellung wichtig und wie kommst Du auf 25 ?

Hallo Bernd-Peter,

Danke, solche Empfehlungen gibt es viele für sox,
die Frage ist wie kann man ffmeg dazu bewegen solche Einstellungen an soxr weiter zu geben ?
Verwendest Du in einer Deiner Ketten Minimserver ?

VG
Bild
Bernd Peter
Aktiver Hörer
Beiträge: 3996
Registriert: 04.05.2010, 19:37

Beitrag von Bernd Peter »

Hallo Maximilian,

in den beiden Audionetzwerken mit externen NAS läuft auf diesen Win Server 2012 und Minimserver.

Allerdings ohne SRC Funktion, die Files werden schon vorher offline auf 24/192 hochgesampelt.

Ich brauche nur die flac:wav Konvertierung.

Gruß

Bernd Peter
Bild
frankl
Aktiver Hörer
Beiträge: 486
Registriert: 20.01.2013, 01:43
Wohnort: Aachen

Beitrag von frankl »

mm2 hat geschrieben:Hallo Frank,
Außerdem habe ich 'resample-soxr' noch eine Option '--phase=25' zur Festlegung der Phase des Aliasing-Filters spendiert.
Warum ist Dir die Phaseneinstellung wichtig und wie kommst Du auf 25 ?
Hallo Maximilian,

bei 'sox' ist das die '-p' Option für den 'rate' Effekt. 50 ist "linear phase", da sind pre-ringing und post-ringing gleich; 0 ist "minimal phase" ohne pre-ringing und 25 ist "intermediate phase" was sich auch mit dem 'rate -I' in 'sox' auswählen lässt.

Ich habe in mein 'resample_soxr' jetzt noch eine Option '--band-width' eingebaut, der Filter ist linear bis band-width Prozent der Nyquist-Frequenz. Z.B. fällt der Filter mit "--band-width=81.0" ab etwa 18kHz ab, wie wir es oben für die Einstellung in 'ffmpeg (swr)' gesehen haben. (Standardeinstellung in 'soxr' ist 91.09%, linear bis etwa 20kHz.)

Viele Grüße,
Frank
Bild
mm2
Aktiver Hörer
Beiträge: 295
Registriert: 17.05.2010, 22:12
Wohnort: München

Beitrag von mm2 »

Hallo Frank,

dafür gibt es bei ffmpeg resamplern einen ähnlichen Parameter:

Code: Alles auswählen

phase_shift
For swr only, set resampling phase shift, default value is 10, and must be in the interval [0,30]. 
Der Wertebereich ist anders, ist eine Versuch wert ob sich damit pre-ringing und post-ringing ähnlich wie bei sox beeinflussen lässt.

VG
Maximilian
Bild
mm2
Aktiver Hörer
Beiträge: 295
Registriert: 17.05.2010, 22:12
Wohnort: München

Beitrag von mm2 »

Hallo zusammen,

hier scheinen gleich mehrere Dinge an der Beschreibung nicht zu passen.

Der Auszug:

Code: Alles auswählen

phase_shift
For swr only, set resampling phase shift, default value is 10, and must be in the interval [0,30]. 
stammt von
https://ffmpeg.org/ffmpeg-resampler.html

"phase_shift" wird aber für "soxr" und "swr" akzeptiert.
Werte für "phase_shift" werden bei beiden nur von 0-24 akzeptiert.
25-30 ergibt einen Fehler.

Ein Blick in den swr Source Code betätigt 0-24:
https://ffmpeg.org/doxygen/2.0/swresamp ... tml#l00091

Änderungen zwischen 0-24 werden zwar akzeptiert,
haben aber bei mir weder bei "soxr" noch bei "swr" Auswirkung auf pre-ringing und post-ringing ?

VG
Maximilian
Bild
mm2
Aktiver Hörer
Beiträge: 295
Registriert: 17.05.2010, 22:12
Wohnort: München

Beitrag von mm2 »

Hallo zusammen,

scheinbar war/ist das ein Fehler, das hier klingt zumindest sehr ähnlich :cry:
https://www.computeraudiophile.com/foru ... ent-693776

https://www.computeraudiophile.com/foru ... ent-693949

mal sehen ob der Patch schon in ein offzielles Release von ffmpeg eingeflossen ist ?

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

Beitrag von uli.brueggemann »

modmix hat geschrieben: Offenbar liegt das Maximum bei der Ausgabe nicht - wie beim Input - auf einem Sample, sondern "dazwischen".
Was das für's Hören bedeutet, weiß ich noch nicht...
Ulli,

das zu messende Signal und die Abtastzeitpunkte korrelieren ja nicht zwangsweise. Wenn also eben nicht am Maximim abgetastet wird sondern davor und/oder danach ergeben sich diese Art von Bildern. Das ist z.B. bei Pulsantworten, die mit einem Mikrofon aufgenommen werden, der übliche Fall.
Wenn man die Pulsantwort mit einem Subsampleshift zeitlich verschiebt (gleichbedeutend mit einer relativen Verschiebung des Abtastzeitpunkts) kann man die graphische Darstellung korrigieren.
Für das Hören hat dies keine Auswirkung, solange man zumindest korrekt interpoliert (also keine Linearinterpolation).

Ein verwandtes Thema sind die Intersample-Peaks.

Grüsse
Uli
Bild
frankl
Aktiver Hörer
Beiträge: 486
Registriert: 20.01.2013, 01:43
Wohnort: Aachen

Beitrag von frankl »

modmix hat geschrieben:
frankl hat geschrieben:Ein 1-Sample Impuls ist ja kein erlaubtes Musiksignal, das man digital kodieren kann.
Ein 1-Sample Impuls ist doch bereits digitalisiert - warum sollte man das digital kodieren wollen?
Hallo Ulli,

ich wollte in dem Beitrag oben nicht ins technische Detail gehen. Aber dadurch ist offensichtlich nicht klar geworden, was ich meinte. Ich stimme mit allem überein, was Du sagst.

Natürlich ist es erlaubt, einen Dirac-Puls durch einen Filter zu schicken, und das Ergebnis bestimmt den Filter vollständig.

Was ich meinte ist, dass ein analoger Puls, der kürzer als die Differenz zwischen zwei Samples ist, sich nicht digitalisieren lässt, da man zuvor einen Bandpassfilter für die halbe Samplefrequenz anwenden muss. Danach sieht der Puls etwa aus wie der Graph der sinc-Funktion, die Du oben gezeigt hast. Oder umgekehrt: Das Digitalsignal, das ein einziges Sample ungleich Null hat und davor und dahinter unendlich viele Nullen digitalisiert das Analogsignal, das durch den sinc-Graphen beschrieben wird. Allgemeiner ergibt sich das Analogsignal aus den Samplepunkten einer Audiodatei, indem man jeden Samplepunkt durch die sinc-Funktion, gestreckt mit dem Samplewert, ersetzt und diese alle überlagert. (In der Tat ist es grob irreführend, wenn in 'audacity'' im gezoomten Anblick die Samples durch gerade Linien verbunden werden, zumindest, wenn das Signal viel Frequenzanteile nahe der halben Samplingrate hat.)

Die Idee bei Resampling ist, aus den gegebenen Samplepunkten das kodierte analoge Signal zu rekonstruieren und seine Werte mit der Zielsamplingrate neu abzutasten. Wenn man jetzt wie oben beschrieben die sinc-Funktion zur Rekonstruktion verwenden wollte (die dem idealen Bandpassfilter entspricht), dann müsste man mit unendlich langen Filtern rechnen. Für einen praktikablen Algorithmus, verwendet man daher Filter, die viel schneller gegen Null gehen (so dass alles, was ein paar Hundert Samples vom zentralen Maximum entfernt ist, vernachlässigt werden kann) und nimmt dafür in Kauf, dass damit Frequenzanteile nahe der halben Samplefrequenz verringert oder ausgefiltert werden. Das ist normalerweise für ein Musiksignal nicht schlimm, da dasselbe ja auch schon vor der vorliegenden Digitalisierung durch einen analogen Filter gemacht wurde; es geht also gar nichts oder kaum etwas verloren.

Viele Grüße,
Frank
Bild
mm2
Aktiver Hörer
Beiträge: 295
Registriert: 17.05.2010, 22:12
Wohnort: München

Beitrag von mm2 »

Hallo Uli,
solange man zumindest korrekt interpoliert (also keine Linearinterpolation).
wie nennt sich eine "korrekte Interpolationsmethode" ?

die resampler soxr/swr scheinen nach deren Doku leider nur "linear" zu können ?

Code: Alles auswählen

linear_interp
Use linear interpolation when enabled (the default). Disable it if you want to preserve speed instead of quality when exact_rational fails. 
bzw. welchen Zusammenhang hat das mit:

Code: Alles auswählen

filter_type
For swr only, select resampling filter type. This only affects resampling operations. 
VG
Maximilian
Bild
uli.brueggemann
Aktiver Hersteller
Beiträge: 4658
Registriert: 23.03.2009, 15:58
Wohnort: 33649
Kontaktdaten:

Beitrag von uli.brueggemann »

mm2 hat geschrieben: wie nennt sich eine "korrekte Interpolationsmethode" ?
M.b.M.n. ist die korrekte Interpolation eine sinc-Interpolation, so wie sie gerade Frank im vorherigen Beitrag beschrieben hat. Das ist dann mit Kompromissen behaftet, weil das zugehörige Filter theoretisch unendlich lang ist und praktisch dann gekürzt wird.
Bei vielen Hardware-Interpolatoren sind die Filter sehr kurz (es gibt im Prinzip auch reichlich Literatur zur Optimierung der kurzen Filter). Bessere Geräte, z.B. Weiss, verwenden dann 1024 oder 2048 taps.
Mit Rechnern ist es wiederum prinzipiell kein Problem auch extrem lange Filter zu realisieren, z.B. 524288 taps und mehr.

Acourate hat eine Funktion mit der man schon ein geradzahliges Upsampling veranschaulichen kann. Dazu z.B. eine Pulsantwort laden und darauf TD-Functions - Advanced: Raw-Zero-Stuffing [filterless] anwenden, z.B. 1 oder 3 Nullen einfügen. Man sieht dann schön wie sich im Frequenzgang die Frequenzen spiegeln.
Das Ergebnis dann speichern, die Abtastrate passend höher setzen und das Ergebnis wieder laden. Will man nun die Spiegelfrequenzen beseitigen erzeugt man ein sinc-Filter mit passend niedriger Frequenz mit Generate - sinc Signal liearphase (65536 taps) und faltet dann die Signale miteinander.
Wenn man sich den Kurvenzug im Zeitdiagramm anschaut findet man einen nett anzusehenden interpolierten Kurvenzug.

Grüsse
Uli
Bild
dietert
Aktiver Hörer
Beiträge: 533
Registriert: 24.11.2013, 10:31
Wohnort: 76571 Gaggenau
Kontaktdaten:

Beitrag von dietert »

Hallo miteinander,

das Kürzen des Filters nennt die Literatur "Windowing". Das ist etwas heuristisch, und bekannte Varianten heißen z.B "Blackman" oder "Kaiser". Optimierungskriterien für die Wahl des Windows wären für mich:
a) Einhaltung von z.B. 0,5 dB bis 20 KHz
b) Abfall auf -100 dB bei der Nyquistfrequenz

Damit bekommt man Filter mit wenig Überschwingen. Manche Filter sind insofern nicht optimal, z.B. die sogenannten HQ Varianten bei Soxr. Da werden z.B. 0,1 dB bei 21 KHz eingehalten, wieso eigentlich? Wofür braucht man ein Filter, was mit 170 dB sperrt?
Die kurzen Filter in den DAC Chips machen es schon ganz richtig. Schon ein FIR mit 20 Taps ist ein Filter, was man analog praktisch nicht mehr simulieren kann. Das Gehör arbeitet analog!

Grüße,
Dieter T.
Bild
mm2
Aktiver Hörer
Beiträge: 295
Registriert: 17.05.2010, 22:12
Wohnort: München

Beitrag von mm2 »

Hallo Dieter,
as Kürzen des Filters nennt die Literatur "Windowing"
bei soxr habe ich keine Möglichkeit gefunden die "Window" Form einzustellen.
Bei swr ( das als default einen kurzen Filter von 32 verwendet ) kann man die die "Window" Form einstellen.
Das erscheint bei den ffmpeg resampler (endlich) ein sinnvoller Unterschiede zu sein. :wink:

swr erzeugt kürzere Vor-/Nachschwinger, ob der Klangunterschied nur daran liegt kann ich nicht sagen,
trotzdem kann ich empfehlen den Unterschied zwischen soxr und swr mal aus zu probieren.

VG
Maximilian
Bild
dietert
Aktiver Hörer
Beiträge: 533
Registriert: 24.11.2013, 10:31
Wohnort: 76571 Gaggenau
Kontaktdaten:

Beitrag von dietert »

Hallo Ulli,

und genauso macht man es, um Filterkoeffizienten für den Upsampling-Tiefpass abzuleiten. Man multipliziert sinc() mit einem passend gewählten Window, fertig. Beispiel hier:

https://fiiir.com/

Grüße,
Dieter T.
Bild
dietert
Aktiver Hörer
Beiträge: 533
Registriert: 24.11.2013, 10:31
Wohnort: 76571 Gaggenau
Kontaktdaten:

Beitrag von dietert »

Hallo nochmal,

übrigens sind Interpolationsartefakte proportional zum Audiosignal, so ähnlich wie bei Klirr. Insofern würde man dabei auch von einer Hörschwelle bei etwa -60 dB ausgehen. Meine oben genannten -100 dB sind also schon weit jenseits von Gut und Böse. Auch die Forderung -0,5 dB bei 20 KHz ist auf der sicheren Seite, wenn man mal den Abfall des menschlichen Gehörs bei 20 KHz sieht.

Ein brauchbarer Tiefpass wäre also z.B.:
http://www.cadt.de/images/Audio/2018-02 ... filter.png

Er hat 173 Koeffizienten, wegen der Symmetrie sind das tatsächlich 87. Mit dem Cursor lese ich -0,6 dB bei 20023 Hz und -64 dB bei 22082 Hz ab.

Grüße,
Dieter T.
Bild
Antworten