Konwersja z 48 na 44,1 kHz: aliasing, utrata wysokich tonów i szczyty w swr i soxr, pomiar

Management Summary
Zmiana częstotliwości próbkowania przelicza liczbę zapisanych wartości dźwięku na sekundę, zachowując tempo i wysokość muzyki. Jest potrzebna przy dostosowaniu nagrania do innego formatu dostawy. Porównanie pokazuje różnice w zachowaniu wysokich tonów oraz usuwaniu niepożądanych tonów powstających podczas przeliczenia. Szczyty sygnału mogą wzrosnąć mimo niezmienionej ogólnej głośności. Właściwa metoda i zapas poniżej maksymalnego poziomu pomagają uniknąć zniekształceń w gotowym pliku.
Spis treści
Nagranie 48 kHz zawiera 48 000 próbek na sekundę w każdym kanale. Dla pliku 44,1 kHz resampler oblicza z tego 44 100 nowych wartości. Muzyka powinna zachować tempo i wysokość dźwięku. Sama zmiana liczby w nagłówku pliku nie wystarczy.
Przed obniżeniem częstotliwości próbkowania zbyt wysokie częstotliwości wymagają odpowiedniego stłumienia. Przy 44,1 kHz górna granica reprezentowanego pasma wynosi 22,05 kHz i nazywa się częstotliwością Nyquista. Niedostatecznie usunięty ton 22,5 kHz pojawia się po konwersji błędnie przy 21,6 kHz. Taki ton o niewłaściwej częstotliwości to alias.
Porównanie obejmuje pięć ustawień FFmpeg 7.1.5. Tabele pochodzą z pomiaru z 17 września 2026 roku. Oryginalne skrypty, logi i pliki testowe sprawdzono 25 października. Wszystkie 70 wyników pomiaru tonów obliczono ponownie; wartości są zgodne. Czasy przetwarzania i szczyty masterów pozostają wynikami pierwotnego przebiegu.

