DSP - Best Practice bei Formatumwandlung und Faltung?

Musikwiedergabe über PC und Mac

Beitragvon Bernd Peter » 05.02.2018, 13:19

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
Bernd Peter
Aktiver Hörer
 
Beiträge: 3142
Registriert: 04.05.2010, 19:37

Beitragvon frankl » 06.02.2018, 02:00

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
frankl
Aktiver Hörer
 
Beiträge: 393
Registriert: 20.01.2013, 02:43
Wohnort: Aachen

Beitragvon mm2 » 06.02.2018, 09:37

Hallo Frank,

dafür gibt es bei ffmpeg resamplern einen ähnlichen Parameter:
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
inaktiv
 
Beiträge: 295
Registriert: 17.05.2010, 22:12
Wohnort: München

Beitragvon mm2 » 06.02.2018, 10:49

Hallo zusammen,

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

Der Auszug:
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/swresample_8c_source.html#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
inaktiv
 
Beiträge: 295
Registriert: 17.05.2010, 22:12
Wohnort: München

Beitragvon mm2 » 06.02.2018, 12:32

Bild
mm2
inaktiv
 
Beiträge: 295
Registriert: 17.05.2010, 22:12
Wohnort: München

Beitragvon modmix » 07.02.2018, 08:04

Hallo Frank,

frankl hat geschrieben:das Bild unter "Impulse" (in http://src.infinitewave.ca/) kann man leicht fehlinterpretieren.

Das verstehe ich nicht: gezeigt ist die Antwort des jeweiligen Systems auf einen bestimmten Input - das ist doch ein sehr valides Vorgehen. Auch wenn der Input ein extremes Signal ist wie hier, wenn genau ein Sample mit dem Wert 1 zwischen lauter Nullern auftritt.

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?

In einem DAC ist die Frage zu beantworten, welchen Wert das Signal zwischen den durch die Samples gegebenen Zeitpunkten hat. Häufig (aber keinesfalls immer) ist das ein Sample&Hold 0-ter Ordnung: der letzte Wert gilt bis zum nächsten (die so gerne gezeigte Treppenfunktion). Das ist nichts anderes als die Faltung des Signals (z.B. ein einziges Sample != 0) mit der Fensterfunktion - ergibt das sin(x)/x.

Bild
Quelle: http://www.thefouriertransform.com/pairs/box.php

BTW:
Durch die SampleRate ist die maximale Bandbreite des digitalisiert angegebenen Signals begrenzt - alles gut.

Wo wir sicher übereinstimmen: ein analoger Dirac ist kein Signal, daß es in der Realität geben kann, weil eine unendliche Amplitide zu einen Zeitpunkt schlicht nicht geht. Trotzdem ist das ein brauchbares "Signal" zum Berechnen eines Systemverhaltens :wink:

Einverstanden?
Ulli


Neulich habe ich zwei DACs verglichen (Lynx L22 und RTX6001 - jeweils im Loopback):
Bild

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...

    Audacity zeigt netterweise die Samples als Punkte und interpoliert in der visuellen Darstellung linear statt mit S&H.
    Audition zeigt ebenfalls die Samples und verbindet mit Spline - da erscheint ein "Dirac" gleich viel runder :wink:

    Bild
Bild
modmix
inaktiv
 
Beiträge: 2412
Registriert: 17.07.2010, 15:58
Wohnort: Nutzung dieses Beitrags außerhalb des Forum ist nicht gestattet

Beitragvon uli.brueggemann » 07.02.2018, 09:35

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
uli.brueggemann
Aktiver Hersteller
 
Beiträge: 3430
Registriert: 23.03.2009, 16:58
Wohnort: 33442

Beitragvon frankl » 08.02.2018, 01:18

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
frankl
Aktiver Hörer
 
Beiträge: 393
Registriert: 20.01.2013, 02:43
Wohnort: Aachen

Beitragvon mm2 » 08.02.2018, 10:07

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 ?

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:
filter_type
For swr only, select resampling filter type. This only affects resampling operations.

VG
Maximilian
Bild
mm2
inaktiv
 
Beiträge: 295
Registriert: 17.05.2010, 22:12
Wohnort: München

Beitragvon uli.brueggemann » 08.02.2018, 11:30

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
uli.brueggemann
Aktiver Hersteller
 
Beiträge: 3430
Registriert: 23.03.2009, 16:58
Wohnort: 33442

Beitragvon dietert » 08.02.2018, 12:48

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
dietert
inaktiv
 
Beiträge: 527
Registriert: 24.11.2013, 11:31
Wohnort: 76571 Gaggenau

Beitragvon mm2 » 08.02.2018, 14:32

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
mm2
inaktiv
 
Beiträge: 295
Registriert: 17.05.2010, 22:12
Wohnort: München

Beitragvon modmix » 08.02.2018, 16:07

Hallo Dieter T.
dietert hat geschrieben:das Kürzen des Filters nennt die Literatur "Windowing". Das ist etwas heuristisch, und bekannte Varianten heißen z.B "Blackman" oder "Kaiser".
Die von Dir genannten Varianten und das damit verbundene Windowing werden bei FFT verwendet, um Artefakte zu vermeiden.
Hier ein paar Bilder aus http://www.electronicdesign.com/analog/choose-right-fft-window-function-when-evaluating-precision-adcs - Erklärung ggf. dort.
FFT-Gutfall: Daten setzen bei Wiederholung rechts und links ohne Sprung an:
Bild

Meist hat man dies:
Bild

Mit Windows werden die zu analysierenden Daten an den Rändern auf den Wert "0" gebracht - damit setzen sie ohne Sprung fort:
Bild

Nebenwirkungen gibt es natürlich auch hier 8) :
Bild

hth
Ulli
Bild
modmix
inaktiv
 
Beiträge: 2412
Registriert: 17.07.2010, 15:58
Wohnort: Nutzung dieses Beitrags außerhalb des Forum ist nicht gestattet

Beitragvon dietert » 08.02.2018, 17:07

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
inaktiv
 
Beiträge: 527
Registriert: 24.11.2013, 11:31
Wohnort: 76571 Gaggenau

Beitragvon dietert » 08.02.2018, 22:40

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-08%20upsampling%20filter.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
dietert
inaktiv
 
Beiträge: 527
Registriert: 24.11.2013, 11:31
Wohnort: 76571 Gaggenau

Vorherige

Zurück zu Computer-HiFi

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste