Účinnost gzip a bzip2 na ASCII-artovém analogovém zvuku

8. 11. 2023
Doba čtení: 6 minut

Sdílet

Autor: Depositphotos
Dnes uvedeme ukázky digitálního a analogového zvuku s preemfází, která proti kvantizačnímu zkreslené nepomůže, a budeme studovat účinnost gzipu a bzipu na analogový signál.

Skladba: Last Day On Earth(UK)/Peter McCormick: Fear Of Falling, CC-BY-SA 4.0 International

Původní zdroj

Autor: Karel Kulhavý

Bez předmagnetizace

Autor: Karel Kulhavý

S předmagnetizací (analogizací)

Autor: Karel Kulhavý

Pro zajímavost dithering – šum se přičte při záznamu, ale neodečte při přehrávání

Autor: Karel Kulhavý

Všechny čtyři mají stejné parametry: 16 dB odstup od šumu, 5 úrovní, 70 μs preemfáze.

Závěr: předmagnetizací (analogizací) jsme schody na přenosové charakteristice krásně vyžehlili, ještě lépe než je krásně vyžehlila střídavá předmagnetizace na magnetofonu: máme totiž zkreslení 0%!

Volba výstupního formátu kompatibilního s mediálními přehrávači

Jako výstupní formát bych měl nejradši 32-, 48– nebo dokonce 64-bitový celočíselný (LPCM - lineární PCM). IEEE 754 floatový formát je složitější na portabilní vstup a výstup, protože počítač nemusí interně IEEE 754 formát používat.

Nejdříve zkusím v Soxu překódovat 16-bitový WAV na vyšší počet bitů. Netestuji s programy aplay a paplay, protože jsem u nich nenašel možnost převíjení, která si myslím bude pro posluchače kazety důležitá.

Příkaz Výsledný formát MPV mplayer VLC
sox vstup.wav -b 24 vystup.wav celočíselný 24-bit signed little endian přehraje přehraje přehraje
sox vstup.wav -b 32 vystup.wav celočíselný 32-bit signed little endian přehraje přehraje přehraje
sox vstup.wav -b 40 vystup.wav nejde – sox: „sox WARN formats: wav can't encode to 40-bit“
sox vstup.wav -b 48 vystup.wav nejde – sox: „sox WARN formats: wav can't encode to 48-bit“
sox vstup.wav -b 56 vystup.wav nejde – sox: „sox WARN formats: wav can't encode to 56-bit“
sox vstup.wav -b 64 vystup.wav float 64-bit little endian přehraje šum a rachocení přehraje
sox vstup.wav -b 64 -e signed-integer vystup.wav nejde – sox: „sox WARN formats: wav can't encode Signed Integer PCM to 64-bit“
sox vstup.wav -b 64 -e unsigned-integer vystup.wav nejde – sox: „sox WARN formats: wav can't encode Unsigned Integer PCM to 64-bit“

Nejpřesnější všude podporovaný formát je 32 bitů LPCM.

Jaký bude odstup signálu od kvantizačního nelineárního zkreslení (je to korelované se signálem, někdo to eufemicky nazývá šumem)? 32-bitová LPCM (celočíselná) bitová hloubka má 194.42 dB. Práh slyšitelnosti je 0dB, řvaní naplno přímo do ucha je 135 dB, balónek propíchlý přímo u ucha 155 dB, petarda na 0,5 m je 171 dB, Krakatoa ze 160 km 172 dB, a nejhlasitější možný tón, kdy by ještě výchylky nešly fyzikálně nemožně do mínusového tlaku pod vakuum, 194 dB.

Čili vidíme, že u 32bitového formátu LPCM můžeme neanalogovost zanedbat.

