реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> ацп+плис+цап, проблема с фильтром,с fixed point
Valentin-k
сообщение Jun 10 2014, 14:49
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 27-01-12
Пользователь №: 69 923



здравствуйте.
раньше не занимался фильтрацией на плис,поэтому столкнулся с проблемой при реализации полосового фильтра на xilinx.
реализую пф с полосой 100кгц на частоте 450кгц.
ацп и цап 10-разрядные.
в fdatool использую следующие настройки fixed point:
коэфф. использую 16-ти разрядные,
вход и выход 10-разрядные,а вот величина fraction length вызвала некоторые вопросы, я не могу понять исходя из чего она выбирается...
при синтезе нескольких вариантов я на выходе цап получаю или 0 вне зависимости от того что на входе ацп,или просто какую то генерацию импульсов не зависимо от входа(как предполагаю от переполнения...).
правильность работы с ацп и цап проверял соединив их в плис на прямую.
поэтому возникли два вопроса:

1.как правильно выбирать разрядность fixed point
2.данные ацп прежде чем подавать на фильтр надо преобразовывать?
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jun 10 2014, 15:02
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



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

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

или я вас не понял?
(если вопрос в том - сколько бит? - тогда нужно считать ошибку и смотреть при скольки дробных битах она начинает вас устраивать)
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Jun 11 2014, 01:39
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



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

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

Что за ЦАП/АЦП ? У меня, например, после ацп в плис заходят многоразрядные p и n компоненты, где I и Q составляюшие одного канала идут попеременно, поэтому я ставлю DDR регистр, после них обычные и получаю многоразрядные I и Q компоненты. Если Вы просто взяли выход после дифференциального пина и подали на фильтр (а реально там несколько каналов или I и Q компоненты), то у Вас и будет мусор на выходе. Плюс еще этот мусор неправильно подается на вход ЦАП
Go to the top of the page
 
+Quote Post
Mad_max
сообщение Jun 11 2014, 04:02
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 377
Регистрация: 23-12-06
Из: Зеленоград
Пользователь №: 23 811



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

Ну и самое главное, проведена ли симуляция проекта, перед тем как что-то делать с железкой?
Если работаете с матлаб, то вообще замечательно.
Делаете исходный тестовый сигнал, прогоняете через RTL симуляцию, потом обратно в матлаб и сравниваете с референсной моделью.
На симуляции вы решите большинство вопросов с тем, что на что влияет. Какой должен быть порядок фильтра, какая должна быть разрядность данных, аккумуляторов, коэффициентов
для обеспечения приемлемого для вас качества фильтрации.
Go to the top of the page
 
+Quote Post
Valentin-k
сообщение Jun 11 2014, 09:23
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 27-01-12
Пользователь №: 69 923



Цитата(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? фильтра и типового сигнала?
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jun 12 2014, 03:21
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



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
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Jun 12 2014, 09:08
Сообщение #7


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



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

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


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
Valentin-k
сообщение Jun 23 2014, 14:43
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 27-01-12
Пользователь №: 69 923



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




Сообщение отредактировал Valentin-k - Jun 23 2014, 14:46
Go to the top of the page
 
+Quote Post
Mad_max
сообщение Jun 23 2014, 15:31
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 377
Регистрация: 23-12-06
Из: Зеленоград
Пользователь №: 23 811



Цитата(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)

Что-то подобное припоминаю с "уменьшением" амплитуды отфильтрованного сигнала.
Увеличьте количество бит под дробную часть коэффициентов фильтра.
Go to the top of the page
 
+Quote Post
Valentin-k
сообщение Jun 23 2014, 16:26
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 27-01-12
Пользователь №: 69 923



Цитата(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 - Jun 23 2014, 16:28
Go to the top of the page
 
+Quote Post
Valentin-k
сообщение Jun 24 2014, 14:39
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 27-01-12
Пользователь №: 69 923



нашел косяк...я все изменения производил с размерностями входных и выходных слов, а размерности аккумулятора и пр не учитывал...симулинк показал хорошие графики...
но в плисине пока не заработало, хотя хоть и генерации нет, только простые тычки редкие
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01458 секунд с 7
ELECTRONIX ©2004-2016