Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ацп+плис+цап
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Valentin-k
здравствуйте.
раньше не занимался фильтрацией на плис,поэтому столкнулся с проблемой при реализации полосового фильтра на xilinx.
реализую пф с полосой 100кгц на частоте 450кгц.
ацп и цап 10-разрядные.
в fdatool использую следующие настройки fixed point:
коэфф. использую 16-ти разрядные,
вход и выход 10-разрядные,а вот величина fraction length вызвала некоторые вопросы, я не могу понять исходя из чего она выбирается...
при синтезе нескольких вариантов я на выходе цап получаю или 0 вне зависимости от того что на входе ацп,или просто какую то генерацию импульсов не зависимо от входа(как предполагаю от переполнения...).
правильность работы с ацп и цап проверял соединив их в плис на прямую.
поэтому возникли два вопроса:

1.как правильно выбирать разрядность fixed point
2.данные ацп прежде чем подавать на фильтр надо преобразовывать?
Kuzmi4
2 Valentin-k
по поводу fixed point и fractional length:
вот тут неплохая наглядная картинка есть
Fixed-Point Arithmetic
А если словами то наверное так:
Цитата
...Простейший пример арифметики с фиксированной запятой — перевод рублей в копейки. В таком случае, чтобы запомнить сумму 12 рублей 34 копейки, мы записываем в ячейку памяти число 1234...

Ну а если всё равно не понятно, тогда вам сюда:
Fixed-Point Arithmetic: An Introduction

или я вас не понял?
(если вопрос в том - сколько бит? - тогда нужно считать ошибку и смотреть при скольки дробных битах она начинает вас устраивать)
bogaev_roman
Цитата(Valentin-k @ Jun 10 2014, 22:59) *
при синтезе нескольких вариантов я на выходе цап получаю или 0 вне зависимости от того что на входе ацп,или просто какую то генерацию импульсов не зависимо от входа(как предполагаю от переполнения...).
правильность работы с ацп и цап проверял соединив их в плис на прямую.

2.данные ацп прежде чем подавать на фильтр надо преобразовывать?

Что за ЦАП/АЦП ? У меня, например, после ацп в плис заходят многоразрядные p и n компоненты, где I и Q составляюшие одного канала идут попеременно, поэтому я ставлю DDR регистр, после них обычные и получаю многоразрядные I и Q компоненты. Если Вы просто взяли выход после дифференциального пина и подали на фильтр (а реально там несколько каналов или I и Q компоненты), то у Вас и будет мусор на выходе. Плюс еще этот мусор неправильно подается на вход ЦАП
Mad_max
Ну плюс, даже если сигнал с АЦП вещественный, какая частота дискритезации АЦП, и согласован ли используемый фильтр с ней, может быть разумно децимацию сделать перед фильтрацией.
Есть ли антиалайзинговый фильтр в системе?

Ну и самое главное, проведена ли симуляция проекта, перед тем как что-то делать с железкой?
Если работаете с матлаб, то вообще замечательно.
Делаете исходный тестовый сигнал, прогоняете через RTL симуляцию, потом обратно в матлаб и сравниваете с референсной моделью.
На симуляции вы решите большинство вопросов с тем, что на что влияет. Какой должен быть порядок фильтра, какая должна быть разрядность данных, аккумуляторов, коэффициентов
для обеспечения приемлемого для вас качества фильтрации.
Valentin-k
Цитата(Kuzmi4 @ Jun 10 2014, 22:12) *
или я вас не понял?
(если вопрос в том - сколько бит? - тогда нужно считать ошибку и смотреть при скольки дробных битах она начинает вас устраивать)


точнее именно определение кол-ва бит интересует, точнее методика.
но возможно причина в :

Цитата(bogaev_roman @ Jun 11 2014, 08:49) *
Что за ЦАП/АЦП ? У меня, например, после ацп в плис заходят многоразрядные p и n компоненты, где I и Q составляюшие одного канала идут попеременно, поэтому я ставлю DDR регистр, после них обычные и получаю многоразрядные I и Q компоненты. Если Вы просто взяли выход после дифференциального пина и подали на фильтр (а реально там несколько каналов или I и Q компоненты), то у Вас и будет мусор на выходе. Плюс еще этот мусор неправильно подается на вход ЦАП


я использую AD9201, у него выход параллельный 10-ти битный или я все же что-то не досмотрел в даташите?!


Цитата(Mad_max @ Jun 11 2014, 11:12) *
Ну плюс, даже если сигнал с АЦП вещественный, какая частота дискритезации АЦП, и согласован ли используемый фильтр с ней, может быть разумно децимацию сделать перед фильтрацией.
Есть ли антиалайзинговый фильтр в системе?

