Страница 5 из 5 Первая ... 345
Показано с 81 по 93 из 93

Тема: Экономичная реализация арифметики ЦОС в аудио

  1. #1 Показать/скрыть первое сообщение.
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    39
    Сообщений
    3,997

    По умолчанию Экономичная реализация арифметики ЦОС в аудио

    Просто FIR интерполятор - вещь достаточно банальная, а вот оптимизация ресурсов - задача более интересная.
    Поэтому новая ветка про оптимизацию. Предлагаю пообсуждать решения по оптимизации арифметики на FPGA и MCU для аудио ЦОС.
    Предыдущий проект со ссылками на другие ветки здесь.

    С появлением недорогих FPGA GoWin оптимизация вроде как особо и не нужна. Но в наших (отечественных) реалиях ассортимент и стоимость микросхем могут быть не самые лучшие.
    Ну а кроме того, у меня уже давно были мысли уместить ЦФ в LCMXO2-1200, т.к. это недорогая FPGA со встроенной флешью и в компактном исполнении: QFN-32 5x5mm. Что так же послужило поводом для нового проекта и стало целевой задачей при разработке.
    Несколько лет назад я прикидывал, что туда поместится только что-то совсем простое, вроде SM5842. Однако с опытом работы в верилоге получилось ужать арифметику настолько, что даже в такой скромный чип помещается нормальный полноценный апсемплер с шейпером.

    Кое что из стандартных приемов оптимизации уже описывал в проекте DF1.
    Теперь дополнил подробнее (документ во вложении ниже).
    Изначально мысль ужать ресурсы возникла из того обстоятельства, что в DF2 для первой ступени х2 интерполятора использовались каскады с максимально широкой полосой пропускания (максимально узкой переходной полосой). Сделал я это по аналогии со старыми микросхемами ЦФ, типа SM5847.
    Но потом подумал - а собственно нафига?
    В интегральных ЦФ первая ступень для любой входной частоты семплирования сделана максимально широкополосной чисто из соображений экономии: тупо используется одна и та же логика, просто на разной частоте.
    А на FPGA ситуация обратная: максимальная частота тактирования лимитирована, а добавить несколько наборов коэффициентов для разной входной частоты семплирования - не проблема.
    Частоты выше 20кГц все равно не слышно, поэтому переходную полосу можно сделать более пологой (сделать полосу пропускания для всех входных частот семплирования в районе 20кГц).
    Это не только укорачивает импульсную хар-ку фильтра, сохраняя преимущества Hi-Res контента, но и потенциально упрощает фильтрацию в аналоге: чем шире полоса пропускания, тем шире и ее отражение на частоте семплирования.
    А если так, то кол-во тактов, необходимых для обсчета фильтра резко уменьшается. На столько, что при тактировании частотой 1024Fs можно успеть обсчитать оба канала по очереди, что и стало основным нововведением в проекте DF3E. Т.е. в данном ЦФ блок многоступенчатого FIR апсемплера запускается вдвое чаще, чем в DF2.

    Правда одного сужения полосы первой ступени интерполятора оказалось недостаточно для поочередной обработки каналов.
    Поэтому для DF3E проекта были так же оптимизированы полуполосные каскады интерполяторов (сокращены до минимума). Из-за этого боковые лепестки в полосе задержания получились повыше, чем в DF2 проекте, но только на частотах кратных 705кГц, где они легко дофильтровываются аналоговым ФНЧ.
    Еще немного тактов удалось сэкономить оптимизацией алгоритма умножения центрального отвода полуполосных каскадов. В DF2 это умножение, как и остальные, выполнялось за два такта, а в DF3E - за один.

    Для упрощения модуля приема пакетов SPI обработка выполняется сразу по приему данных одного канала: приняли левый - запустили обработку, приняли правый - запустили обработку.
    Данное обстоятельство накладывает ограничение на входной I2S фрейм, в котором сигнал LRCK обязан иметь скважность 50%. Но я еще не сталкивался со случаями, когда данное условие не выполняется.
    Кроме того, обработка в остальных блоках так же выполнена последовательной, что позволило серьезно сэкономить еще и на шейпере и дополнительных амсемплерах. Кто пользовал DF2 сразу почувствует разницу.

    Что еще стоит отметить - добавлено округление с дизером в маке. Что позволило уменьшить разрядность шины данных до 22 бит, а так же - сделало входной аттенюатор фактически беспотерьным даже при малой разхрядности шины данных, и его теперь можно использовать как качественный цифровой РГ.
    Округление с дизером было и в самом первом проекте DF1, но теперь оно выполнено более аккуратно.
    Дизеры для мака и для округления выходных данных выполнены на LFSR со сдвигом на 16 тактов перед выборкой. Если использовать сдвиг на 2^N тактов, то длина генерации последовательности до повтора получается такая же, как и при сдвиге на один такт (т.к. 2^N всегда некратно максимальной длине последовательности LFSR).
    Так же, в ходе экспериментов с округлением на сигналах малой разрядности выяснил, что амплитуда дизера должна быть не менее +/-1 LSB, иначе получается модуляция шума, хотя на спектре следов квантования не видно.
    Для округления данных на выходе добавлена опция дизера с треугольным распределением. Шум которого на 3дБ ниже, чем с прямоугольным. Однако это имеет значение только для округления без шейпера.
    Наличие даже самого простого шейпера 1-го порядка исключает модуляцию шума и можно использовать самый простой шум с равномерным распределением минимальной амплитуды: +/-0.5LSB.

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

    Ну и отдельно стоит упомянуть про такую вещь, как асинхронное тактирование ядра в DF3E. Для этого выделен отдельный порт "CCLK".
    Типовая тактовая частота для данного проекта 1024Fs.
    Однако, в случае отсутствия тактовых генераторов на такую частоту, можно применить например 512Fs генераторы, а ядро фильтра (а так же ядро DSD дециматора) затактировать любой произвольной частотой, не обязательно кратной 1024Fs (например от встроенного в FPGA генератора).
    Это не только позволяет сохранить производительность при низкой частоте тактовых генераторов, но и при необходимости - поднять тактовую частоту и увеличить длину фильтров.
    Подняв частоту вдвое получим производительность DF2 (если конечно позволит быстродействие выбранной плисины).

    В архиве проект DF3E с исходниками, как обычно в альфа версии, т.к. протестировать весь накрученный функционал слишком трудоемко.
    В файле с примерами приведено два проекта:
    1. Вывода на параллельный ЦАП с возможность приема DSD битстрима.
    2. Вывод данных с соневского модулятора дифференциальными битстримами на PCM179x в моно-включении в режиме DSD.

    Помимо исходников в архиве есть графики частотных хар-к в разных режимах (включая хар-ки DSD дециматоров), диаграммы управляющих сигналов и данных, а так же доработанная утилита (и ее исходник) для преобразования коэф-тов, сгенерированным в матлабе.
    Модули вывода SAI_OUTPUT взяты с проекта DF2 с чисто косметическими доработками, поэтому его описание не делал.
    Вложения Вложения
    Последний раз редактировалось dortonyan; 26.02.2025 в 23:38.

  2. #81
    Завсегдатай Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,742

    По умолчанию Re: Экономичная реализация арифметики ЦОС в аудио

    Я не понял, скачанный DSD.iso файл будет на pcm-выходе идти без ослабления? Или это так у тебя на DSD-выходах при конвертации pcm2dsd?

  3. #82
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    39
    Сообщений
    3,997

    По умолчанию Re: Экономичная реализация арифметики ЦОС в аудио

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Я не понял, скачанный DSD.iso файл будет на pcm-выходе идти без ослабления?
    Ослабление будет такое, которое задано коэффициентами. В моем проекте коэф-ты сгенерированы с 1дБ аттенюацией.

  4. #83
    Завсегдатай Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,742

    По умолчанию Re: Экономичная реализация арифметики ЦОС в аудио

    Значит полная шкала pcm и dsd будут отличаться на 1 дБ. Так?
    Тогда можно ничего не делать.

  5. #84
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    39
    Сообщений
    3,997

    По умолчанию Re: Экономичная реализация арифметики ЦОС в аудио

    Естественно.
    Я же сразу написал, что преобразование сделано с единичным гейном (ну почти).
    Добавить еще 1дБ аттенюацию для PCM, и уровни вообще будут одинаковые.

  6. #85
    Завсегдатай Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,742

    По умолчанию Re: Экономичная реализация арифметики ЦОС в аудио

    Как я понял, чужие файлы дсд изначально имеют индекс модуляции 50%, отсюда и возник вопрос.

    ---------- Сообщение добавлено 21:49 ---------- Предыдущее сообщение было 21:44 ----------

    Проверю опытным путем немного позже, когда интегрирую модуль к себе.
    Спасибо за консультации.

  7. #86
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    39
    Сообщений
    3,997

    По умолчанию Re: Экономичная реализация арифметики ЦОС в аудио

    Цитата Сообщение от Delta213
    не могу создать проект, компиляция выдает ошибку:
    Error: Top-level design entity "DF3E_EXAMPLES" is undefined

    DF3E_EXAMPLES.v в топ левел поставил, все равно такая ошибка.
    Скопировал сюда из лички.

    В общем алгоритм сборки проекта в квартусе такой:
    1. Создаем папку, в которой будет лежать наш проект и копируем туда все файлы исходников: *.v, *.mem.
    2. Запускаем квартус 9.1SP2 и выбираем интерфейс quartus совместимый со старым MaxPlus: Tools->Customize->выбрать галку MAX+PLUS II.
    3. Создаем новый проект: File->New Project Withard->задает директорию проекта (созданную в пункте 1 папку), задаем имя (например MyDF3E)->выбираем FPGA->жмем finish. Проект готов. Никаких файлов на этом этапе добавлять в проект не нужно.
    4. Открываем навигатор проекта: View->UtilityWindows->ProjectNavigator.
    5. Открываем настройки проекта: в окне навигатора правой кнопкой на проект и выбрать settings.
    6. В настройках добавляем главный файл проекта: Files->Напротив строки File name жмем кнопку с точками, в диалоговом окне выбираем файл DF3E_EXAMPLES.v и жмем кнопку Add. В окне ниже должен быть виден только один этот файл.
    7. Т.к. в этом файле два модуля (два проекта), то нужно выбрать какой из них будет нашим проектом. В настройках проекта переходим в раздел General и в окошко Top Level Entity пишем название нужного модуля, например DF3E_DSD_IN. Жмем ОК.
    8. После этого в окне навигатора появится наш файл, но открыть его нельзя. Чтобы IDE правильно распознало иерархию проекта запускаем компиляцию: жмем значок с заводиком, или Processing -> Start Complitaion.

    Все, проект собран. В окне навигатора появится полная иерархия проекта.
    Чтобы посмотреть ресурсы, задействованные в проекте, в окне навигатора в строке Entity кликаем правой кнопкой -> Customize Columns -> выбираем какие колонки с ресурсами отображать в окне навигатора.

    9. Открываем планировщик пинов: Assigments -> Pin Planner. Назначаем распиновку. Для мастерклока выбираем пин с опцией Dedicated Clock. Там же можно задать дополнительные опции пинов (включить подтяжки, задать мощность портов по току и т.п.).
    10. Еще раз запускаем компиляцию.
    Проект готов, можно шить.

    Дополнительно.
    В меню проекта заходим в раздел Device (где выбирали FPGA). Жмем кнопку Device And Pin Options -> Unused Pins. В этом меню можно выбрать состояние пинов по умолчанию. Это состояние пинов, которые не использованы в проекте (не заданы в Pin Planner).
    После внесения любых изменений проекта перезапускаем компиляцию.

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

