ЦАП Soekris R2R 1021/1121 — DIY


(Vitaly Bargatin) #41

В контексте продукции Soekris это именно FIR фильтр.
Т.к. в ЦАП проходит двух этапный апсемплинг (два раза по 8, итого 64 кратный). Что правильно, с моей точки зрения.

На графике его АЧХ (не отнормирована относительно 0dB на графике, поэтому обращайте внимание только на относительные изменения) фильтра NOS:


Увеличение зоны перехода:

Т.е. спадать от начинает очень рано и в -3dB уходит уже в районе 17кГц.

При этом фактически не фильтрует отражения начального спектра (появятся выше 22 кГц) после апсемплинга. Т.е. будет значительный ультразвуковой шум. Плохо это или хорошо - совершенно отдельный вопрос.
Очень похож на простой аналоговый фильтр.

С точки зрения динамических характеристик (время нарастания сигнала на меандре) он существенно превосходит все остальные типы фильтров. Вообще нет пре- и после- звона.
И это может быть слышно.

Вообще говоря, у него достаточно много поклонников. Я к ним не отношусь.

В контексте дискуссии в ветке по DAC HOLO - было обсуждение, как реализован NOS в этом цапе. Как я понял - постояльцы ветки считают, что там реализован “честный” NOS (без апсемплинга). Т.е. передискретизация потока не делается и он просто выводится на R2R матрицу в исходном виде.

В качестве подтверждения выкладывались данные осциллографа с выходного каскада.
Я пояснил, что точно такую же картинку можно наблюдать при применении подхода Soekris. Более того, использования подхода “честного NOS” даст заметно худший результат и пояснил почему.

Я искренне считаю, что все дискретные R2R цапы новой генерации (условно с 2015 года), построены по одному принципу - апсемплинг в FPGA с последующим выводом на R2R.
Нет никаких проблем реализовать “честный R2R”, только не понятно зачем.


(Марат) #42

Фильтрацию можно практически с идентичными результатами делать несколькими методами, посему гадать о конкретной реализации в китайцах, мягко говоря, малополезно.
Если про честный nos, я прошлым годом ради прикола его смакетировал. И влип. Буду оставлять вне всякого сомнения. Сейчас в основном слушаю 44.1 с простым аналоговым фильтром второго порядка.
Такие дела.


(Vitaly Bargatin) #43

По поводу реализации у китайцев - я не профи далеко. Но даже на уровне разглядывания платы видно, что реализовано все похоже. Приемник - FPGA - R2R - выходной каскад.

Я не говорю, что речь идет о заимствовании решений. Думаю, что все технические решения по R2R созданы достаточно давно. Просто с ростом доступности высокоточных резисторов стали массово появляться мелкосерийные дискретные решения по приемлемой цене.

Мне интерсен вопрос - разумно ли делать R2R без передискретизации (т.е. какова разумная тактовая частота матрицы).

Берем R2R zero hold цап. Отсчет (соответствующее ему напряжение) на выходе матрицы поддерживается постоянным до прихода следующего. Если нет передискретизации, то частота, например 44.1 кГц.

Спектр выходного сигнала с матрицы R2R в этом случае представляет собой математическую свертку спектра исходного сигнала со спектром ступеньчатой функции с частотой 44.1кГц. Будут искажения в частотной области 20-20кГц, отфильтровать их будет невозможно.

Чем короче ступенька (выше частота), тем искажения меньше . При нулевой длительности ступеньки это просто набор дельта функций, которые порождают только спектральные отражения (их отфильтровываем аналоговым фильтром), но не вносят искажений в области 20 - 20кГц.

Т.е. нужно повышать частоту тактирования матрицы до максимально большой величины. В Soekris - 2.8МГц и больше.
Т.е. нужно делать передискретизацию входного сигнала и в таком состоянии подавать на лестницу R2R.


(Vitaly Bargatin) #44

Только сейчас понял, что не понял эту фразу.

Вы имеете ввиду разные реализации FIR / IIR фильтров в FPGA или аналоговый фильтр после матрицы? Или все вместе?

Сейчас в основном слушаю 44.1 с простым аналоговым фильтром второго порядка

На каком чипе ЦАП?


(Vitaly Bargatin) #45

Что бы было понятнее, что происходит в R2R zero hold
https://en.wikipedia.org/wiki/Zero-order_hold

