Страница 11 из 11 Первая ... 91011
Показано с 201 по 211 из 211

Тема: DF2 - Вторая версия DIY ЦФ

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

    По умолчанию DF2 - Вторая версия DIY ЦФ

    Итак, обещанный проект нового ЦФ.
    Опыт прошлой ветки показал, что вопросы построения ЦФ сводятся к конкретному проекту. Поэтому решил создать отдельную.

    Исходная ветка с обсуждением различных реализаций ЦФ здесь.
    Ветка про ЦФ DF1 здесь.

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

    В отличие от предыдущего проекта, новый делался как заготовка для самостоятельного применения и доработки под свои задачи. Поэтому все режимы досконально не тестировались, и проект выкладывается "как есть" в версии альфа.
    В исходниках есть только пара примеров: для FPGA cyclone и lcmxo2.
    Описание содержит краткое перечисление основных параметров, а так же инструкцию по самостоятельной сборке проекта и генерации собственных коэф-тов в MatLab.
    Картинок много, текста мало. Все как мы любим.
    Утилита и ее исходник для автоматизированной конверсии коэф-тов в формат верилога прилагается.
    Так же прилагаются матлабовские модели всех каскадов фильтра, архив со сгенерированными коэф-тами фильтров, примененных в проекте и симулинк-модель. Для запуска симулинк-модели нужен матлаб версии r2018b.

    - 25.09.2023 - Добавил MatLab модель шейпера в симулинке. На этот раз версии r2013b. В 2018-ом матлабе че-то намудрили со спектроанализатором, и в нем амплитуда сигнала получается зависима от порядка шейпера, или от кратности оверсемплинга.

    - 27.09.2023 - Правка шейпера 3-го порядка

    Шейпер 3-го порядка в проекте выполнен по схеме:
    Нажмите на изображение для увеличения. 

Название:	изображение_2023-09-27_132616551.png 
Просмотров:	86 
Размер:	17.0 Кб 
ID:	441606
    NTF шейпера на 1кГц сигнале:
    Нажмите на изображение для увеличения. 

Название:	изображение_2023-09-27_132509846.png 
Просмотров:	77 
Размер:	29.1 Кб 
ID:	441605
    Данный шейпер оптимизирован для работы на невысокой частоте семплирования (х16..х32) и с разрядностью данных не менее 7..8 бит.
    На работы на более высоких ЧД при меньшей разрядности данных можно упростить коэф-т шейпера, улучшив SNR и сэкономив на логике. Для этого исключается слагаемое Gain3 (по схеме симулинка):
    Нажмите на изображение для увеличения. 

Название:	изображение_2023-09-27_132931529.png 
Просмотров:	52 
Размер:	17.0 Кб 
ID:	441607
    В проекте это слагаемое находится в файле DATA_READ.v:
    Нажмите на изображение для увеличения. 

Название:	изображение_2023-09-27_133349302.png 
Просмотров:	76 
Размер:	20.6 Кб 
ID:	441609
    Данное слагаемое отклоняет значение коэф-та от 3-х, создавая дополнительный полюс на NTF. После упрощения коэф-та NTF шейпера принимает вид классического модулятора 3-го порядка.
    Нажмите на изображение для увеличения. 

