Страница 1 из 2 12 Последняя
Показано с 1 по 20 из 30

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

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

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

    Просто 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 обработка выполняется сразу по приему данных одного канала: приняли левый - запустили обработку, приняли правый - запустили обработку.
    Данное обстоятельство накладывает ограничение на SPI фрейм, в котором сигнал 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; 09.02.2025 в 21:30.

  2. #2
    Старый знакомый Аватар для dee-jan
    Регистрация
    09.07.2009
    Адрес
    BLR
    Возраст
    43
    Сообщений
    931

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

    Как всегда, зачет!
    Сергей.

  3. #3
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    62
    Сообщений
    38,205

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

    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

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

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

    Алексей спасибо большое! Буду тестировать, особенно интересно отдельное тактирование ядра.

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

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    1. Вывод на параллельный ЦАП с возможностью приема DSD битстрима.
    СПАСИБО!!!


    Offтопик:
    Так смотришь и до ASRC доживём. Чтобы от одного гена 50МГц работать.


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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    асинхронное тактирование ядра в DF3E
    Наверно полезно, хотя при наличии PLL в FPGA не так и важно, кмк.

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

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

    Всем

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Так смотришь и до ASRC доживём. Чтобы от одного гена 50МГц работать.
    Ну вообще сам принцип, как это делается - до меня вроде бы дошло. Может когда-нибудь и запилю.
    Но там арифметика получается непростая. Может даже проще попробовать сразу запилить USB транспорт.

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Наверно полезно, хотя при наличии PLL в FPGA не так и важно, кмк.
    С асинхронным тактированием проще, т.к. частота кратная генератору может получиться либо слишком низкой (недостаточной для нужной производительности), либо слишком высокой (которую не вытянет по скорости логика).
    А так можно подобрать произвольную частоту, максимальную, которую вытянет конкретная плисина.
    Последний раз редактировалось dortonyan; 04.02.2025 в 21:56.

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

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    А так можно подобрать произвольную частоту, максимальною, которую вытянет конкретная плисина.
    Да, давно видел первые версии DSP Dolby-Prologic, работавший от асинхронного гена 25МГц, при LRCK 44,1 и 48 кГц. Да и другие DSP тоже так работали, загружали/выгружали данные по LRCK, а обрабатывали с асинхронным клоком.

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

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

    Асинхронное тактирование - дело не хитрое. Я такое встречал даже в каком-то старом ЦФ.
    Когда попробовал организовать его в ЦФ, то так понравилось, что добавил и в модуль DSD-дециматора.

  9. #9
    Частый гость Аватар для Кокон
    Регистрация
    12.06.2006
    Адрес
    Минск
    Сообщений
    496

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

    Фильтра ямаха ym34xx.

  10. #10
    Завсегдатай Аватар для antonluba
    Регистрация
    12.12.2014
    Адрес
    Сочи, Коломна
    Возраст
    46
    Сообщений
    1,042

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

    А если попробовать на альтера циклоне, сколько примерно ячеек потребуется?

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

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

    Антонлюба, 1400 примерно.

  12. #12
    Завсегдатай Аватар для antonluba
    Регистрация
    12.12.2014
    Адрес
    Сочи, Коломна
    Возраст
    46
    Сообщений
    1,042

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

    Спасибо. Надо пробовать

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

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

    Цитата Сообщение от Михаил45 Посмотреть сообщение
    Антонлюба, 1400 примерно.
    Если шейпер выбрать 1-го порядка и задать все папаметры константами, то будет еще меньше.

    Цитата Сообщение от antonluba Посмотреть сообщение
    А если попробовать на альтера циклоне, сколько примерно ячеек потребуется?
    Проект с DSD входом:
    Нажмите на изображение для увеличения. 

Название:	df3e_dsd_in_resoueces.png 
Просмотров:	45 
Размер:	15.7 Кб 
ID:	467674
    Проект с DSD выходом:
    Нажмите на изображение для увеличения. 