Ну и самое главное, проведена ли симуляция проекта, перед тем как что-то делать с железкой?
Если работаете с матлаб, то вообще замечательно.
Делаете исходный тестовый сигнал, прогоняете через RTL симуляцию, потом обратно в матлаб и сравниваете с референсной моделью.
На симуляции вы решите большинство вопросов с тем, что на что влияет. Какой должен быть порядок фильтра, какая должна быть разрядность данных, аккумуляторов, коэффициентов
для обеспечения приемлемого для вас качества фильтрации.


частота дискретизации взята 3 МГц. меня пока что интересует только одиночный фильтр, точнее его реализация в железке, чтобы сократить расстояние отделяющее от теории до практики в ПЛИС.
в Матлабе проигрывал - все устраивало, а вот RTL-симуляцию не пробовал. она подразумевает симуляцию в iSim? фильтра и типового сигнала?
Kuzmi4
2 Valentin-k
касательно вашего AD9201 - у него на выходе интегер, НО
Цитата
The AD9201 ADC outputs are interleaved onto a single output bus saving board space and digital pin count.

Это надо учитывать когда загребаете данные с него (ASYNCHRONOUS MULTIPLEXER и всё такое): Figure 1. ADC Timing

Ну а по симуляции RTL - я думаю вам лучше смотреть в сторону Modelsim. По сути то же что и в Matlab, но в другой среде. Можете начать с этого: ModelSim® Tutorial
Lmx2315
..когда я делал фильтрующую систему на ПЛИСе , то процесс выглядел так : синтез фильтров в МАТЛАБе , сборка схемы в Active-HDL и симуляция там, пока в симуляторе не увижу что хочу, в ПЛИС совать лишено смысла - потеря времени.

Проверял фильтры так - подавал на вход аналоговые частоты в цифровом виде, благо в симуляторе есть тестовые генераторы для этого, создавал на них гребёнку частот и подавал на фильтр, смотрел как работает - по выходу фильтров получал набор отсчётов и в том же матлабе строил спектр.
Valentin-k
спасибо за советы, Active_hdl оказалась интересной средой, но проблему не решила...в принципе что в железе на осциллографе, что в симулинке, что в симуляции в ise все равно генерация...кстати fir compiler из logicore такой же результат дал...
где то я туплю...но вот в fdatool получается что на выходе фильтра получается отфильтрованная частота только когда я ставлю параметр fraction length больше чем кол-во бит для входа и выхода (т.е. на вход и выход у меня 10 бит, а fraction length в районе 16...но сигнал очень низкоамплитудный, а вот fir compiler ограничивает диапазон аналогичного параметра значением входного слова, но в симулинке в данном диапазоне я не получаю полезного сигнала. кстати параметры fixed point мне наглядно объяснила табличка в даташите на fir compiler)


Mad_max
Цитата(Valentin-k @ Jun 23 2014, 18:43) *
спасибо за советы, Active_hdl оказалась интересной средой, но проблему не решила...в принципе что в железе на осциллографе, что в симулинке, что в симуляции в ise все равно генерация...кстати fir compiler из logicore такой же результат дал...
где то я туплю...но вот в fdatool получается что на выходе фильтра получается отфильтрованная частота только когда я ставлю параметр fraction length больше чем кол-во бит для входа и выхода (т.е. на вход и выход у меня 10 бит, а fraction length в районе 16...но сигнал очень низкоамплитудный, а вот fir compiler ограничивает диапазон аналогичного параметра значением входного слова, но в симулинке в данном диапазоне я не получаю полезного сигнала. кстати параметры fixed point мне наглядно объяснила табличка в даташите на fir compiler)

Что-то подобное припоминаю с "уменьшением" амплитуды отфильтрованного сигнала.
Увеличьте количество бит под дробную часть коэффициентов фильтра.
Valentin-k
Цитата(Mad_max @ Jun 23 2014, 18:31) *
Что-то подобное припоминаю с "уменьшением" амплитуды отфильтрованного сигнала.
Увеличьте количество бит под дробную часть коэффициентов фильтра.


а куда больше?у меня получается длина слова - 10 бит, а на дробную часть отведено уже 16 - и тогда появляется ослабленный полезный сигнал
1.111111111111111
_._____1111111111 - получается я использую число такого вида (fix10_16), а не (fix10_9 скажем):
1.111111111______
Но если скажем симулинк в этом смысле особо не ограничивает, в fir compilere в параметрах ставится диапазон не больше чем заданное слово на входе, если 10 бит как у меня, то соответственно после точки максимум 10 бит...(хотя могу ошибаться, но кажись так)

а кстати русскоязычные статьи-описания по logicore есть?
Valentin-k
нашел косяк...я все изменения производил с размерностями входных и выходных слов, а размерности аккумулятора и пр не учитывал...симулинк показал хорошие графики...
но в плисине пока не заработало, хотя хоть и генерации нет, только простые тычки редкие
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.