Co i jak zmierzono
- Konwertery: FFmpeg domyślnie używa swr. Test obejmował długości filtra 16, 32 i 128. Alternatywny soxr działał z precision 20 i 28. Wymaga to kompilacji FFmpeg z obsługą libsoxr.
- Wyjście: 44,1 kHz w 32-bitowym formacie zmiennoprzecinkowym. Taki format może zachować wartości powyżej 0 dBFS. Granice filtrów pozostawiono bez zmian: cutoff 0,97 dla swr i 0,91 dla soxr. Opcje opisują różne punkty krzywej filtra, więc liczb nie można bezpośrednio utożsamiać.
- Tony: Po sekundzie sinusoidy na poziomie około −6 dBFS. Analiza obejmowała środkowe pół sekundy. Dopasowanie metodą najmniejszych kwadratów określa udział dokładnie przy badanej częstotliwości. Dziesięć tonów od 1 do 22 kHz sprawdza zmianę poziomu, a cztery powyżej 22,05 kHz — składowe aliasingu.
- Impuls: Pojedynczy krótki impuls ujawnia małe oscylacje przed główną wartością i po niej. Podane czasy sięgają do skrajnego przekroczenia wskazanego progu względem szczytu impulsu.
- Muzyka testowa: Dwa sztuczne, 32-sekundowe mastery stereo: jeden z limiterem i −9 LUFS, drugi twardo obcięty przy −1 dBFS, o głośności −8 LUFS. LUFS opisuje mierzoną głośność. Plik z limiterem dopasowano do około −1 dBTP w pomiarze czterokrotnym; kontrola szesnastokrotna daje inny wynik.
- Czas: Najkrótszy z trzech przebiegów na Raspberry Pi 4, wraz z dostępem do plików. Nie stanowi ogólnej gwarancji szybkości.
Ponowna kontrola potwierdza też, że -ar 44100 dało te same próbki co domyślny swr przy tym samym zmiennoprzecinkowym formacie wyjściowym. Historyczny test bez optymalizacji ARM NEON wykazał dla swr32 największą różnicę −131 dB względem tonu testowego, a dla soxr28 brak różnicy.
Wysokie tony: O ile spada poziom?
Pasmo przepustowe to zakres częstotliwości, który filtr powinien zachować możliwie bez zmian. Wartość 0 dB oznacza tutaj ten sam poziom tonu przed konwersją i po niej. Wartości ujemne pokazują osłabienie, a nie bezwzględny poziom pliku.
| Metoda | 18 kHz | 19 kHz | 20 kHz | 20,5 kHz | 21 kHz |
|---|---|---|---|---|---|
| swr, filter_size 16 | −0,81 dB | −1,67 dB | −3,03 dB | −3,95 dB | −5,04 dB |
| swr, domyślnie (filter_size 32) | −0,01 dB | −0,22 dB | −1,28 dB | −2,43 dB | −4,18 dB |
| swr, filter_size 128 | 0,00 dB | 0,00 dB | 0,00 dB | 0,00 dB | −1,01 dB |
| soxr, domyślnie (precision 20) | 0,00 dB | 0,00 dB | −0,01 dB | −0,07 dB | −3,75 dB |
| soxr, precision 28 | 0,00 dB | 0,00 dB | 0,00 dB | −0,03 dB | −4,06 dB |
Przy 20 kHz domyślny swr osłabił ton testowy o 1,28 dB. Z filter_size 16 strata wyniosła 3,03 dB. swr128 i oba ustawienia soxr pozostały w granicach 0,01 dB w zmierzonych punktach do 20 kHz. Przy 20,5 kHz największe odchylenie tych trzech metod wyniosło około 0,07 dB. Tabela potwierdza poszczególne punkty, a nie pełną kontrolę każdej częstotliwości.
Zbyt wysokie tony: Co pozostaje jako alias?
Poniższe wartości porównują wyjściowy ton o błędnej częstotliwości z pierwotnym tonem wejściowym. −100 dB oznacza składową mniejszą o 100 dB. Pomiar dotyczy wskazanej częstotliwości aliasu, a nie całego szumu pliku wyjściowego.
| Metoda | Ton 22,5 kHz, alias przy 21,6 kHz | Ton 23 kHz, alias przy 21,1 kHz | Ton 23,5 kHz, alias przy 20,6 kHz | Ton 23,9 kHz, alias przy 20,2 kHz |
|---|---|---|---|---|
| swr, filter_size 16 | −9,5 dB | −11,5 dB | −13,8 dB | −15,8 dB |
| swr, domyślnie (filter_size 32) | −14,3 dB | −19,9 dB | −27,1 dB | −34,4 dB |
| swr, filter_size 128 | −96,2 dB | −94,7 dB | −104,0 dB | −97,9 dB |
| soxr, domyślnie (precision 20) | −136,6 dB | −148,6 dB | −141,6 dB | −162,2 dB |
| soxr, precision 28 | poniżej −180 dB | poniżej −180 dB | poniżej −180 dB | poniżej −180 dB |
Dla tonu testowego 22,5 kHz swr32 osiągnął jedynie 14,3 dB tłumienia. W czterech punktach testowych swr128 uzyskał około 95–104 dB, a soxr20 około 137–162 dB. Dopasowane składowe tonu dla soxr28 leżały poniżej −180 dB. Nie oznacza to całkowitego poziomu szumu −180 dB ani gwarantowanego tłumienia każdej częstotliwości tuż powyżej 22,05 kHz.
Szczyty: Nowe próbki mogą przekroczyć 0 dBFS
Sample peak to największa wartość bezwzględna zapisanych próbek: ujemne szczyty również się liczą. True peak szacuje również szczyty pomiędzy próbkami, obliczając punkty pośrednie. Nadpróbkowanie cztero- i szesnastokrotne używa różnej liczby punktów; wynik zależy również od filtra. Szesnastokrotna kontrola z soxr nie jest drugim identycznym pomiarem BS.1770.
| Master | True peak 4-krotnie | True peak 16-krotnie | Sample peak | Próbki powyżej 0 dBFS |
|---|---|---|---|---|
| Limiter, −9 LUFS, −1 dBTP: Master przy 48 kHz | −1,05 dBTP | −0,79 dBTP | −2,31 dBFS | 0 |
| Limiter: swr, filter_size 16 | −1,16 dBTP | −1,07 dBTP | −1,53 dBFS | 0 |
| Limiter: swr, domyślnie (filter_size 32) | −1,03 dBTP | −0,96 dBTP | −1,44 dBFS | 0 |
| Limiter: swr, filter_size 128 | −1,04 dBTP | −0,98 dBTP | −1,35 dBFS | 0 |
| Limiter: soxr, domyślnie (precision 20) | −1,05 dBTP | −0,95 dBTP | −1,40 dBFS | 0 |
| Limiter: soxr, precision 28 | −1,05 dBTP | −0,95 dBTP | −1,41 dBFS | 0 |
| Twarde obcinanie przy −1 dBFS, −8 LUFS: Master przy 48 kHz | +0,38 dBTP | +0,72 dBTP | −1,00 dBFS | 0 |
| Twarde obcinanie przy −1 dBFS: swr, filter_size 16 | +0,28 dBTP | +0,38 dBTP | +0,01 dBFS | 2 |
| Twarde obcinanie przy −1 dBFS: swr, domyślnie (filter_size 32) | +0,41 dBTP | +0,54 dBTP | +0,18 dBFS | 18 |
| Twarde obcinanie przy −1 dBFS: swr, filter_size 128 | +0,47 dBTP | +0,64 dBTP | +0,27 dBFS | 41 |
| Twarde obcinanie przy −1 dBFS: soxr, domyślnie (precision 20) | +0,45 dBTP | +0,64 dBTP | +0,26 dBFS | 42 |
| Twarde obcinanie przy −1 dBFS: soxr, precision 28 | +0,44 dBTP | +0,64 dBTP | +0,26 dBFS | 44 |
Głośność pozostała bez zmian przy rozdzielczości 0,1 LU. Pomiar czterokrotny zmienił się najwyżej o 0,11 dB, a kontrola szesnastokrotna spadła o 0,08–0,34 dB. Mimo tego najwyższa zapisana wartość mastera z limiterem wzrosła z −2,31 nawet do −1,35 dBFS.
Twardo obcięty master początkowo nie zawierał próbek powyżej −1 dBFS. Po konwersji od 2 do 44 próbek kanałowych przekroczyło 0 dBFS, zależnie od metody. Zapis takich wartości jako 16- lub 24-bitowych liczb całkowitych bez wcześniejszego obniżenia poziomu powoduje obcięcie. Pozornie bezpieczny sample peak źródła nie chroni więc przed clippingiem po konwersji.
Pre-ringing i czas przetwarzania
Pre-ringing oznacza drobne oscylacje przed głównym impulsem. Testowane filtry tworzyły równie długie oscylacje przed impulsem i po nim. Progi −60 i −100 dB odnoszą się do szczytu impulsu.
| Metoda | Czas obliczeń dla 32 s stereo | szybciej niż w czasie rzeczywistym | Pre-ringing do −60 dB | do −100 dB |
|---|---|---|---|---|
| swr, filter_size 16 | 0,50 s | 64-krotnie | 0,14 ms | 0,18 ms |
| swr, domyślnie (filter_size 32) | 0,55 s | 58-krotnie | 0,27 ms | 0,36 ms |
| swr, filter_size 128 | 0,81 s | 39-krotnie | 0,68 ms | 1,41 ms |
| soxr, domyślnie (precision 20) | 0,70 s | 46-krotnie | 0,98 ms | 1,93 ms |
| soxr, precision 28 | 0,79 s | 40-krotnie | 1,32 ms | 2,27 ms |
Dla progu −60 dB czasy wynosiły od 0,14 do 1,32 ms, czyli różniły się niemal dziesięciokrotnie. Wartości bezwzględne są krótkie, ale nie przeprowadzono testu odsłuchowego. Liczby nie dowodzą zatem słyszalnej równoważności.
Historyczna konwersja 32 sekund stereo trwała 0,50–0,81 sekundy. soxr28 potrzebował około 0,10 sekundy więcej niż soxr20. Wartości obejmują uruchomienie procesu, odczyt i zapis oraz opisują ten komputer i ten przebieg.
Przykład konwersji
Przykład tworzy nowy plik zmiennoprzecinkowy 44,1 kHz z pliku WAV 48 kHz. -n zapobiega nadpisaniu istniejącego pliku wyjściowego. Format zmiennoprzecinkowy zachowuje ewentualne przekroczenia poziomu do późniejszej kontroli; nie czyni automatycznie pliku bezpiecznym do odtwarzania lub publikacji.
ffmpeg -n -i input-48k.wav -af aresample=44100:resampler=soxr -c:a pcm_f32le output-44100-float.wav
Po konwersji następuje kontrola sample peak i true peak oraz w razie potrzeby obniżenie poziomu lub odpowiednie ograniczenie. Kontroli wymaga także ostateczny plik eksportu. Sam true peak źródła nie gwarantuje górnej granicy po każdym filtrowaniu i eksporcie.
Potrzebna redukcja do 16 bitów z ditheringiem następuje na końcu. Dither to bardzo cichy szum zapobiegający systematycznym zniekształceniom zaokrąglania przy zapisie z mniejszą rozdzielczością. W przeciwnym razie sygnał już zaokrąglony do 16 bitów wymaga ponownego zaokrąglenia po zmianie częstotliwości próbkowania.
FL Studio i ograniczenia porównania
Według podręcznika częstotliwość próbkowania eksportu FL Studio jest ustawiana w Audio Settings. Opcja Resampling w oknie eksportu dotyczy natomiast interpolacji kanałów Sampler i Audio Clip, na przykład podczas zmiany wysokości dźwięku. Zmierzone wartości FFmpeg nie opisują filtrów FL Studio.
Sztuczna muzyka testowa zawiera hi-haty sięgające wejściowej granicy 24 kHz. Energia powyżej 20 kHz mierzona w pierwotnym teście leżała około 27–29 dB poniżej całkowitej energii. Wiele rzeczywistych nagrań zawiera tam mniej energii. Słyszalność aliasów między 20,2 a 21,6 kHz zależy od muzyki, słuchu i odtwarzania; tego nie badano.
Pytania i odpowiedzi
Dlaczego dłuższe filtry dały tutaj więcej wartości powyżej 0 dBFS?
Nowy ciąg próbek trafia w inne miejsca przefiltrowanego przebiegu. Twardo obcięty master już wcześniej miał szczyty między próbkami. Filtry z mniejszą stratą wysokich tonów słabiej wygładzały te szczyty w teście. Wyjaśnia to wynik tego mastera, ale nie pozwala ogólnie obwiniać ani wykluczać resamplera jako przyczyny przekroczeń. Decyduje kontrola gotowego pliku.
Czy pomaga niższy cutoff?
Niższa granica przesuwa pasmo przejściowe w stronę niższych częstotliwości. Niepożądane wysokie składowe mogą być wtedy mocniej tłumione, lecz pożądane wysokie tony także mogą osłabnąć. Dłuższy filtr może zwęzić przejście. Tabele porównują stałe domyślne granice; dane nie zawierają osobnej serii pomiarów cutoff.
Czy silniejsze tłumienie aliasingu dowodzi lepszego brzmienia?
Pomiar potwierdza mniejsze niepożądane składowe przy sprawdzonych częstotliwościach. Nie badano słyszalnej poprawy. Czas przetwarzania, charakterystyka częstotliwościowa i pre-ringing są różnymi właściwościami i wymagają osobnej oceny.
Powiązane artykuły, narzędzia i źródła
- True peak po kodowaniu
- Twardo obcięty master
- Miernik LUFS i true peak
- Dither przy eksporcie do 16 bitów
- poradnik masteringu w FL Studio
- FFmpeg Resampler Documentation
- ffmpeg Documentation
- Implementation – Digital Audio Resampling Home Page (Julius O. Smith III)
- Theory of Ideal Bandlimited Interpolation – Digital Audio Resampling Home Page (Julius O. Smith III)
- Exporting Audio & MIDI – FL Studio Online Manual
- ITU-R BS.1770: Algorithms to measure audio programme loudness and true-peak audio level
- FFmpeg 7.1.5: resampler options