Суть - если не использовать передискретизацию, то АЧХ входного сигнала мягко заваливается верхней границе диапазона на - 3.9224 dB на частоте Найквиста. Т.е. примерно на 20кГц для 44.1кГц. Причем завал начинается очень рано (см графики по NOS Soekris).

Нормальный FIR фильтр имеет данный показатель на уровне -0,5 dB и спад начинается поздно (условно ~ 19,5 кГц)

Т.е. происходит примерно то же, что с фильтром NOS Soekris (с точки зрения математики они очень похожи).

Конечно, как я и писал ранее, такая подача очень многим нравиться.
Вопрос не в этом.
Если делаешь передискретизацию, то можешь использовать NOS или другой фильтр.
Если не делаешь - вариантов нет. Только АЧХ, аналогичная NOS фильтру Soekris.


(Марат) #46

Все вместе. Если комбинацией КИХ и БИХ фильтров можно с хорошей точностью аппроксимировать ПХ аналогового фильтра, то фильтрация может происходить как в плиске, так и после матрицы, отличить не получится, такой вот незамысловатый трюизм. Или и там и там, что обычно и бывает.

Матрица у меня обычная r2r, деталей пока не раскрываю, извините.

Про завал АЧХ всё совершенно справедливо, мало того, в изрядном количестве литературы он подается как неизбежное зло низкой (2х) частоты квантования, выбранной в мейнстриме. Дело в том, что искажения восстановленного классическим интерполятором сигнала растут с повышением частоты и, если не начинать валить после 16к, звук становится “жестяным, песочным, транзисторным” и еще полусотней нелестных эпитетов. Вероятно, отсюда произросла каста нелюбителей дельтасигм.

Насчет свертки со спектром ступен"ь"чатой функции - будьте любезны пояснить? На данный момент единственным пенальти неоверсемплящих цапов считались зеркала спектра после Fs/2 и невозможность их качественно отфильтровать (в этой ветке уже было разжевано). С этим я полностью согласен, но, к удивлению своему, обнаружил на практике, что, во-первых, энергия этих составляющих после даже второго порядка аналогового фильтра невелика для заметного влияния на выходной сигнал, а во-вторых, будучи кратными исходным частотам, они при смешении не дают какой-либо неприятной интермодуляции.
Практика в очередной раз поимела теорию. :slight_smile: Звучит очень хорошо.

Не подумайте, тем не менее, что я забил на оверсемплер совсем. Некоторые композиции звучат существенно лучше после удвоения/учетверения/увосьмерения Fs. (Некоторые, карл, не все!!) Поэтому интерполятор тоже пишется. Но это будет не классический симметричный КИХ, а кое-что поинтереснее.

Жизнь покажет.


(Vitaly Bargatin) #47

Большой респект за содержательный комментарий и вопросы. Для меня это важно и интересно.

  1. По комбинации FIR и IIR фильтров совершенно согласен. Понял.

  2. Абзац с интерполятором у меня вызвал вопросы.
    Если правильно понимаю, то это интерполирующий фильтр (мы же про PCM говорим). Если так, то искажения восстановленного сигнала не растут с ростом частоты. Посмотрите на очень хороший интерполирующий фильтр EQHQ (в начале темы я приводил его спецификации) - 0-19.00Khz ±0.00000005dB (pass band ripple), 22.50Khz -174.26dB (stopband attenuation). Он линеен до 19кГц, а на 22.5 кГц убивает все до -174dB. Никаких проблем с подавлением отражений.
    Правда его порядок (количество коэффициентов) ~ 2000. Soekris нашел возможность выделить память под фильтры такой длины.
    Обычным интерполирующим фильтром длины 100 - 200 коэффициентов такое создать невозможно.
    В Денафрипс Понтусе, если правильно помню, максимальная длина фильтра 64. В такой ситуации вы абсолютно правы.

Или вы про дельта-сигма ЦАП? Тогда из за ноиз шейпинга шум вытесняется очень высоко (условно за 40кГц). Там сильный фильтр не нужен. Поэтому в Sabre и AKM используются стандартные IIR фильтры с частотой среза 50, 60, 70 кГц.

