Dither przy eksporcie do 16 bitów: zniekształcenia, modulacja szumu i noise shaping, pomiar

Management Summary
Dither to bardzo cichy szum dodawany przy zapisie muzyki z mniejszą liczbą dostępnych poziomów głośności, na przykład w końcowym pliku 16-bitowym. Zastępuje regularne zniekształcenia zaokrągleń równiejszym szumem tła. Ma to znaczenie zwłaszcza przy cichym wyciszaniu i wygasającym pogłosie. Różne metody inaczej rozkładają szum; mniej szumu w wrażliwych pasmach słuchu może oznaczać więcej łącznie. Dither należy do końcowego zmniejszenia precyzji i nie naprawia wcześniejszych uszkodzeń brzmienia.
Spis treści
Dither to bardzo cichy szum dodawany przy zaokrąglaniu sygnału audio do mniejszej głębi bitowej. Zapobiega powstawaniu powtarzalnego wzoru błędów związanego z muzyką. Ceną jest niewielki dodatkowy szum tła. Dither nie naprawia przesterowania ani nie dodaje miksowi mocy.
Plik PCM o głębi 16 bitów zapisuje każdą próbkę na jednym z 65 536 poziomów. Odstęp między sąsiednimi poziomami to jeden LSB, czyli najmniej znaczący bit. Przy pełnej amplitudzie równej 1 odstęp wynosi 1/32 768. Ciche wyciszenia i końcówki pogłosu mogą przechodzić przez zaledwie kilka takich poziomów. Zaokrąglanie ma tam większe znaczenie niż w głośnym refrenie.
Co zmieniają trzy podstawowe warianty
- Bez ditheringu: ta sama wartość wejściowa zawsze trafia na ten sam poziom wyjściowy. Błąd może tworzyć dodatkowe tony związane z sygnałem.
- RPDF: wartości losowe mają równomierny rozkład w zakresie szerokim na jeden LSB. Przy idealnym zaokrąglaniu bez przeciążenia średni błąd przestaje zależeć od sygnału. Ilość szumu nadal może się jednak zmieniać wraz z sygnałem.
- TPDF: rozkład trójkątny obejmuje dwa LSB od minimum do maksimum. W typowym układzie bez późniejszego odejmowania ditheringu zarówno średni błąd, jak i jego moc nie zależą od wejścia. Dodany szum pozostaje w pliku dostarczanym do odtwarzania.
Te zasady dotyczą zaokrąglania, a nie zniekształceń już obecnych w nagraniu. Znaczenie ma podana siła szumu: dowolna ilość szumu o rozkładzie trójkątnym nie zapewnia takiego samego wyniku. Przeciążenie wyjścia również wykracza poza ten prosty model.
Jak wykonano pomiar
Pomiar kontrolny wykorzystał FFmpeg 7.1.5 na komputerze aarch64, próbki mono 44,1 kHz w 32-bitowym formacie zmiennoprzecinkowym i konwersję do 16-bitowego PCM ze znakiem. Częstotliwość próbkowania nie zmieniała się. Filtr miał postać aresample=osf=s16:dither_method=…. Opcja -cpuflags 0 wyłączała optymalizacje właściwe dla procesora.
Test obejmował 41 stałych poziomów od 0 do 2 LSB, po jednej sekundzie, dziesięciosekundowe sinusoidy 1 kHz o szczytach −60 i −96 dBFS oraz dziesięć sekund cyfrowej ciszy. Statystyki stałych poziomów wykorzystywały środkowe 0,8 sekundy. Analiza tonów i szumu obejmowała środkowe osiem sekund. Poziomy szumu to wartości skuteczne, czyli RMS, względem pełnej amplitudy. Nie są oceną głośności ani wynikiem odsłuchu.