Название:	quartus DF3E project.png 
Просмотров:	33 
Размер:	130.1 Кб 
ID:	477318
    Последний раз редактировалось dortonyan; 27.08.2025 в 21:03.

  8. #87
    Завсегдатай Аватар для Delta213
    Регистрация
    23.01.2006
    Адрес
    Астрахань
    Сообщений
    5,263

    По умолчанию Re: Экономичная реализация арифметики ЦОС в аудио

    Цитата Сообщение от dortonyan Посмотреть сообщение
    В итоге должно получиться типа такого:

    Сейчас еще что-нибудь спрошу пока едет алтера, изучаю.
    Unused Pins в три стейтед?
    Я правильно понимаю, что (по умолчанию) на CLK надо подавать 1024фс? У меня генераторы на 512фс, тогда в DF3E_CORE.v надо заменить FMCK=1024, на FMCK=512, ???
    Еще не понял где надо указать offset binаry, OB есть и в DF3E_EXAMPLES.v и в DF3E_SAI.v, в обоих местах?
    Последний раз редактировалось Delta213; 28.08.2025 в 17:03.
    Подчиненный перед лицом начальствующим должен иметь вид лихой и придурковатый, дабы разумением своим не смущать начальство.
    Указ Петра I от 09.12.1709:

  9. #88
    Завсегдатай Аватар для Михаил45
    Регистрация
    09.03.2007
    Адрес
    Санкт-Петербург
    Возраст
    63
    Сообщений
    2,137

    По умолчанию Re: Экономичная реализация арифметики ЦОС в аудио

    Юра, ты лучше скажи, какой цапик хочешь подключить и от чего берешь 4 сигнала и2с. Я скомпилирую и выложу готовый проект для альтеры. Это проще, чем отвечать на твои вопросы. Вся информация в свое время была в ветках про ДФ и Алексей литературу выкладывал по верилогу.

  10. #89
    Завсегдатай Аватар для Delta213
    Регистрация
    23.01.2006
    Адрес
    Астрахань
    Сообщений
    5,263

    По умолчанию Re: Экономичная реализация арифметики ЦОС в аудио

    1541, 58, 56 сигнал с аманеро/ксинг i2s(филипс). Я и по веткам поиском искал, и по докам, этой инфы не нашел, а все три ветки читать, где 70% воды просто нет времени.
    Подчиненный перед лицом начальствующим должен иметь вид лихой и придурковатый, дабы разумением своим не смущать начальство.
    Указ Петра I от 09.12.1709:

  11. #90
    Завсегдатай Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,742

    По умолчанию Re: Экономичная реализация арифметики ЦОС в аудио

    1024фс можно плл-ем сделать из 512фс.

  12. #91
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    39
    Сообщений
    3,997

    По умолчанию Re: Экономичная реализация арифметики ЦОС в аудио

    Цитата Сообщение от Delta213 Посмотреть сообщение
    Unused Pins в три стейтед?
    По умолчанию оно так и есть.

    Цитата Сообщение от Delta213 Посмотреть сообщение
    Я правильно понимаю, что (по умолчанию) на CLK надо подавать 1024фс? У меня генераторы на 512фс, тогда в DF3E_CORE.v надо заменить FMCK=1024, на FMCK=512, ???
    Все верно.
    Но на CCLK входы надо частоту не ниже 45МГц.

    Цитата Сообщение от Delta213 Посмотреть сообщение
    Еще не понял где надо указать offset binаry, OB есть и в DF3E_EXAMPLES.v и в DF3E_SAI.v, в обоих местах?
    Только в examples. Внутри модулей ничего трогать не надо, все настройки выведены наружу.
    Параметры внутри модуля применяются только если они не заданы снаружи.

  13. #92
    Завсегдатай Аватар для Delta213
    Регистрация
    23.01.2006
    Адрес
    Астрахань
    Сообщений
    5,263

    По умолчанию Re: Экономичная реализация арифметики ЦОС в аудио

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Внутри модулей ничего трогать не надо
    Ага, теперь дошло. Осталось только дождаться плату и попробовать, я так понял DF3E_EXAMPLES.v как раз под пцм58 настроен, надо прошить и посмотреть. Генераторы заменю на 1024.
    Подчиненный перед лицом начальствующим должен иметь вид лихой и придурковатый, дабы разумением своим не смущать начальство.
    Указ Петра I от 09.12.1709:

  14. #93
    Завсегдатай Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,742

    По умолчанию Re: Экономичная реализация арифметики ЦОС в аудио

    Алексей, для полного счастья не хватает декодирования HDCD и фильтра деэмфазиса для 48 и 44.1 кГц.
    Модуль DSD2PCM+I2S вход отдельно у меня пока не запустился. Работаю в поиске своих косяков.
    Нажмите на изображение для увеличения. 

Название:	20250828_230101.jpg 
Просмотров:	2 
Размер:	1.42 Мб 
ID:	477357
    Последний раз редактировалось Turbo_man; 28.08.2025 в 23:06.

Страница 5 из 5 Первая ... 345

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •