Цифра и “цифрит”. Мысли вслух. Часть 2

Котельников, его теорема, выходной каскад ЦАП и DSD

Считается доказанным, что любой стохастический (произвольный, случайной формы) сигнал, спектр которого выше определенной частоты равен нулю, может быть восстановлен по цифровым отсчетам, взятым через одинаковые промежутки времени, частота следования которых более чем в два раза должна превышать верхнюю частоту в спектре исходного сигнала. Для восстановления нужно каждый отсчет умножить на так называемый “Базис Котельникова”, который представляет собой некую интерполяционную функцию определенного вида.

Итак, еще раз – для точного восстановления сигнала необходимо производить определенные математические вычисления над имеющимися отсчетами – тем или иным способом 🙂

В случае с NOS ЦАП эти вычисления производит аналоговый выходной каскад, на вход которого с микросхемы ЦАП подается некие фиксированные уровни напряжения или тока, пропорциональные значению цифровых отсчетов, а на его выходе – изменения напряжения должны быть “гладкими”, “аналоговыми”. 🙂 Общепринятая схемотехника такого выходного каскада – интегратор напряжения (ФНЧ) с мощным буферным каскадом. Для меня совершенно очевидно, что функционально простое интегрирование отсчетов – лишь очень грубое приближение к реально требуемым математическим вычислениям по формуле Котельникова и таким образом строго говоря – ни один из ЦАП не способен 100% точно восстановить исходный аналоговый сигнал.


Попробуем хотя бы в первом приближении “По Котельникову” восстановить исходный аналоговый сигнал из цифрового, записанного в формате CD-audio. Формула восстановления сигнала:

kotelnikova-teoremy-nischeta-

t – текущее время, n – номер отсчета, T – период, через который берутся отсчеты 1/44.1кГц = 22.7мкс.

Предположим, что исходный аналоговый сигнал – обычный синус. Необходимо определиться, сколько нужно вычислить промежуточных значений между соседними отсчетами. В практике приближенных инженерных вычислений, для уверенного восстановления синуса достаточно 15…20 отсчетов. Возьмем 15 отсчетов. Для получения любого промежуточного значения нам нужна сумма ряда от “-” до “+” бесконечности. В реальности длительность сигнала, который записан на CD ограничена по времени 🙂 , поэтому логично снизить количество учитываемых отсчетов в сумме ряда до какого-нибудь конечного числа.

Для этого произведем такую оценку: через какое время пик (максимальное значение) функции станет меньше, чем единица младшего разряда.

Сигнал у нас 16 разрядный (CD-audio). Производим оценку:

kotelnikova-teoremy-nischeta-

Здесь 0<t<T, синус во времени меняется от -1 до +1 (заменяем на 1, что тоже неверно с точки зрения математики, но вполне допустимо с точки зрения физики процесса). Решая неравенство относительно “n”, получаем, что надо учитывать минимум 20860 отсчетов. Формула восстановления сигнала требует брать отсчеты не только “назад”, но и “вперед”, значит надо учитывать уже 41720 отсчетов.
Это значит, что относительно текущего момента времени, для достоверного восстановления текущего значения амплитуды сигнала необходимо использовать как 20860 “прошлых” отсчетов, так и 20860 “будущих” отсчетов, то есть необходим некий промежуточный буфер исходных цифровых данных, над которыми производятся вычисления, плюс некий буфер для хранения результатов. В тот момент, когда обработаны все отсчеты до времени t=T, последний отсчет из “прошедшего” времени убирается из буфера и добавляется следующий отсчет из “будущего” времени. Текущее время изменяется в пределах 0<t<T.

Это очень упрощенная математическая модель идеального ФНЧ для формата 16/44. Такой фильтр невозможно реализовать в рамках аналоговой схемотехники, но методом цифровой обработки исходных отсчетов вполне можно посчитать любой промежуточный отсчет между двумя соседними исходными.

Оценим необходимые нам вычислительные мощности. Согласно формуле восстановления сигнала очевидно, что для получения одного значения необходимо выполнить 6 действий. Для получения необходимого количества (15) промежуточных значений в реальном времени необходимо выполнить:

N=15*(6+1(сумма ряда))*41720*44100 ~ 193 млрд. операций в секунду.

Если использовать таблицу готовых sin(x)/x, вычислений нужно меньше: одно умножение и одно сложение на каждый отсчет.

N=15*2*41720*44100~ 55 млрд. операций в секунду

Конечно, алгоритм вычислений можно оптимизировать. Например – брать не
15 отсчетов, а один. В этом случае:

N = ~ 3.7 млрд. операций в секунду – что тоже довольно много.

Можно формулу Котельникова использовать в варианте интерполяционной формулы Уиттекера – Шеннона. По всей видимости, можно применить и так называемое “быстрое” преобразования Фурье. Вероятно, этот вариант наиболее реально реализовать в “железе” – и скорее всего он уже кем-то реализован.

Для меня совершенно очевидно, что в реальном масштабе времени интерполяция с необходимым уровнем точности невозможна, а ошибки, вносимые процессом пересчета и интерполяции – тем заметнее, чем менее стационарен был оцифрованный сигнал. На практике это значит, что в оцифрованном для CD звуке нет очень многого из того, что присутствует в изначально аналоговой записи. А в аналоговой записи нет многого, что можно услышать в живом звуке.

Так же очевидно, что оцифровка в формате DSD позволяет свести ошибки до минимального технически достижимого (на сегодняшний момент) минимума. По всей видимости это значит, что DSD оцифровки мастер лент и (или) “прямая” DSD запись с последующим воспроизведением через Native-DSD ЦАП позволяют в итоге получить качество звучания, наиболее приближенное к “старой доброй” аналоговой записи. Но для обработки DSD в “реальной жизни” необходимо применение цифровой фильтрации. (см. Часть 1). Очередная “петля времени” ?

Февраль 2020 г.Владивосток