Перейти к содержанию
    

ацп+плис+цап

здравствуйте.

раньше не занимался фильтрацией на плис,поэтому столкнулся с проблемой при реализации полосового фильтра на xilinx.

реализую пф с полосой 100кгц на частоте 450кгц.

ацп и цап 10-разрядные.

в fdatool использую следующие настройки fixed point:

коэфф. использую 16-ти разрядные,

вход и выход 10-разрядные,а вот величина fraction length вызвала некоторые вопросы, я не могу понять исходя из чего она выбирается...

при синтезе нескольких вариантов я на выходе цап получаю или 0 вне зависимости от того что на входе ацп,или просто какую то генерацию импульсов не зависимо от входа(как предполагаю от переполнения...).

правильность работы с ацп и цап проверял соединив их в плис на прямую.

поэтому возникли два вопроса:

 

1.как правильно выбирать разрядность fixed point

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 Valentin-k

по поводу fixed point и fractional length:

вот тут неплохая наглядная картинка есть

Fixed-Point Arithmetic

А если словами то наверное так:

...Простейший пример арифметики с фиксированной запятой — перевод рублей в копейки. В таком случае, чтобы запомнить сумму 12 рублей 34 копейки, мы записываем в ячейку памяти число 1234...

Ну а если всё равно не понятно, тогда вам сюда:

Fixed-Point Arithmetic: An Introduction

 

или я вас не понял?

(если вопрос в том - сколько бит? - тогда нужно считать ошибку и смотреть при скольки дробных битах она начинает вас устраивать)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

при синтезе нескольких вариантов я на выходе цап получаю или 0 вне зависимости от того что на входе ацп,или просто какую то генерацию импульсов не зависимо от входа(как предполагаю от переполнения...).

правильность работы с ацп и цап проверял соединив их в плис на прямую.

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну плюс, даже если сигнал с АЦП вещественный, какая частота дискритезации АЦП, и согласован ли используемый фильтр с ней, может быть разумно децимацию сделать перед фильтрацией.

Есть ли антиалайзинговый фильтр в системе?

 

Ну и самое главное, проведена ли симуляция проекта, перед тем как что-то делать с железкой?

Если работаете с матлаб, то вообще замечательно.

Делаете исходный тестовый сигнал, прогоняете через RTL симуляцию, потом обратно в матлаб и сравниваете с референсной моделью.

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

для обеспечения приемлемого для вас качества фильтрации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

или я вас не понял?

(если вопрос в том - сколько бит? - тогда нужно считать ошибку и смотреть при скольки дробных битах она начинает вас устраивать)

 

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

но возможно причина в :

 

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

 

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

 

 

Ну плюс, даже если сигнал с АЦП вещественный, какая частота дискритезации АЦП, и согласован ли используемый фильтр с ней, может быть разумно децимацию сделать перед фильтрацией.

Есть ли антиалайзинговый фильтр в системе?

 

Ну и самое главное, проведена ли симуляция проекта, перед тем как что-то делать с железкой?

Если работаете с матлаб, то вообще замечательно.

Делаете исходный тестовый сигнал, прогоняете через RTL симуляцию, потом обратно в матлаб и сравниваете с референсной моделью.

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

для обеспечения приемлемого для вас качества фильтрации.

 

частота дискретизации взята 3 МГц. меня пока что интересует только одиночный фильтр, точнее его реализация в железке, чтобы сократить расстояние отделяющее от теории до практики в ПЛИС.

в Матлабе проигрывал - все устраивало, а вот RTL-симуляцию не пробовал. она подразумевает симуляцию в iSim? фильтра и типового сигнала?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Проверял фильтры так - подавал на вход аналоговые частоты в цифровом виде, благо в симуляторе есть тестовые генераторы для этого, создавал на них гребёнку частот и подавал на фильтр, смотрел как работает - по выходу фильтров получал набор отсчётов и в том же матлабе строил спектр.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо за советы, Active_hdl оказалась интересной средой, но проблему не решила...в принципе что в железе на осциллографе, что в симулинке, что в симуляции в ise все равно генерация...кстати fir compiler из logicore такой же результат дал...

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

 

 

 

Изменено пользователем Valentin-k

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо за советы, Active_hdl оказалась интересной средой, но проблему не решила...в принципе что в железе на осциллографе, что в симулинке, что в симуляции в ise все равно генерация...кстати fir compiler из logicore такой же результат дал...

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

Что-то подобное припоминаю с "уменьшением" амплитуды отфильтрованного сигнала.

Увеличьте количество бит под дробную часть коэффициентов фильтра.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что-то подобное припоминаю с "уменьшением" амплитуды отфильтрованного сигнала.

Увеличьте количество бит под дробную часть коэффициентов фильтра.

 

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

1.111111111111111

_._____1111111111 - получается я использую число такого вида (fix10_16), а не (fix10_9 скажем):

1.111111111______

Но если скажем симулинк в этом смысле особо не ограничивает, в fir compilere в параметрах ставится диапазон не больше чем заданное слово на входе, если 10 бит как у меня, то соответственно после точки максимум 10 бит...(хотя могу ошибаться, но кажись так)

 

а кстати русскоязычные статьи-описания по logicore есть?

Изменено пользователем Valentin-k

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

нашел косяк...я все изменения производил с размерностями входных и выходных слов, а размерности аккумулятора и пр не учитывал...симулинк показал хорошие графики...

но в плисине пока не заработало, хотя хоть и генерации нет, только простые тычки редкие

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...