Очень многие люди предпочитают Soft фильтры (с длинной зоной перехода, завал с 16 кГц) и осознанно выбирают их. Совершенно с вами согласен. Причины мне не понятны, но это не важно. Разные люди - разные предпочтения. Возможно это просто вопрос личного шаблона “правильного” звука.

  1. Абзац по По поводу zero hold ЦАП (матрица R2R).
    FIR фильтром достаточной длины можно убрать любые отражения. Просто это будет длинный фильтр. EQHQ - пример. Для этого нужно просто иметь достаточно свободной памяти и запас по вычислительным возможностям.

По поводу свертки.
Вся математика дискретизации и последующего восстановления сигнала использует понятие дельта-функции (бесконечно короткий импульс).
Переход из аналоговой формы в дискретную математически описывается произведением исходного аналогового сигнала на ряд дельта - функций, смещенных друг относительно друга на всемя семплирования (1/частоту дискретизации).

Посмотрим на спектр такого сигнала.
Спектр (фурье-преобразование) произведения двух сигналов равен свертке спектров (фурье преобразований) двух сигналов.
Фурье преобразование дельта-функции это константа = 1.
Фурье преобразование начального сигнала - его спектр.
Так и получается спектр дискретизированного сигнала - спектр отраженный и смещенный кратно частоте дискретизации.

Обратное тоже верно. Т.е. когда переходим из дискретного сигнала в аналоговый, умножаем дельта функцию на константу равную громкости сигнала. Спектр произведения тоже является сверткой спектров.

Проблема в том, что R2R цап не работает с бесконечно узкими импульсами. Его импульс - ступенька, длительностью 1/частоту дискретизации. В этом случае мы имеем не дельта-функцию (спектр которой = константе) а ступеньчатую функцию, спектр которой представляет собой sin(x)/x.
Соответственно появляются искажения.
Цитата по ссылке, приведенной мной в предыдущем посте

The fact that practical digital-to-analog converters (DAC) do not output a sequence of dirac impulses, xs(t) (that, if ideally low-pass filtered, would result in the unique underlying bandlimited signal before sampling), but instead output a sequence of rectangular pulses, xZOH(t) (a piecewise constant function), means that there is an inherent effect of the ZOH on the effective frequency response of the DAC, resulting in a mild roll-off of gain at the higher frequencies (a 3.9224 dB loss at the Nyquist frequency, corresponding to a gain of sinc(1/2) = 2/π).

Перевод
Тот факт, что DAC не выводит последовательность импульсов Дирака (дельта функций), но вместо этого выводит последовательность прямоугольных импульсов, означает, что существует эффект влияния на эффективную АЧХ ЦАП, выражающиюся в умеренном падении усиления на высоких частотах (3,9 dB потерь на частоте Найквиста).
Конец перевода

Когда мы делаем передискретизацию, мы увеличиваем (кратно степени апсемплинга) частоту, на который происходит это падение - т.е. делаем АЧХ более линейной в зоне 0-20кГц.

  1. По остаточному после фильтрации ультра ВЧ шуму - согласен. Даже читал в нескольких статьях, что остатки такого шума могут скрывать коррелированные шумы ЦАП и могут быть полезны. Правда там отмечалось, что очень сильно зависит от реализации ЦАП (где то позитивный эффект, где то нет).

Если найдете возможность - с удовольствием продолжу общение на эту тему.


(Vitaly Bargatin) #48

Я некорректно выразился. Приношу извинения. Я не свободно владею математикой такого уровня.

Возможно вы именно на это обратили внимание в своем посте.

Правильно так:
дискретизированный сигнал = свертке ряда дельта функций с исходным сигналом.
Спектр такой свертки = произведению спектров дельта функций (константа =1) со спектром исходного сигнала.

Обратное преобразование для zero-hold (R2R) - свертка семплов (дельта функций) с прямоугольной функцией периода 1/частота дискретизации.
Спектр (преобразование Фурье) = произведению спектра дискретизированного сигнала и спектра прямоугольной функции (это sin(x)/x).

По ссылке достаточно простыми словами приведено описание математики процесса дискретизации и восстановления сигнала.

Есть и статья в русской википедии.


(Vitaly Bargatin) #49

Понял, наконец, что имелось ввиду в абзаце про интерполятор. Возможно. :grinning:

Восстановление аналогового сигнала из цифрового (интерполятор) тоже создает спектральные отражения (как и в случае дискретизации). Соответственно появляются высокочастотные помехи.
Аналоговый фильтр на выходе убирает их.

Только в случае NOS расстояние между ближайшими отражениями спектра небольшое (спектр исходного сигнала 20 - 20кГц, спектр отражения начинается с 24 кГц).
При передискретизации эти спектры раздвигаются значительно сильнее. Например при 2-кратной ближайшее отражение начинается с 48 кГц.

Это же дополнительный + для передискретизации в R2R ?
Аналоговому фильтру значительно проще отфильтровать отражения.

В итоге главный вопрос - теоретически от апсемплинга только польза. Зачем все таки NOS?
Чисто субъективные предпочтения значительного количества аудиофилов + малопонятные вопросы дизеринга коррелированных шумов ЦАП(возможно)?


(Марат) #50

Ну вот. :slight_smile:
Пытливого человека достаточно оставить наедине с собой ненадолго, и он сам до всего докопается.
Ну кроме одной “мелочи”, на которой я буксую вместе с одним сильным математиком.
Нарежьте синус в 1кГц с частотой квантования 44.1к.
Потом синус в 20к.
Попробуйте восстановить фазу изначального сигнала по отсчетам.
Прикол, да?


(DEVID) #51

Замерьте КНИ 20 кгц в NOS на 44к


(Vitaly Bargatin) #52

Сорри, не понял вопрос.
Вы считаете, что КНИ в NOS R2R будут меньше чем КНИ в R2R с апсемплингом?
То, что я знаю, свидетельствует об обратном. Что упускаю?


(DEVID) #53

Если есть возможность, снимите замер.

Первый замер в NOS на 44к. синус 20к

Второй замер OS 44k. синус 20 K

Можно потом взять 10 кгц.
И повторить замер THD.

На основе замеров можно уже что то говорить.

Я хочу понимать порядок цифр.


(Vitaly Bargatin) #54

Смогу снять картинку осциллографа при двух фильтрах NOS (это не честный NOS, а вариант FIR фильтра) с обычным интерполирующим фильтром.
Визуально можно будет оценить КНИ.


(DEVID) #55

Нужно замер в числах, чтобы мы не гадали.

Числа нужны.


(Vitaly Bargatin) #56

Могу осциллографом показать спектр и вывести в dBfs уровень гармоник. Это не КНИ, конечно.

С моей точки зрения в NOS Soekris он будет больше. В чем сомнения у вас?


(DEVID) #57

Да нет какие же сравнения, в НОС там сразу все видно и так, но я тоже могу картинку кинуть, там сразу видно весь расклад по спектру.

Фишка в том, чтобы получить замер такой как на RMAA.
Именно НУЖНО ЭТО сделать.

Нам нужны значения в % THD чтобы самых маленьких пугать потом )


(Александр) #58

Прикол в том, что ухо не анализирует всю огибающую. Интерполяцию ухомозг делает сам, а если это делает фильтр, возникает неприятие.


(Vitaly Bargatin) #59

У меня нет внешней звуковой карты, к сожалению. Поэтому правильно сделать не смогу.
Да, с интересом увидел бы ваши картинки.


(Vitaly Bargatin) #60

Я в Matlab могу сделать:

  • дискретизацию 2 синусоид 1кГц и 20кГц с большой частотой дискретизации (скажем 352.8 кГц) и с 44.1 кГц.
  • сделаю 8x апсемплинг второго варианта и потом прогоню его через нормальный FIR lowpass фильтр.

Это что то похожее на предложение Марата.

Можно будет сравнить на графике:

  • внешний вид сигналов (352.8 и интерполированную из апсемплированного 44.1 кГц) во временной области. Должны увидеть сдвиг по фазе на константу (групповая задержка).
  • их спектр. Должны увидеть одинаковый спектр.
  • фазовые отличия. должны увидеть во втором варианте сдвиг на const по отношению к первому.

Станет понятно, страшен ли апсемплинг и обработка FIR математически.

Это будет убедительно для того, что бы убедиться в отсутствии вреда от такой обработки?
Или делать бессмысленно?

Можете предложить другой эксперимент.

Апдейт:
составляющая 20кГц уменьшится по амплитуде (FIR фильтр ее немного урежет).
Если возьмем 19кГц, то не уменьшит.