Название:	изображение_2023-09-27_133125636.png 
Просмотров:	68 
Размер:	26.8 Кб 
ID:	441608
    Можно также это слагаемое не удалять, а менять его величину (увеличивать сдвиг), двигая тем самым полюс NTF.
    [свернуть]

    - 28.09.2023 - Отрефакторил модули DATA_READ и SAI_OUTPUT. Поправил описание.
    - 05.10.2023 - Поправил DF_CONTROL. Поправил описание.
    Вложения Вложения
    Последний раз редактировалось dortonyan; 05.10.2023 в 22:16.

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

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Цитата Сообщение от dortonyan Посмотреть сообщение
    То же самое касается модуля SAI_OUTPUT - ему пофиг как тактируется ядро, главное, чтобы у ядра на выходе было синхронное обновление данных (что и реализовано).
    Ядро и модуль вывода можно тактировать отдельно любой частотой и фазой, лишь бы эти клоки были синхронны друг относительно друга.

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

    Надежнее всего всю логику тактировать общим клоком по одному фронту.
    Алексей привет! Правильно понимаю, что можно спокойно тактировать ДФ2 512 fs? Ничего при этом не поменяется или надо DF2_UPSAMPLE х2 выставить?

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

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Приветствую Михаил.
    Да, коэф-ты ЦФ подобраны так, что можно практически безболезненно опустить частоту мастерклока вдвое. Только дополнительный оверсеплер трогать не надо.
    Просто макс оверсемплинг и частоту битклока на выходе нужно задавать вдвое выше. Т.к. ЦФ не знает какой частотой тактируется. Он видит только соотношение частоты мастерклока и входной/выходной ЧД.
    Входная ЧД 48к для ядра с клоком 512Fs будет восприниматься как 96к при клоке 1024Fs.
    Ну а чтобы не потерять производительность ядра, можно затактировать его отдельно через удвоитель на триггере (получается тактирование по обеим фронтам мастерклока). Я такой вариант из примера убрал, но оказалось что он вполне себе нормально работает.

    В частности, для клока 512 опробован такой вариант:
    1. Ядро тактируется через удвоитель. Макс. оверсемплинг задается такой же, как при клоке 1024.
    2. Модуль вывода тактируется напрямую 512 Fs клоком. Для него макс. оверсемплинг задается вдвое выше.

    Удвоитель на верилоге

    Код:
    // optional iCLK doubler Logic
    reg rDIV;
    wire wCLK = rDIV ^ iCLK;
    
    always@ (posedge wCLK) begin
    	rDIV <= !rDIV;
    end
    iCLK - вход мастерклока.
    wCLK - выход удвоенной частоты.
    [свернуть]
    Последний раз редактировалось dortonyan; 06.03.2024 в 13:35.

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

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Алексей спасибо! Я использовал pll, работает, но думаю, что при твоем решении будет лучше. Все играет, но хочу понять, почему кни выше с ДФ, чем без на tda1541.

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

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Сама-то арифметика искажений не вносит. Надо смотреть разницу в загрузке данных в 1541.
    В новом ЦФ в примере есть режим байпасс. Не пробовали через него сравнить (чтобы вывод данных был один и тот же)?

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

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Уже и не помню. Вернусь из командировки и проверю.

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

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Сама-то арифметика искажений не вносит. Надо смотреть разницу в загрузке данных в 1541.
    В новом ЦФ в примере есть режим байпасс. Не пробовали через него сравнить (чтобы вывод данных был один и тот же)?
    Проверил в самом щадящем режиме х4. Искажения на уровне обычном. Еще раньше лоханулся на тестовом синусе- он был на самом деле -6 Дб. Для этих цап достаточно, чтоб выросли НИ. На 0 Дб уровне все норма. При увеличении передискретизации до х16,х32 искажения растут, хотя звучит поначалу более "гладко". В общем остановился на ДФ2 с тактированием 512фс и внутренней PLL циклона 2 на глобальном клоке. Время музыку слушать, а не цапики перебирать. Спасибо тебе за пояснения и участие.
    Последний раз редактировалось Михаил45; 26.03.2024 в 19:38.

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

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Михаил, нет за что.
    Самое главное в нашем деле, что не надо искать раритетные микрухи ЦФ. На плисине можно сэмулировать любой.

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

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Михаил, нет за что.
    Самое главное в нашем деле, что не надо искать раритетные микрухи ЦФ. На плисине можно сэмулировать любой.
    Да, с учетом того, что свои коэффициенты можно подгружать. Еще хочу попробовать отводы менять. Попозже.

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

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Кстати, если будете менять коэф-ты или пробовать эмулировать какой-то другой ЦФ, то достаточно заменить коэф-ты только для первой х2 ступени, т.к. она определяет импульсную хар-ку фильтра.
    Остальные каскады апсемплинга на АФЧХ практически не влияют. Поэтому у меня они для всех типов ЦФ одни и те же: максимально экономичные полуполосные интерполяторы.

    Ну и если входная ЧД выше 48..96кГц, то для первой ступени ЦФ может выбирать более короткий фильтр, т.к. длинный не успеет обсчитать. Но на таких ЧД тип фильтра и не особо важен, т.к. переходная полоса много выше звуковой.
    Если будете заливать коэф-ты через SPI интерфейс, то DF2 для первой ступени задействует всегда те коэффициенты, которые залиты. Поэтому производительность фильтра нужно учитывать самостоятельно и при высоких входных ЧД заливать соотв. более короткие фильтры.

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

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Понял. Твой ДФ1,2 еще и отличные примеры для изучения верилога.

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

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ


    Offтопик:
    Ну первый не особо, там я только начинал пробовать абстрактное описание.
    Второй уже более-менее. Но и там есть куда стремиться: пора переходить к объекто-ориентированному программированию с накоплением библиотек.
    Хотя для обучения наверное лучше пройти все стадии, начиная с графического редактора. Я когда-то так и начинал, рисуя вентилями в MAX+Plus II.

Страница 11 из 11 Первая ... 91011

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

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

Ваши права

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