Acourate Kompendium

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

Acourate Kompendium

Beitrag von uli.brueggemann »

Hinweis:
Der Gundgedanke dieses Kompendiums ist, nach und nach Tipps und Hilfestellungen für 'Acourate und sinnvolles Drumherum' zu geben. Sobald also im Forum oder auch per PN an mich Fragestellungen aufkommen, bei denen es
a) wert ist, eine Antwort allgemein hier zu verfassen
b) mir die Zeit erlaubt
werde ich gerne hier posten. Falls dazu dann ein Frage-Antwort-Spiel notwendig wird ist dann wie gewohnt ein passender Thread ausserhalb des Kompendiums zu eröffnen.

Die im Lauf der Zeit hier erstellten Kompendium-Beiträge werden chronologisch hintereinander aufgelistet. Diese Gliederung hier soll eine Möglichkeit bieten, ein Thema zu suchen und auszuwählen. Die einzelnen Kapitel können jeweils durch Anklicken des Gliederungspunktes geöffnet werden.

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

Pegelverlust und Clipping bei digitaler Filterung

Beitrag von uli.brueggemann »

Im Beitrag Pegelverlust? wurde nach dem möglichen Pegelverlust durch eine Korrektur gefragt. Woher kommt das und kann man es vermeiden?

Nun, bei der Erstellung eines Filters kennt man ja nicht das zu filternde Musikmaterial. Das kann z.B. ein CD-Track sein, welcher hinsichtlich der PCM-Codierung einen Amplitudenbereich von 16 bit mit -32768 als kleinstem Zahlenwert und +32767 als größtem Zahlenwert zulässt. Betrachten wir das Ganze normiert, teilen also den Bereich durch 32768 so ergibt sich ein Bereich von -1.0 bis +0.999969 oder absolut logarithmisch betrachtet von 0 dBFS (FS=full scale). Alles was ausserhalb des Bereichs liegt ist nicht zulässig, es wird abgeschnitten. Was denn landläufig unter Clipping zu verstehen ist.

Ein FIR-Filter kann nun
a) die Amplitude verändern
b) die Phase verändern

a)
Nehmen wir nun einmal an, dass ein gemessener und zu korrigierender Frequenzgang bei 1000 Hz bei 0 dB liegt und bei 2000 Hz eine Delle von -6 dB aufweist. Das Korrekturfilter würde dazu bei 1000 Hz die Verstärkung 0 dB aben und bei 2 kHz die Verstärkung + 6 dB. Das Ergebnis wäre damit passend bei 0 dB überall.
Wenn nun aber auf der CD eine Frequenz von 2 kHz mit 0 dBFS vorliegt, dann würde der DA-Wandler + 6 dB bekommen, was einem PCM-Amplitudenwert von ca. 65536 entspricht. Den es aber nicht gibt. Die Folge ist: der 2 kHz Sinus wird oberhalb 0 dB abgeschnitten, es clippt.

Um das zu vermeiden, bleibt nichts anderes übrig, als mit dem Filter bei 1 kHz um -6 dB abzusenken. Dann ergibt sich ein gerader Frequenzgang bei -6 dB. Das CD-Signal wird dadurch abgeschwächt (um 1 Bit), aber es clippt eben dadurch nicht.
Natürlich ist die Auflösung verschenkt, wenn das CD-Signal sowieso bis max. -6 dBFS geht. Aber man weiss es ja a priori nicht. Und was bei einer online-Convolution gerechnet ist, wird eben rausgeschickt. Eine dynamische Lautstärkeanpassung gegen Clipping ist nicht angenehm.

b)
Das Clipping aufgrund von Phasenverschiebungen ist eher unbekannt aber nicht minder wahrscheinlich.
Hierzu ein Beispiel mit zwei addierten Sinusschwingungen 100 Hz und 200 Hz. Beim ersten Bild ist alles ok.

Bild

Wird nun die 200 Hz-Schwingung um 45° in der Phase verschoben, ergibt sich, dass die maximalen Amplituden der beiden Schwingungen addieren und prompt liegt Clipping vor.

Bild

Es kann also sein, dass durch eine frequenzselektive Phasenveränderung im Musiksignal die resultierende Amplitude 0 dBFS überschreitet. Und in der Tat passiert dies und nicht so selten. Solange das Clipping nur kurzzeitig geschieht (1 oder 2 Samples) wird es selten wahrgenommen.

Es ist in dieser Hinsicht verblüffend, dass sebst ein einfaches Tiefpassfilter Clipping verursachen kann.

Um mit einem Filter definitiv kein Clipping zu verursachen (bei unbekanntem Musikmaterial) müsste man es erstaunlich weit abschwächen. Was aber dann auch nicht praktikabel wäre, weil die Wiedergabe zu leise wird.

Im Fall einr offline-Faltung sieht es etwas anders aus. Man kann dann einen Zahlenbereich verwenden, welcher keine full-scale-Begrenzung hat. Und rechnet das Ganze in 2 Durchläufen. Nach dem ersten Durchlauf wird festgestellt, was die maximal aufgetretene Amplitude war. Im zweiten Durchlauf clippt man bewusst (Abschneiden aller Werte > 0 dBFS) oder normiert vorteilsweise eben die Amplitude so, dass 0 dBFS nicht überschritten werden. Man kann sogar noch das Intersample-Clipping berücksichtigen, also eine zu große Amplitude, welche sich durch die Interpolation der Kurvenform zwischen den Abtastwerten zeigt.
AcourateNAS erlaubt die Wahl zwischen diesen Methoden.


zurück zur Gliederung
Bild
uli.brueggemann
Aktiver Hersteller
Beiträge: 4658
Registriert: 23.03.2009, 15:58
Wohnort: 33649
Kontaktdaten:

Beitrag von uli.brueggemann »

Erzeugen eines "gleichlauten" linearen Vergleichsfilters für A/B-Vergleiche

Nach dem Berechnen der Korrekturfilter mit Macro4 wird im Meldefenster die ungefähre Pegelabsenkung in dB angezeigt. Falls man es nicht mitbekommt - beim nochmaligen Öffnen des Macro4-Fensters wird der Wert als 'Previous Gain Ratio' mit angezeigt.

Um ein lineares Vergleichsfilter zu erzeugen, lädt man am besten einfach mal eine Korrektur und ruft dann mit einer leeren Kurve den Testsignal-Generator auf mit Generate - Test Signal.

Bild

Das Ergebnis sieht dann so aus, es wird ein Diracpuls erzeugt mit perfekt linearem Frequenzgang mit Verstärkung 0 dB.

Bild

Nun ist das Filter abzuschwächen, es soll ja ein Vergleichsfilter werden. Dazu nimmt man TD-Functions - Gain und gibt die previous gain ratio ein.

Bild

Das Ergebnis zeigt nun das Vergleichsfilter, welches dann nur noch mit einem geeigneten Namen abzuspeichern ist. Das Filter kann dann für alle Kanäle bzw. Abtastraten verwendet werden.

Bild


zurück zur Gliederung
Bild
uli.brueggemann
Aktiver Hersteller
Beiträge: 4658
Registriert: 23.03.2009, 15:58
Wohnort: 33649
Kontaktdaten:

CutNWindow

Beitrag von uli.brueggemann »

Die Funktion CutNWindow (zu finden mit TD-Functions - CutNWindow) dient zum Beschneiden und Fenstern einer aktuell angewählten Kurve im Zeitbereich.

Das Resultat einer Faltung zweier Signale hat die Länge der Summe der beiden Signale. Für die weitere Verwendung des Ergebnisses ist hierbei das Beschneiden und Fenstern sinnvoll.

Wenn man ein Signal vorne und hinten einfach abschneidet, ist dies gleichbedeutend mit einem Rechteckfenster. Alle Werte innerhalb des ausgeschnittenen Fensters bleiben unverändert. Das hat aber möglicherweise Nebeneffekte. Man muss sich nur veranschaulichen, dass z.B. ein Sinus-Signal mitten drin abgeschnitten wird, also nicht beim Nullübergang. Dann weisen Anfang und/oder Ende des Ergebnisses einen Sprung auf. Was gleicbedeutend ist mit dem Hinzufügen höherer Frequenzen.

Als Massnahme hierbei wird dann üblicherweise mit anderen Funktionen gefenstert. Weitere Hintergründe finden sich z.B. in der Wiki

Ich habe hierzu einmal ein Testsignal konstruiert:
1. Generate - Signal - Länge 65536 - Set to one, dann Pegelanpassung mit TD-Functions - Gain - Factor 0.5
2. Generate - Signal - Länge 65536 - Set to one at sample 32768 length 1 sample. Ebenfalls mit 0.5 verstärkt
3. Addition der beiden Signale mit TD-Functions - Addition

Das Ergebnis sieht dann im Zeitbereich so aus (der Frequenzgang spielt keine Rolle hier), dabei ist ein deutlicher Peak vorhanden. Der Peak = Sample mit maximalem Wert spielt eine große Rolle:

Bild

Ausschneiden können wir nur kürzere Signale, bestenfalls bleibt dieselbe Länge erhalten. Es geht logischerweise nicht, dass man dann z.B. ab Sample 32768 noch 40000 Samples rausschneidet, es sind dahinter ja nur noch 32768 Samples vorhanden. Falls Acourate solche Grenzverletzungen feststellt gibt es eine Fehlermeldung.

CutNWindow erlaubt das Ausschneiden beliebiger Längen, sofern sie kurz genug sind. Vorzugsweise entsprechen die Längen einer 2er Potenz, was über die Combobox einfach gewählt werden kann. Ansonsten gibt man die gewünschte Länge per Hand ein.

Als erstes Beispiel sei nun die Länge unverändert, aber das Windowing eingeschaltet. Dabei ist die Option peak symmetric ektiviert:

Bild

Es wird also ein symmetriches Fenster erzeugt und zwar um den Peak, den Acourate an der Position 32768 findet.

Derselbe Rechenvorgang, diesmal aber mit Ausschneiden eines Signals der Länge 32768. Acourate findet den Peak, schneidet damit ab Sample 16284 aus und fenstert dann symmetrisch:

Bild

Wenn man peak symmetric abschaltet und dann z.B. 6000 samples before peak vorgibt, entsteht folgendes Bild:

Bild

Man sieht, dass je nach Länge einer Seite links/rechts vom Peak das Fenster ngepasst wird.

Nun möchte man vielleicht an einer anderen Stelle schnibbeln. Dazu kann man mit den Markern einen Bereich markieren und dann wird der Peak innerhalb dieses Bereichs herangezogen (before Peak in Area). Das einmal dargestellt im nächsten Bild:

Bild

Zuletzt sei die Option erwähnt, bei der man schlichtweg die Position vorgibt, ab der man ausschneiden will. Das sollte nun bereits klar sein.

Die Checkbox RemoveDC wird bei den üblichen Anwendungen selten benötigt, da die Pulsantworten üblicherweise nur einen vrnachlässigbaren Gleichanteil aufweisen.

Hinweis: die Fensterung beeinflusst die Pulsantwort. Wenn das Signal eine übliche Pulsantwort darstellt, bei der sich alles um den Direktschall dreht (dort findet sich auch das Signalmaximum = Peak), kann es somit auch sinnvoll sein, ohne Windowing zu schneiden. Sofern eben am abgeschnittenen Ende die Signalpegel klein genug sind.

Hinweis2: es macht Sinn sich bei Faltungsergebnissen anzuschauen, wo denn der Peak liegt. Abhängig davon, ob die Ausgangspulse minimalphasig oder linearphasig sind, verändert sich die Peakposition im Faltungsergebnis.

zurück zur Gliederung
Bild
uli.brueggemann
Aktiver Hersteller
Beiträge: 4658
Registriert: 23.03.2009, 15:58
Wohnort: 33649
Kontaktdaten:

5.1 Config-Datei für JRiver erstellen

Beitrag von uli.brueggemann »

Ich werde immer wieder mal gefragt, wie man denn für JRiver eine Konfiguratiosdatei erstellt. Das soll hier mal als Beispiel für eine 5.1 Konfiguration aufgezeigt werden.

JRiver verwendet hierzu eine Syntax gemäß ConvolverVST, siehe auch hier. Dabei gilt nunmehr, dass die Filter in wav-Dateien abzuspeichern sind. JRiver nutzt dann auch die Metadaten, um z.B. die Abtastrate des Filters querzuchecken.

Die config ist unter einem Namen abzuspeichern, welcher üblicherweise so ausschaut:
Cor2.0_441.cfg
Cor5.1_48.cfg
Cor7.1_882.cfg
Man sieht zum einen einen Hinweis auf die Anzahl Kanäle (2.0, 5.1, 7.1), des weiteren einen Hinweis auf die Abtastrate (441, 48, 882, 96). Es wird damit ersichtlich, dass man für jede Abtastrate eine eigene config erstellen muss. JRiver schaut dann abhängig vom aktuellen Track nach, ob eine passende config vorliegt und verwendet diese dann.

Aufbau einer 5.1 config am Beispiel von mono wav-Dateien = jede Datei enthält ein einzelnes Filter.

Code: Alles auswählen

44100 6 6 0
0 0 0 0 0 0
0 0 0 0 0 0
C:\gültiger_Verzeichnispfad\Cor1L44.wav
0
0.0
0.0
C:\gültiger_Verzeichnispfad\Cor1R44.wav
0
1.0
1.0
C:\gültiger_Verzeichnispfad\Cor2L44.wav
0
2.0
2.0
C:\gültiger_Verzeichnispfad\Cor2R44.wav
0
3.0
3.0
C:\gültiger_Verzeichnispfad\Cor3L44.wav
0
4.0
4.0
C:\gültiger_Verzeichnispfad\Cor3R44.wav
0
5.0
5.0
Man kann auch eine multiway-Wav Datei für die Filter erstellen (Acourate - File - Save Multiway WAV). Bei einer 6-Kanal-Datei würde das z.B. so aussehen:

Code: Alles auswählen

96000 6 6 0
0 0 0 0 0 0
0 0 0 0 0 0
C:\gültiger_Verzeichnispfad\Multiway96.wav
0
0.0
0.0
C:\gültiger_Verzeichnispfad\Multiway96.wav
1
1.0
1.0
C:\gültiger_Verzeichnispfad\Multiway96.wav
2
2.0
2.0
C:\gültiger_Verzeichnispfad\Multiway96.wav
3
3.0
3.0
C:\gültiger_Verzeichnispfad\Multiway96.wav
4
4.0
4.0
C:\gültiger_Verzeichnispfad\Multiway96.wav
5
5.0
5.0
Es besteht auch die Möglichkeit, Kanäle zu mischen und zu addieren etc. Siehe dazu dann weiteres auf o.g. Seite zum ConvolverVST.

zurück zur Gliederung
Bild
uli.brueggemann
Aktiver Hersteller
Beiträge: 4658
Registriert: 23.03.2009, 15:58
Wohnort: 33649
Kontaktdaten:

Bass-Moden zielgenau mit Prefiltern bekämpfen

Beitrag von uli.brueggemann »

Dieser Beitrag ist eine Kopie des Beitrags viewtopic.php?p=168969#p168969 zum besseren Auffinden:

Damit nicht allzuviel Langeweile aufkommt gibt es hier ein neues Kochrezept (der Einfachheit halber seien bereits Macro1 und Macro2 durchgeführt) :wink:

1. Pulse48L und Pulse48R laden
2. Erstellte Zielkurve laden (z.B. erstellt anhand einer vorherigen Auswertung mit Macro1)
3. Gedankenleistung: man denke sich nun einen Pegel, welcher etwas oberhalb der Zielkurve liegt, aber unterhalb der Peaks der Raummoden. Ein simples Wertbeispiel: 10 dB

nun jeweils für links und rechts
4. FD-Functions - Amplitude Inversion - linearphasig (zwingend)
5. FD-Functions - Amplitude Limiter: -10 dB (aus dem Wertbeispiel wird durch Invertieren eben -10 dB)

Zoom in den Bereich von 100 bis 200 Hz. Suche nach einer Frequenz, wo beide (!) Kurven aus 5. bei -10 dB liegen (z.B. 156 Hz), dann für jeweils links/rechts

6. TD-Functions - Phase Extraction - minphase - below 0, above 156 Hz
7. TD-Functions - Gain - +10 dB (damit die Kurven auf 0 dB angehoben werden)

8. Abspeichern der Kurven als preL und preR
9. Verwendung von preL und preR in Macro 0
10. weitere Macros wie üblich

Das Verfahren vermeidet das Abschätzen und Zusammenbasteln von PEQs, es verwendet die tatsächlich gegebenen Peaks als Prefilter. Es werden nur die Peaks reduziert und keine Dips angehoben.

ff - viel Vergnügen

Grüsse
Uli

PS: wer's mag oder für nötig hält kann vor 8. die Prefilter auch noch glätten und somit scharfe Ecken rausrechnen
Bild
Gesperrt