Последний раз редактировалось tomtit; 29.05.2013 в 02:03.
CIC интерполяцией.
CIC - это экономичная реализация sinc фильтра, он же - фильтр "скользящего среднего":
https://digteh.ru/digital/sinc.php
https://www.compel.ru/lib/136833
В самом простом виде (минимальной длины) это линейный интерполятор (суммируем два соседних отсчета и делим пополам).
А еще проще (если устойчивость модулятора позволяет) можно выполнять ресемплинг без обработки, просто семплируя по несколько раз один и тот же отсчет (я в ветке про ЦФ описывал как).
Алексей спасибо. На модулятор сони я подаю 512fs, а на выходе клок мне нужен не более 128fs для 1547, хотя она может принимать и 512 по слухам - не зачем.
Насколько я помню, тда1547 штатно работает на 192фс. А значит 256фс почти номинал. Должна работать.
Структура модулятора от SONY скорее сгодится для АЦП, чем для ЦАП. Для ЦАП гораздо лучше будет цепочка интеграторов с распределенной ОС. Можно реализовать очень точную NTF без применения умножителей, поскольку в однобитном исполнении в каждой ветке ОС к сигналу прибавляется или отнимается одна и та же константа. В мультибитном случае - достаточно небольшой таблицы коэффициентов на каждую ветку ОС.
Ещё можно заменить рассчитанные коэффициенты на ближайшие простые числа. Этот приём должен удлинить предельные циклы модулятора и сделать их шумоподобными. При порядке модулятора 7,8 можно видимо не использовать дизеринг.
Умножители могут понадобиться только для реализации ОС резонаторов, но там обычно достаточно 1..3 битов точности, а их общее число <= половины порядка модулятора.
К тому же STF такой структуры - ФНЧ с ровной АЧХ.
Недостаток - аккумуляторы нужны примерно 29-32бита, тогда как для других структур 24-27 бит. Но для цифровой реализации это почти не имеет значения.
---------- Сообщение добавлено 11:49 ---------- Предыдущее сообщение было 11:35 ----------
Offтопик:
Я подрихтовал свой старый скрипт для расчёта модуляторов и в качестве теста сочинил модулятор 8-го порядка с частотами перегиба NTF в 27К и 147К, с петлевым усилением >160дБ, тактовой 512х и выходом ШИМ 64х. Максимальный уровень модуляции 0.72. Похоже, можно совсем не заниматься оптимизацией.
Для NTF использовать эллиптический фВЧ с минимальной добротностью полюсов и всё будет ОК.
Но, самоосциллятор пока выглядит предпочтительнее по меньшей шумовой нагрузке на восстанавливающий ФНЧ.
Последний раз редактировалось tomtit; 21.10.2022 в 00:37.
Продолжаю тестировать описанный в предыдущем посте ШИМ модулятор 8-го порядка со сверхглубокой (~170дБ) обратной связью.
Анимация - наличие/отсутствие RPDF дизеринга. Видно, что без дизеринга некоторые гармоники еле заметно выше.
Ступенька после 20кГц - работа цифрового фильтра на 24-битном сигнале 0дБ, поскольку симулировался полный тракт
с передискретмзацией с 1х в 512х. Выход - 64х.
Последний раз редактировалось tomtit; 21.10.2022 в 03:47.
Слежу за твоими работами. Конечно, в меру своих умственных способностей. Есть надежда, что такая конфигурация переиграет АК4137? Пока у меня связка 4137+1547 очень хорошо звучит.
Как в даташите.
На этот вопрос ответа нет. У некоторых товарищей даже 1543 всех переигрывает.
Правильный вопрос - можно ли сделать аналоговую часть на коленке лучше чем в ИС, в частности TDA1547?
Бруно утверждает, что можно, применив ШИМ+АКИХ. Я сам пока ещё не знаю.
Просто, применение готовых ИС абсолютно не интересно, мне на работе вполне хватает этого гемора.
Пока думаю и решаю, самоосциллятор или ШИМ 8-го порядка. Случайно наткнулся на весьма удачный модулятор. Пока не могу объяснить, почему именно модулятор 8-го порядка оказался вдруг в 1.5 раза устойчивее, чем сделанные по тому же самому шаблону модуляторы 5,6 и 7-го порядков.
Самоосциллирующий же, имеет примерно 5-Ый порядок, глубину ОС пониже - 120дБ и не показывает выраженной ступеньки после 20к, то есть его собственный SNR не лучше, чем у остального 24-бит цифрового тракта, но при той же тактовой, имеет вдвое более низкую частоту выходного ШИМ. Скорость нарастания ультразвукового шума тоже значительно меньше, то есть требования к ФНЧ на порядок ниже. К сожалению, не удалось использовать коэффициент модуляции выше 0.5 - на пиках сигнала начинает сильно снижаться частота ШИМ, да и АКИХ, длиной в 16 разрядов, выглядит слишком громоздко. Нужно искать другой метод подавления гармоник несущей.
В общем - везде компромиссы…
Вот что удалось выжать на 1024х с обеих модуляторов:
ЗЫ.
Да, ещё, два пика в спектре - это не гармоники, а алиасы основного тона из-за ограниченного -130дБ подавления ЦФ.
Последний раз редактировалось tomtit; 26.10.2022 в 22:21.
А я вот попробовал запустить хоть какой модулятор, по быстрому. В кач-ве железа использовал свою плату с плисиной латтис и PCM1792 ЦАПом в режиме DSD. Модулятор работает в штатном режиме х64, на входе данные х32.
Код модулятора взял готовый Сергея.
Но что-то пошло не так: вместо звука какая-то какафония.
Сначала думал PCM1792 неправильно конфигурируется, вывел битстрим из латтиса прямо на наушники. Оказалось, что звук такой же. Т.е. сам битстрим кривой.
На всякий случай проверил работу ЦФ перед модулятором: перевел 1792 в режим ext DF, подал х32 данные, все работает. Переключаюсь на модулятор - не работает (какафония). Попробовал вообще подать на модулятор данные в обход ЦФ (192кГц) прямо с ЮСБ транспорта, то же самое.
Причем без сигнала спектр шума похож на правильный:
Но при подаче 1к синуса получается какая-то каша с основным тоном на 125Гц! Т.е. в 8 раз ниже по частоте:
Попробовал посмотреть осциллограмму на выходе ЦАП (триангл частотой 50Гц). Сигнал почему-то ступенями:
Попробовал замоделить в симуляторе квартуса. Сначала подается сигнал близкий к максимуму, потому нуль, потом - близкий к минимуму.
Вроде криминала не видно:
Осциллогармма битстрима на выходе латтиса при отсутствии сигнала похожа на то что в симуляторе.
И не понятно как это отлаживать. Может есть какой-то способ проверки модулятора в модели или в железе? Можно ли что-то диагностировать по приведенным картинкам?
Или может для IDE нужны какие-то особые настройки компилятора для работы со сложными сумматорами?
Похоже на перегрузку модулятора, проверь, максимальный сигнал не превышает 1/2 от обратной связи.
В однобитнике принято считать сигнал ОС равным 1. То есть для 24-битного входа +1 равна 2**24-1, а
максимальная амплитуда сигнала +-2**23-1.
У меня осталось не очень приятный осадок от работы с Латтисом, Обычно конфигурацию делаю через SPI порт микроконтроллера, а потом общаюсь с регистрами через те же 3 провода по тому же порту. Так латтис почему-то успевает испортить все регистры, присоединённые к бывшим конфигурационным выводам, и их приходится заново переинициализировать асинхронным сбросом. Никто не может сказать почему такой глюк. У Зайлинкс всё хорошо. Агитирую компанию перейти на китайские ПЛИС, их хоть купить можно для работы, а всех остальных ждать до 24года, даже 20-летнее старьё.
Единственная ощутимая польза от Латтиса - дают бесплатную лицензию на год на Моделсим. Советую использовать его, а не Квартус. Там есть вывод сигнала в аналоговой форме, очень удобно для отладки ДСП алгоритмов.
По поводу отладки. Симулирую, сбрасываю в файл, анализирую в математическом пакете. Матлабом не владею, использую Маткад или Питон.
Для проектирования модуляторов, CAS лучше Математики не нашёл.
Хотя российский SMath Studio тоже иногда справляется.
Всегда проверяю работу полного тракта с интерполятором и модулятором.
Пока ошибок в синтезе Xilinx замечено не было, с остальными - опыт не более одного успешного проекта на работе.
Последний раз редактировалось tomtit; 30.10.2022 в 20:10.
Сигнал ООС - первое что проверил перед запуском, там все в порядке (по крайней мере в модели в квартусе).
Наверное придется делать тестбенч и запускать модель латтиса в моделсиме, а так не хочется.... (
Offтопик:
Много интересных статей и книжек
https://www.semanticscholar.org/pape...eaaf98ca8bea4b
https://www.semanticscholar.org/pape...66c202247a15e6
Сеемен Семеныч....
Нашел я касяк. И он не связан ни с ЦФ, ни с модулятором.
Для тактирования ЮСБ я взял системный клок ЦАПа, т.к. он такой же: 512Fs. Но при включении режима модулятора системный клок ЦАПа переключается на 64Fs. Соот-но ломалась работа ЮСБ транспорта.
Поэтому восьмикратное смещение спектра вниз, т.к. данные из транспорта забирались в 8 раз медленнее. )
Соньковский модулятор в исходном виде с 20бит разрядностью отлично играет, все хорошо.
Спектр 1к -20дБ на PCM4222 АЦП:
Над шумовой полкой трава какая-то есть, возможно разрядности маловато.
Проверил, нет. На 24-х битах даже хуже. Получается что уровень диттеринга надо делать повыше.
---------- Сообщение добавлено 11:09 ---------- Предыдущее сообщение было 10:39 ----------
Подал 16-битный сигнал, чтобы увеличить шум (он у меня везде +/-2LSB) - то же самое. Не знаю что это за артефакт. Надо пробовать повышать оверсемплинг модулятора.
---------- Сообщение добавлено 11:46 ---------- Предыдущее сообщение было 11:09 ----------
И, кстати, 2 бита на переполнение для данного модулятора не хватает, нужно задавать 3.
Сначала я это высмотрел в симуляторе. А потом и подтвердилось на практике: на синусе проскакивали иголки.
---------- Сообщение добавлено 11:52 ---------- Предыдущее сообщение было 11:46 ----------
Синус 1к полного размаха на выходе ЦАПа:
---------- Сообщение добавлено 13:09 ---------- Предыдущее сообщение было 11:52 ----------
Попробовал на этом же модуляторе тупо наращивать оверсемплинг. PCM1792 даже х512 нормально тянет.
Вот скрин синуса в режиме х256, шума уже не видно:
---------- Сообщение добавлено 13:26 ---------- Предыдущее сообщение было 13:09 ----------
Сообразил на скорую руку и приаттачил код на основе своего проекта, где соньковский СДМ прикручен к моему ЦФ с мастерклоком 1024Fs.
За работоспособность не ручаюсь, это просто пример. Но вроде должно работать.
И до кучи - модулятор попроще, 4-го порядка для оверсемплинга х128 и выше.
Последний раз редактировалось dortonyan; 31.10.2022 в 14:38.
Ну да, типичное распределение шума однобитника +-4-8сигналов ОС.
Не понял про дизеринг, амплитуда дизеринга 0.5 Рпдф равна сигналу, то есть +-23бита. Реально получается сделать только 0.25, то есть +-11бит.
За это и ругают однобитники, что даже 0.5 рпдф физически невозможен.
Расклад может быть примерно такой:
0.5 - сигнал
0.25 - дизеринг
Сумма - 0.75 должна укладываться в максимальный уровень модуляции.
Суммирование реально векторное, поэтому вероятность возбуждения модулятора из-за перегрузки невелика, но она есть.
Полностью избавиться от травы и модуляции шума можно только наращивая лупгэйн.
Последний раз редактировалось tomtit; 31.10.2022 в 16:20.
Этот модулятор не выдержит 0.75, да ещё шумом. у него максимум где-то 0.66...0.7 для гладкого сигнала, и то с дополнительным запасом разрядности на перегрузки внутри. Для устойчивости можно добавить аккуратные клипы в интеграторы, но лучше дитерить не только в одном месте, а при всех потерях разрядности статистически независимыми генераторами шума. Штатно он хорошо работает с RPDF дитерингом 1/256 шкалы перед квантователем, больше на самом деле не нужно.
Последний раз редактировалось sia_2; 31.10.2022 в 16:54.
Социальные закладки