Problematické znaky

  • Znak 0 se používá v C pro ukončení řetězců, pokud se do zdrojáku někdo podívá, špatně napsaný editor by mohl krachovat nebo zobrazovat špatně.
  • Znaky 13 CR a 10 LF jsou pro konce řádek
  • Uvozovka " 34 0×22 řetězec v C do kterého data budeme dávat
  • Obrácené lomítko \ 92 0×5C v C řetězcích
  • Otazník ? 63 0×3F kterým začíná noční můra jménem trigrafy
  • Defaultní vstupní znaková sada GCC ( -finput-charset=) je UTF-8 (viz man gcc). To neumožňuje využít bajty 128–255 pro 1-bajtové sekvence

Komprese zdrojáku

Ukazuje se, že pokud zdroják budeme komprimovat gzipem nebo bzipem, použití částečné znakové sady moc nevadí. Testoval jsem na 10 000 000 bytech z /dev/random  a měřil jsem velikost zakomprimovaného souboru. Gzipu nejvíc chutná 63 a Bzipu 64:

Počet znaků Znaky Overhead gzip Overhead gzip –9 Overhead bzip Overhead bzip –9
2 01 21.174% 19.356% 28.094% 28.137%
10 0–9 12.987% 12.977% 3.770% 3.745%
16 0–9A-F 13.846% 13.848% 1.789% 1.812%
26 A-Z 8.117% 8.119% 1.759% 1.749%
36 0–9A-Z 4.686% 4.682% 1.304% 1.315%
62 0–9A-Za-z 0.945% 0.942% 0.853% 0.843%
63 0–9A-Za-z+ 0.828% 0.830% 0.781% 0.780%
64 0–9A-Za-z+/ 0.899% 0.897% 0.702% 0.706%
65 0–9A-Za-z+/= 0.969% 0.969% 0.745% 0.739%
72 0–9A-Za-z.,:;()[]{} 1.296% 1.294% 0.987% 0.979%
80 0–9A-Za-z.,:;{}<>[]()*/_=+ – 1.432% 1.429% 1.106% 1.108%
92  !#->@-[]-~ 1.352% 1.356% 1.099% 1.096%

Spektra hudby

V článku Long-term Average Spectrum in Popular Music and its Relation to the Level of the Percussion [PDF] píšou, že zhruba od 100 Hz do 15 kHz je sklon 6 dB/oktávu což odpovídá filtru prvního řádu, a proto se při analogovém záznamu nebo vysílání používá preemfáze prvního řádu – prakticky to znamená, že tam je pouze jedna kombinace odporu a kondenzátoru. Spektrum na kazetě se tak lépe využije.

Kazeta má normálně ještě spodní preemfázi 3180 μs (50 Hz, BASF str. 3 vlevo a přehledová tabulka IASA) , tu jsem ale neimplementoval protože by to byla námaha navíc a již v roce 1962 argumentovali, že nedává smysl, šířka pásma pod 50 Hz je malá a tedy i energie ušetřeného šumu bude malá, a navíc dnešní taneční hudba má dle mé zkušenosti někdy silné basy (Elvis tehdá nedával dubstep bass drop), které by se touto preemfází mohly zesílit že by vystupovaly nad hudbu a potřebovaly redukovat nahrávací hlasitosti, aby se páska nepřebudila, a z toho by plynulo plýtvání odstupem signálu od šumu.

Oddechová analogová ukázka: Tajemné ruské krátkovlnné stanice UVB-76 4,625 MHz a Píp 3,756 MHz

Bzučák 4625 kHz je slavná a podle mě nejbizarnější a nejtajemnější rádiová stanice vysílající 24 h denně minimálně 41 let, a proto jsem ji samozřejmě neopomněl v 2023–04–27T22:00:13Z nahrát na SDR univerzity UTwente v Nizozemí s demodulací horního postranního pásma (USB) a spodní okraj jsem protáhl těsně pod nosnou frekvenci pro lepší basy.

Teorie, že je to stanice pro špióny nebo spuštění jaderné války v případě zničení, jsou vyvráceny detailnější analýzou. Opar bizarnosti a tajemna doplní kódová slova a termíny „monolit“, „uzor“, „komanda“, „debut“, „Naděžda“, „Sudak“ a „vulkan“. Můžete fantazírovat, co by tajemství mohlo být, a pustit si k tomu pravý autentický analogový záznam:

prace_s_linuxem_tip

Nahrál jsem mým VACem také sesterskou stanici Píp na přijímači ve Finsku, která místo bzučáku pípá, a občas také vyšle tajuplnou mluvenou zprávu v ruštině.

 _______________________________________________________
(+)  _______________________________________________  (+)
|   / UVB-76 Bzučák 4625 kHz 27. 4. 2023 22:00:13   \   |
|  | UTC, horní postranní pásmo cca. 4 kHz šířka,    |  |
|  | Nizozemí, Enschede, Univerzita Twente WebSDR    |  |
|  | http://websdr.ewi.utwente.nl:8901/              |  |
|  |        _________________________________        |  |
|  |       /            _________            \       |  |
|  |      |  A " A     |         |     A " A  |      |  |
|  |      | (     )    |   | |   |    (     ) |      |  |
|  |      |  v , v     |_________|     v , v  |      |  |
|  | 70 μs \_________________________________/       |  |
|  |                                                 |  |
|  | VIRTUAL ANALOG CASSETTE        BY KAREL KULHAVÝ |  |
|  |_________________________________________________|  |
|            /             (+)             \            |
|           /        _             _        \           |
|          /   _    (_)           (_)    _   \          |
(+)_______/___(_)_______________________(_)___\_______(+)

buzzer

Předchozí lokalita tajemného vysílače Bzučák UVB-76 (public domain)

Kompilace přímo ze zakomprimovaného zdrojáku

bzip2 -dc buzzer_112.c.bz2 | cc -O3 -x c - -lm -o recording && ./recording 0 | mpv -
Zakomprimovaný zdroják ke stažení Délka souboru zakomprimovaná Odstup analogového signálu od šumu analogové nahrávky analogizované na digitální nosič Preemfáze Modulační procesor Počet symbolů digitálního nosiče analogové nahrávky Bitová rychlost ve zkomprimovaném stavu Bitová rychlost zdroje Délka min:sec vzorkovací frekvence Počet kanálů Kvalita zdroje SHA256 .c.bz2 souboru
buzzer_112.c.bz2 1 090 478 B 43 dB 70 μs žádný 112 43 kbps 228 kbps 3:22 8 kHz mono 16-bit WAV 14,238 kHz 6723BA7C435F0887ED6CE78A69EEC570 3E2F8A9D2BA79D642871963930446947
buzzer_56.c.bz2 742 010 B 37 dB 70 μs žádný 56 29 kbps 228 kbps 3:22 8 kHz mono 16-bit WAV 14,238 kHz B4D4152B066A8C894669565B64F05FD3 CDC8647FF87DB5DC96F12EEAD4BE4F83
buzzer_28.c.bz2 560 543 B 31 dB 70 μs žádný 28 22 kbps 228 kbps 3:22 8 kHz mono 16-bit WAV 14,238 kHz DE71C3CF10EEC591C91AF2D234BAF503 56A71C0A50E027CB8E0DE3D6EA947EAA
pip_92.c.bz2 2 327 763 B 41 dB 120 μs žádný 92 34 kbps 192 kbps 9:02 6 500 Hz mono 16-bit WAV 12 kHz 6546FD6C5184BAA6DB8F8EEE56B6E1AD C760093C169CD31336D49F58C80E2799
pip_32.c.bz2 1 557 108 B 32 dB 120 μs žádný 32 23 kbps 192 kbps 9:02 6 500 Hz mono 16-bit WAV 12 kHz 4DAA5B06805052790A42C118029EEEF7 8E032B258A3AFB20C237AD85C32AA4E8

Příště budeme vysvětlovat, jak funguje nahrávání.

Autor článku

Karel Kulhavý vystudoval operační systémy, sítě a překladače na MFF UK a je autorem optického pojítka Twibright Ronja a spoluautorem textového a grafického webového prohlížeče Twibright Links.