Название:	df3e_dsd_out_resoueces.png 
Просмотров:	32 
Размер:	11.6 Кб 
ID:	467675
    Оба проекта, приведенных в файле "DF3E_EXAMPLES.v" помещаются в самый мелкий первый циклон (как и предыдущие проекты). Я даже под него специально подобрал опции DSD-дециматора чтобы влез вместе с цифровым фильтром.
    Если ресурсы позволяют, то дециматор можно использовать более мощный (файл с коэффициентами и настройками есть в архиве).
    А для проекта с DSD выходом еще и куча свободных ресурсов остается.

    Цитата Сообщение от Кокон Посмотреть сообщение
    Фильтра ямаха ym34xx.
    Да. Посмотрел ДШ 3434 - аналогичная система. Правда там и вывод данных сделан в домене асинхронной тактовой частоты.
    88-го года прошлого века разработка, на минуточку.


    Offтопик:
    P.S.
    Т.к. DF3E помещается в LCMXO2-1200, то можно на ее основе сделать платку переходник для замены любого старого фильтра в PID корпусе, начиная от SAA и заканчивая 5842.
    Например, можно омолодить какой-нить старый аппарат на TDA1540: задать х8 оверсемплинг и шейпинг 1-го или 2-го порядка.
    Последний раз редактировалось dortonyan; 05.02.2025 в 18:06.

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

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Всем
    Ну вообще сам принцип, как это делается - до меня вроде бы дошло. Может когда-нибудь и запилю.
    Но там арифметика получается непростая. Может даже проще попробовать сразу запилить USB транспорт.
    Для Tang Nano 20K есть уже транспорт usb to i2s, осталось только туда твой ЦФ добавить и все.

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

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

    Тот проект по вашей ссылке смотрел, но там проект под UAC1. Под драйвер UAC2 все равно нужно допиливать.

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

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

    UAC1 обеспечивает PCM до 24бит/96кГц - выше крыши для аудио , конечно, кому то дсд надо и так далее, может и допилят, может уже есть у говина, не искал.

  17. #17
    iN GOD We TRUSt Аватар для EDDiE
    Регистрация
    13.02.2006
    Сообщений
    13,602

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


    Offтопик:
    Цитата Сообщение от Михаил45 Посмотреть сообщение
    PCM до 24бит/96кГц - выше крыши для аудио
    как сказать, мне больше на слух нра 24/192.


    Алексей, поздравляю с новой конструкцией.
    Спасибо.

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

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

    EDDiE, спасибо.

    Покрутил еще шейпер: если сделать его по структуре соневского модулятора (не знаю как она называется), без умножений, то получается еще экономичнее.
    Кому интересно - предлагаю пока в течение месяца потестить текущий проект и отписать отзывы.
    А через месяц перезалью архив в заглавном посте со всеми правками и дополненным описанием (некоторые моменты описать забыл).

  19. #19
    Завсегдатай Аватар для ditter
    Регистрация
    04.07.2004
    Адрес
    RUS
    Возраст
    51
    Сообщений
    1,085

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

    Цитата Сообщение от Михаил45 Посмотреть сообщение
    Для Tang Nano 20K есть уже транспорт usb to i2s
    смысл ? его не видно ни с какой стороны.
    во -первых хрен купишь просто так , оплачиваешь а продаван пишет в личку - отменяй ,не могу выслать.
    кроме того есть решения значительно дешевле и на том же UAC1 и вроде даже UAC2 транспорты сделали на все тех же STM32.

  20. #20
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    62
    Сообщений
    38,205

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

    Цитата Сообщение от ditter Посмотреть сообщение
    вроде даже UAC2 транспорты сделали на все тех же STM32.
    Здесь на форуме есть UAC2 на PIC32.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

Страница 1 из 2 12 Последняя

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

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

Ваши права

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