Цифра и “цифрит”. Мысли вслух. Часть 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 г.Владивосток

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

  1. 55 млрд операций в секунду уже давно вполне подъемная для современных процессоров цифра. Так что вполне можно и в реальном времени интерполировать. Не говоря уж о том, что можно это делать заранее и играть в ЦАП сразу 768 кгц.

    • Ринат, добрый день.

      Проблема не в том, что это можно делать при помощи современных процессоров, а в том что это мало кто это делает.
      Суть моего высказывания в том, что решение возложить на выходной (аналоговый) каскад ЦАП (“аналоговый интегратор”) функцию точной интерполяции – изначально имеет свои функциональные ограничения. Если уж выходной каскад есть – то пусть будет какой есть, а если делать все “правильно” 🙂 , то данные перед преобразованием нужно подготовить, пересчитать из исходного формата 16/44 – по тем или иным алгоритмам пересчета, с последующей обработкой цифровым “фильтром” – и это отдельная большая тема.
      После пересчета объем цифровых данных станет в разы больше и требования к каналу передачи данных возрастают многократно – и это еще одна большая тема. В частности, возникает проблема с различными “шумами” как с теми, что возникают при цифровой фильтрации, так и с теми шумами и помехами, что возникают при передаче данных.
      PS Мне вдруг вспомнились опыты с DCS Vivaldi DAC + Upsampler. Идея разработчиков начинает проясняться. 🙂

      С Уважением,

      Виктор

      • Здравствуйте !
        Поговорил со знакомыми, занимающимися цифровой электроникой. По их словам – при реализации жестко заданных алгоритмов в “железе” в виде специализированного процессора или даже части оного – необходимые мощности сильно снижаются, так что я вполне допускаю, что в современных ЦАП-ах уже довольно качественный апсемплинг с цифровой фильтрацией.
        Кроме того, существуют такие проекты, как HQPlayer, вся фишка которого и состоит в множестве качественных алгоритмов цифровой фильтрации. И который даже умеет в качественную конвертацию в DSD. Насколько точно представленные алгоритмы воссоздают исходный сигнал – это вопрос, но главное, что подобные проекты реализуемы )
        Про шум – есть решения в виде шейпинга. Да, не все просто и там, но тем не менее.
        На счёт требований к каналу, можно прикинуть – 768кгц да 32 бита – имеем необходимую скорость передачи в 2,92 мбайт/сек. USB 2.0 обеспечивает до 60 мбайт/сек.
        Конкретно сейчас слушаю музыку с апсемплингом из 44,1 в 705,6 кгц. передача по USB 2.0.

        > Мне вдруг вспомнились опыты с DCS Vivaldi DAC + Upsampler.

        Почитал, спасибо. Да, не лишено смысла! Но я все же за программные решения. Как-то они гибче, чтоли 🙂

        С Уважением, Ринат.

Leave a Reply

Your email address will not be published. Required fields are marked *