Odszumianie w afftdn i anlmdn: który regulator działa i od jakiego poziomu szumu się opłaca, pomiar

Spis treści
ffmpeg przynosi dwa filtry odszumiające. afftdn pracuje przez szybką transformatę Fouriera i ma dwa regulatory: redukcję szumu, domyślnie 12, oraz poziom szumu, domyślnie −50 dBFS. anlmdn pracuje metodą nielokalnych średnich i ma jeden regulator siły.
Zwykła próba, posłuchać raz przed i raz po, nie odpowiada na najważniejsze pytanie: w zaszumionym materiale sygnał użyteczny i szum leżą jeden na drugim, a tego, co znika, nie da się rozdzielić. Ten pomiar rozdziela oba, przepuszczając filtr przez czysty materiał, w którym nie ma czego usuwać.

Jak wyglądał pomiar
- Materiał: 32 s muzyki ze stopy, werbla, hi-hatów, basu, płaszczyzny i leadu przy −19,62 dBFS, na końcu 0,3 s ciszy. Biały szum został domieszany na znanym poziomie, żeby błąd dał się policzyć.
- Miara: wszędzie odstęp od znanego czystego oryginału, czyli wartość skuteczna różnicy między wynikiem a oryginałem, odniesiona do wartości skutecznej oryginału. Przed odszumianiem jest to dokładnie odstęp od szumu. Gdy maleje, filtr pomógł; gdy rośnie, zniszczył więcej, niż usunął.
- Szkoda: ten sam filtr przechodzi dodatkowo przez czysty materiał. Tam nie ma czego usuwać, więc wszystko, czego brakuje na wyjściu, jest szkodą.
- Wyrównanie: oba filtry wydają wynik z opóźnieniem,
afftdno 1102 próbki, czyli 24,99 ms, aanlmdno 353, czyli 8,00 ms. Przed każdym porównaniem następuje wyrównanie przez korelację wzajemną. - Próba kontrolna: oba filtry potrafią wydać to, co usunęły, przez
output_mode=noise. Ta wartość zgadza się ze zmierzoną różnicą co do 0,00 dB, w obu filtrach.
Co znika, gdy nie ma czego usuwać
| Ustawienie | Szkoda pod sygnałem | Zmiana poziomu |
|---|---|---|
afftdn, nr 6, nf −50 |
−43,29 dB | −0,00 dB |
afftdn, domyślnie nr 12, nf −50 |
−42,19 dB | −0,00 dB |
afftdn, nr 24, nf −50 |
−41,67 dB | −0,00 dB |
afftdn, nr 48, nf −40 |
−26,16 dB | −0,05 dB |
anlmdn, s 0,001 |
−151,94 dB | 0,00 dB |
anlmdn, s 0,01 |
−105,77 dB | −0,00 dB |
anlmdn, s 0,1 |
−67,83 dB | −0,00 dB |
Poziom się nie zmienia, substancja owszem. W ustawieniu domyślnym afftdn zabiera z nienagannego materiału coś, co leży 42,19 dB pod sygnałem. Przy nf −40 jest to 26,16 dB pod nim, a taki rząd wielkości już słychać. anlmdn przy małych siłach zostaje na −105 dB i niżej, czyli praktycznie nie działa.
Który z dwóch regulatorów działa
| Zmieniany regulator | Wartość | Zmiana odstępu | Szkoda |
|---|---|---|---|
| redukcja szumu, nf stałe −50 | nr 3 | +0,38 dB | −45,28 dB |
| redukcja szumu, nf stałe −50 | nr 12 | +1,16 dB | −42,19 dB |
| redukcja szumu, nf stałe −50 | nr 48 | +1,50 dB | −41,49 dB |
| redukcja szumu, nf stałe −50 | nr 90 | +1,50 dB | −41,48 dB |
| poziom szumu, nr stałe 12 | nf −70 | +0,55 dB | −48,71 dB |
| poziom szumu, nr stałe 12 | nf −55 | +0,32 dB | −47,72 dB |
| poziom szumu, nr stałe 12 | nf −45 | +6,74 dB | −33,70 dB |
| poziom szumu, nr stałe 12 | nf −40 | +13,25 dB | −26,80 dB |
| poziom szumu, nr stałe 12 | nf −30 | +21,23 dB | −18,78 dB |
Obie serie biegną po tym samym materiale z szumem 40 dB pod sygnałem, czyli po rzeczywistym poziomie szumu −59,6 dBFS. Wartość dodatnia w trzeciej kolumnie oznacza, że odstęp od czystego oryginału urósł.
Redukcja szumu zmienia w całym swoim zakresie 1,13 dB i od nr 48 wchodzi w nasycenie. Poziom szumu zmienia 20,91 dB. Kręcenie pierwszym regulatorem jest kręceniem niczym.
Uwagę zwraca druga część tabeli: od nf −45 skutek i szkoda rosną niemal równo. Od −45 do −30 zmiana rośnie o 14,49 dB, a szkoda o 14,92 dB. Przy nf −30 szum znika bez reszty, a to, co zostaje z błędu, czyli −18,78 dB, to dokładnie własna szkoda filtru.
Od jakiego odstępu się opłaca
| Szum pod sygnałem | Rzeczywisty poziom szumu | Najlepsze nf | Najlepsza możliwa zmiana |
|---|---|---|---|
| 60 dB | −79,6 dBFS | −70 dBFS | −0,04 dB |
| 50 dB | −69,6 dBFS | −60 dBFS | −0,04 dB |
| 40 dB | −59,6 dBFS | −55 dBFS | −0,15 dB |
| 30 dB | −49,6 dBFS | −50 dBFS | −1,03 dB |
| 20 dB | −39,6 dBFS | −40 dBFS | −2,87 dB |
| 12 dB | −31,6 dBFS | −30 dBFS | −4,75 dB |
| 6 dB | −25,6 dBFS | −25 dBFS | −7,42 dB |
W każdym wierszu przebadano 23 ustawienia i wpisano najlepsze. Rzucają się w oczy dwie rzeczy.
Po pierwsze, najlepsze ustawienie idzie za rzeczywistym poziomem szumu. W czterech wierszach, w których odszumianie cokolwiek daje, najlepsze nf leży między 0,4 dB pod nim a 1,6 dB nad nim. Regulator nazywa się tak, jak to, czego chce: poziomu szumu, a nie upodobania. Domyślne −50 dBFS pasuje do materiału, którego szum leży przy −50 dBFS, i do żadnego innego.
Po drugie, przy czystym materiale nie ma czego zyskiwać. Przy odstępie 50 dB najlepsze ze wszystkich ustawień daje 0,04 dB, przy 40 dB jest to 0,15 dB, a w obu przypadkach wynik pochodzi od anlmdn przy sile, która praktycznie nic nie robi. Dopiero od 30 dB robi się z tego 1,03 dB, a nawet przy 6 dB, czyli przy wyraźnie słyszalnym szumie, jest to 7,42 dB.
Gdzie filtr sięga
| Pasmo tercjowe | afftdn, domyślnie |
anlmdn, s 0,01 |
|---|---|---|
| 63 Hz | −127,02 dB | −155,92 dB |
| 250 Hz | −130,46 dB | −140,91 dB |
| 1 kHz | −85,79 dB | −114,97 dB |
| 2 kHz | −46,84 dB | −104,29 dB |
| 4 kHz | −32,70 dB | −95,24 dB |
| 8 kHz | −27,10 dB | −90,93 dB |
| 10 kHz | −23,26 dB | −87,18 dB |
| 16 kHz | −29,78 dB | −91,77 dB |
Liczby mówią, jak głęboko pod sygnałem tego samego pasma leży ingerencja w tym paśmie, mierzona na czystym materiale. Poniżej 500 Hz afftdn nie rusza niczego, stoją tam wartości od 115 do 130 dB. Od 2 kHz robi się poważnie, a najmocniej filtr sięga przy 10 kHz, 23,26 dB pod sygnałem. Odszumianie to sprawa wysokich tonów.
Wybrzmienie w ustawieniu domyślnym zostaje oszczędzone. Pojedyncze uderzenie hi-hatu traci 50, 100 i 200 ms po szczycie po 0,00 dB, a po 400 ms 0,35 dB. Przy nf −40 i nr 48 jest to po 200 ms 0,27 dB, a po 400 ms 7,71 dB. Ogon zostaje więc skrócony, ale dopiero przy mocnym ustawieniu.
I jest jeszcze pauza. W ciszy na końcu afftdn w ustawieniu domyślnym obniża poziom szumu o 10,52 dB, przy nr 48 o 19,98 dB, a anlmdn o 26,06 do 28,02 dB. Kto słucha tylko tam, uzna anlmdn za najlepszego z kandydatów. W samej muzyce zmienia on 0,04 dB. Pauza to jedyne miejsce, w którym szum leży odsłonięty, i właśnie dlatego nic nie mówi o tym, co stało się z resztą.
Co z tego wynika
Poziom szumu należy zmierzyć, a nie zgadnąć. Fragment bez sygnału użytecznego, którego poziom zostaje odczytany w dBFS, daje wartość dla nf; miernik szumu tła wyszukuje takie miejsce i podaje wartość razem z poleceniem. Audacity idzie tą drogą z własnej woli i przed odszumianiem żąda profilu szumu z miejsca, w którym stoi sam szum. ffmpeg żąda zamiast tego liczby, a zła liczba to cała różnica.
Potem redukcja szumu zostaje tam, gdzie stoi. Daje ona w całym swoim zakresie 1,13 dB, podczas gdy regulator poziomu daje 20,91 dB, a od pewnego punktu każdy z tych decybeli jest opłacony decybelem szkody.
Przy porządnie nagranym materiale sięganie po to narzędzie w ogóle się nie opłaca. Od 40 dB odstępu wzwyż najlepszy możliwy zysk to najwyżej 0,15 dB, a nastawianie na to narzędzia, które w wysokich tonach sięga 23 dB pod sygnał, to kiepska wymiana. Tam, gdzie poziom szumu przeszkadza, nie będąc głośnym, tematem bywa nie szum, lecz rozdzielczość bitowa; co naprawdę dzieje się przy eksporcie do 16 bitów, opisuje artykuł o ditherze przy eksporcie.
Zakres i granice
- Pomiar powstał na białym szumie. Przydźwięk, szum taśmy i tło pomieszczenia rozkładają się inaczej;
afftdnma własne nastawy dla winylu i szelaku, których tu nie badano. - Miarą jest odstęp od czystego oryginału, a nie wrażenie słuchowe. Filtr może ten odstęp pogorszyć i mimo to brzmieć przyjemniej, bo równomierny szum przeszkadza mniej niż równie duży, ale nierównomierny błąd.
- Najlepsze nf szukano w siatce dziesięciu wartości co 5 dB. Zgodność z rzeczywistym poziomem jest więc dokładna co do tego kroku.
- Przy odstępach 50 i 60 dB rzeczywisty poziom leży poniżej najmniejszego badanego nf. Ponieważ i tak nie ma tam czego zyskiwać, nie zmienia to wyniku.
Pytania i odpowiedzi
Co powoduje opóźnienie o 25 ms, gdy odszumiona ścieżka wraca do miksu?
W pomiarze afftdn wydawał wynik z opóźnieniem o 1102 próbki, czyli 24,99 ms, a anlmdn o 353 próbki, czyli 8,00 ms. Plik przetworzony w ten sposób i położony obok pozostałych ścieżek jest spóźniony dokładnie o tyle. Przy pojedynczej ścieżce, na przykład nagraniu wokalu, cała ścieżka przesuwa się tylko w czasie; przy ścieżkach ze sobą powiązanych, choćby kilku mikrofonach przy tej samej perkusji, powstaje przesunięcie między sygnałami, które powinny się pokrywać.
Najwyraźniej widać to przy równoległym miksowaniu z nieprzetworzonym oryginałem, po które przy odszumianiu łatwo sięgnąć, żeby złagodzić ingerencję. Suma sygnału i jego kopii opóźnionej o 25 ms to filtr grzebieniowy z dołkami co 40 Hz, czyli dokładnie to zabarwienie brzmienia, którego złagodzenie miało pozwolić uniknąć.
Przed zmiksowaniem przesunięcie należy więc wyrównać, na przykład odcinając pierwsze 1102 próbki. Ta liczba dotyczy częstotliwości próbkowania tego pomiaru, czyli 44,1 kHz, jak wynika z 1102 próbek w 24,99 ms; przy innej częstotliwości próbkowania albo innych ustawieniach filtra trzeba ją wyznaczyć ponownie przez korelację wzajemną, tak jak pomiar robił to przed każdym porównaniem.
Czy właściwą wartość nf da się wyliczyć z odstępu od szumu?
Tak, jeśli znany jest poziom materiału. Regulator oczekuje rzeczywistego poziomu szumu, a ten wynika z poziomu materiału pomniejszonego o odstęp od szumu: dla materiału z tego pomiaru, przy −19,62 dBFS, odstęp 30 dB daje −49,62 dBFS, i dokładnie tam, przy −50 dBFS, leżało najlepsze nf. Zwykle jednak odstęp nie jest znany, dlatego pewniejsza droga prowadzi przez fragment bez sygnału użytecznego.
Źródła
- ffmpeg: Filters Documentation: rozdziały o
afftdnznoise_reduction,noise_floor,noise_typeioutput_modeoraz oanlmdnzstrength,patchiresearch; wartości domyślne pochodzą z wbudowanej pomocy ffmpeg 7.1.5. - Audacity: Noise Reduction: profil szumu jako pierwszy krok, rada, by brać najmniejszą wystarczającą wartość, bo wyższe uszkadzają pozostały materiał, oraz odsłuch usuniętej części jako sposób oceny tej szkody.
- ITU-R BS.1770: Algorithms to measure audio programme loudness and true-peak audio level: podstawa danych o poziomach w tej serii.