Cichy sinus może zostać mocno zmieniony bez ditheringu
Przy −96 dBFS sinus sięgał niewiele ponad pół LSB. Po zaokrągleniu bez ditheringu zostały krótkie impulsy. Ton podstawowy 1 kHz znajdował się 3,67 dB poniżej zamierzonego poziomu. Trzecia harmoniczna przy 3 kHz leżała tylko 0,87 dB poniżej tego tonu. Przy −60 dBFS wszystkie pozostałe składowe od 20 Hz do 20 kHz łącznie leżały 38,33 dB poniżej tonu podstawowego.
Z RPDF lub TPDF ton podstawowy przy −96 dBFS odbiegał w tym teście od celu najwyżej o 0,04 dB. Nie oznacza to zniknięcia szumu. TPDF zastąpił wzór zaokrągleń zależny od sygnału znacznie równiejszym szumem tła.
Dlaczego TPDF szumi równiej niż RPDF
Dla stałych wejść odchylenie standardowe wyjścia RPDF wynosiło od 0 do 0,50 LSB. Odchylenie standardowe opisuje rozrzut wokół średniej. Dokładnie na poziomie całkowitym w tym teście nie powstawał szum. W połowie między dwoma poziomami rozrzut osiągał 0,50 LSB. Wygasający sygnał napotyka więc różną ilość szumu.
Z TPDF rozrzut dla tych wejść pozostawał między 0,49 a 0,50 LSB. Idealna wartość skuteczna całego błędu wynosi 0,5 LSB, czyli około −96,3 dBFS przy 16 bitach. W cyfrowej ciszy zmierzono −96,37 dBFS. Szum zostaje także w pauzach, ale jego poziom nie podąża za wejściem tak jak przy RPDF.
Noise shaping przenosi szum między pasmami
Noise shaping zawraca przefiltrowaną część błędu zaokrąglenia do konwersji. Może zmniejszać szum w pasmach, na które słuch jest bardziej wrażliwy, i zwiększać go gdzie indziej. Mniej szumu w jednym paśmie nie oznacza więc mniejszego szumu łącznie. Poniższe wartości opisują badane metody FFmpeg przy 44,1 kHz:
| Metoda | Cały szum, dBFS RMS | 20 Hz do poniżej 4 kHz |
|---|---|---|
| TPDF | −96,37 | −103,84 |
| TPDF z filtrem górnoprzepustowym | −96,64 | −109,17 |
| Lipshitz | −84,09 | −120,68 |
| F-weighted | −77,84 | −119,87 |
| Shibata | −72,10 | −113,55 |
Lipshitz zmniejszył szum poniżej 4 kHz o około 16,84 dB w porównaniu z TPDF. Jednocześnie szum łączny wzrósł o 12,28 dB. TPDF z filtrem górnoprzepustowym zmienia rozkład częstotliwości dodawanego szumu; wymienione metody noise shapingu dodatkowo wykorzystują sprzężenie zwrotne błędu. Jeśli żądany filtr kształtujący nie jest dostępny dla wybranej częstotliwości próbkowania, FFmpeg może przejść na TPDF z filtrem górnoprzepustowym. Dlatego kontrola obejmuje także komunikaty ostrzegawcze.
Praktyczna kolejność eksportu
- Zachowanie nieprzetworzonego źródła i używanie 24 bitów lub 32-bitowego formatu zmiennoprzecinkowego do dalszego masteringu.
- Zakończenie EQ, limitowania i zmiany częstotliwości próbkowania przed końcową redukcją do 16 bitów.
- Jeden odpowiedni etap ditheringu dla tej redukcji. Bez jednoczesnego włączania ditheringu we wtyczce i oknie eksportu.
- Kontrola formatu, szczytów, początku i końca wyeksportowanego pliku oraz odsłuch wyniku.
Przykład FFmpeg jawnie wybiera TPDF i zapisuje nowy plik WAV w 16-bitowym PCM. -n zapobiega nadpisaniu istniejącego pliku wyjściowego. Wejście wymaga zapasu dla szczytów, aby uniknąć przeciążenia.
ffmpeg -n -i input.wav -af "aresample=osf=s16:dither_method=triangular" -c:a pcm_s16le output.wav
Resampler FFmpeg domyślnie nie dodaje ditheringu, dopóki metoda nie zostanie wybrana. Pole eksportu w FL Studio jest opisane dla 16-bitowego WAV i MP3. Stosuje kształtowany szum, którego większość leży powyżej 10 kHz. Podręcznik nie identyfikuje filtra, więc liczby z FFmpeg nie są pomiarem eksportu FL Studio. Przy eksporcie 24-bitowym i 32-bitowym zmiennoprzecinkowym to pole nie działa.
Granice pomiaru
Stałe wartości, sinusoidy i cisza wyjaśniają działanie konwersji. Nie ustalają słyszalności dla każdego utworu. Nie przeprowadzono odsłuchu ani testu eksportu FL Studio. Dodatkowa kontrola obecnej wersji FFmpeg z optymalizacjami CPU i bez nich nie odtworzyła wcześniej zgłaszanego przesunięcia składowej stałej o pół LSB. Sama architektura procesora nie wystarcza więc do przewidzenia takiego przesunięcia.
Pytania i odpowiedzi
Czy każda operacja na pliku 16-bitowym wymaga ponownego ditheringu?
Nie. Kopia zachowująca identyczne bity nie zmienia próbek. Wiele zmian poziomu, efektów i zmian częstotliwości próbkowania tworzy natomiast wartości pośrednie, które wymagają zaokrąglenia przy ponownym zapisie w 16 bitach. Znaczenie ma faktyczna zmiana wartości próbek.
Dlaczego unikać powtarzanego ditheringu?
Kolejny etap dodaje następny składnik błędu. Dwa niezależne składniki o jednakowej mocy mają łącznie około 3 dB więcej mocy niż każdy osobno. Nie jest to stały wzrost dla każdego łańcucha: zależność między sekwencjami szumu, filtrowanie i różne poziomy ditheringu zmieniają wynik. Plik roboczy o wyższej rozdzielczości pozwala uniknąć zbędnych powtórnych redukcji.
Czy dither przy 24 bitach zawsze jest bezużyteczny?
Test 16-bitowy nie daje uniwersalnej reguły. Teoretyczny błąd TPDF przy 24 bitach wynosi około −144,5 dBFS, zwykle znacznie poniżej szumu toru odtwarzania. O zastosowaniu ditheringu nadal decydują konwerter, format docelowy i przebieg pracy. Udokumentowane zachowanie pola FL Studio dotyczy konkretnego produktu.