О винилофильстве и плёнколожстве

Откуда в цифровом звуке берётся шум? Он берётся из не вполне точного представления аналогового сигнала, так как для того, чтобы описать синусоиду, у нас имеется конечное количество координат по оси Y. В случае с компакт-дисками это 65536 возможных значений, так как у нас есть 16 бит — 15 бит на описание уровня плюс один бит на знак. 8-битные звуковые файлы, кстати, беззнаковые (во бардак!) Ось Х проблемы не представляет, в полном соответствии с теоремой Найквиста-Шеннона-Котельникова

Зависимость в децибелах отношения сигнал/шум от того, каким количеством уровней описывается сигнал, линейная, и рассчитывается как 20log10(2количество бит), или примерно 6.02 × количество бит.

Стойкие апологеты аналоговых носителей напирают на то, что, мол на цифровом носителе всего 65536 уровней, а на нашем-то тёплом ламповом виниле (или на магнитной плёнке) количество уровней аналоговое, т.е. неограниченное!!! Ага, ага. А вот хрен вам. С аналогового носителя точно так же можно достать конечное количество уровней сигнала, и для хорошего “дореволюционного” винила это число составляет примерно 2000 или 11 бит. Это даст предельное отношение сигнал/шум в районе 70 дБ — что, вообще-то, не так уж плохо. Это заметно лучше MP3-шек, например =))) Только винил надо хорошенько помыть-почистить, чтобы не было слышно пыли — она сильно портит впечатление.

В случае с плёнкой уже надо говорить более предметно — тут смотря какая плёнка. Наилучшее качество в домашних условиях давали катушечные магнитофоны — с них можно было тоже достать примерно 11 бит. Кассеты, когда только появились, были полное и окончательное говно, и давали где-то 6-битный звук. Этого было вполне достаточно для применения в диктофонах (для коих, их, собственно, и разработали), но недостаточно для качественного воспроизведения музыки. Тем не менее, их растущая популярность и сопутствующие постоянные улучшения в области электроники привели к тому, что постепенно они вышли на уровень катушечных магнитофонов, а с введением технологий типа Dolby и прочих улучшайзеров, даже немного превзошли их (катушечные магнитофоны к этому времени уже, ясен пень, никто не улучшал). Но — это при наличии хорошей кассетной деки, качественной студийной компакт-кассеты, и т.д. А восхищаться аналоговым носителем МК-60, сунутым в Электронику-302 можно разве что после третьей бутылки.

Что имеем с гуся? С гуся имеем то, что аналоговый носитель тоже, по сути, цифровой — количество вытаскиваемой с него информации конечно. Это для любого носителя справедливо — даже для 35mm фотографической плёнки. С неё — в идеале — можно достать 10 мегапикселей. Повторюсь — в идеале. Со снимков на советскую ч/б плёнку середины 1960х годов я вытягивал примерно 1 мегапиксель, не более.

Дорисовал

Таки доделал програмку на Питоне, рисующую спектр сигнала и автоматически считающую КНИ+шум и ОСШ. Попутно узнал, как водится, много нового. За что люблю Питон — так это за то, что программа занимает менее 40 строк. На тех же Сях я бы усрался это рисовать. Даже на Шарпах бы усрался.

Программе скармливается звуковой файл с сигналом частотой в 1 kHz, сгенерированный программой Adobe Audition (в девичестве Syntrillium CoolEdit). Но можно взять и бесплатный Audacity, результат будет точно такой же. Программа читает файл, берёт значение с наибольшим пиком и даёт ему обозначение в 0 децибел. Остальное, соответственно, отрицательные величины. Подсчитывается среднеквадратичное значение всего, что не сигнал, и делится на уровень сигнала. Получается КНИ+шум (THD+N). Потом считаем ОСШ (отношение сигнал/шум, SNR) в децибелах: 20log10(сигнал / шум)

Вот так выглядит анализ звукового файла с сигналом 1 kHz, разрешением 16-бит, частота дискретизации — 48 kHz:

Это весьма близко к теоретическому идеалу — в идеале, разрешение 16 бит может дать ОСШ в 96.3 dB. Но у меня не идеал, так как я использую чуть менее, чем 16 бит — ибо если генерировать синусоиду с уровнем в 0 dB (т.е. по-максимуму), то почему-то уже лезут нелинейные искажения. Так что я создаю её с уровнем в -0.1 dB, минимальным отступлением от максимума, которое мне даёт делать Audition. В любом случае, 94 dB — это дохрена.

КНИ в 2 тысячных процента это тоже прекрасно. Без приборов этого никто никогда не увидит, искажения начинают быть слышимыми, когда уже вплотную приближаются к 1%, хотя это сильно зависит от того, что именно слушаем: если чистые синусоиды, то искажения начинают быть заметными гораздо раньше, а если в качестве тестового материала брать альбомы фифтисентов и прочих, то там можно и 10% искажений не услышать. Что не означает, что аппаратура, дающая КНИ в 0.05%, ничем не лучше аппаратуры, дающей 0.1% — она лучше; просто в реальности ушами этого ни один живой человек не услышит.

А теперь — снова пнём формат MP3 🙂 Никто как-то вот не задумывается о том, что они слушают в тысячедолларовых деревянных наушниках, подключённых к внешним усилителям класса А за семьсот долларов, обещающим КНИ в 0.00045%

А между тем это реалии MP3 с битрейтом в 192 килобита/сек:

А это — 320 килобит/сек:

Получше, конечно, чем 192 kbps, но всё равно проседание качества очень налицо — происходит серьёзное ужимание динамического диапазона (я в курсе, что ДД и ОСШ это не вполне одно и то же, но они связаны). На некотором материале (например, классическая музыка, обладающая большим динамическим диапазоном) это может быть очень заметно. На 192 килобитах так это точно заметно, тихая партия скрипки сопровождается скрежетом артефактов сжатия с потерями — собственноушно, так сказать, слышал. Дальнейшее увеличение битрейта после 320 килобит/с, кстати, уже ничего не даёт — ОСШ так и остаётся в районе 55 децибел.

Ещё надо будет попинать винилофильство и прочее плёнколожество, но это в другой раз 🙂

А что-то в этом есть

По совету ув. ny-quant попробовал использовать формулу x = r * x (1 – x) в качестве генератора случайных величин. Одного преобразования мне показалось мало, так что делал два кряду.

“В домашних условиях” проверить, качественная ли случайность не очень просто, надо вспоминать основы статистики и правильное применения хи-квадрата. Но есть неплохой способ — представить полученные значения в виде изображения. Если картинка выглядит шумом, то шансы на то, что значения действительно случайны, неплохи. Человеческий глаз очень неплохо натренирован на то, чтобы различать неслучайные узоры — миллиарды лет эволюции, чтобы издалека узнавать хищников или отличать ядовитых змей, даром не проходят.

Ну, как грица, pics or it didn’t happen.

Результат использования функции NumPy.random.random():

И результаты, полученные из двойного применения x = r * x (1 – x) с двумя разными значениями r:

Вообще — неплохо, должен признать.

Но если приблизить и рассмотреть детальнее, становится заметной разница. Справа — x = r * x (1 – x), слева — NumPy.random.random()

Как видно, x = r * x (1 – x) чаще принимает граничные значения, там много белого и много чёрного, и мало серого. Из-за этого, кажется, что есть узоры, как на булатной стали. Я не математик, но мне кажется, что большая равномерность является желательной.

Но вообще — для такой простой формулы должен признать, впечатляет.