Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Обработка сигнала от АЦП к ПЛИС
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Страницы: 1, 2
Skryppy
Здравствуйте. У меня проблема- не могу найти литературу,примеров как обработать сигнал с ацп, выход которого демультиплексирован, т.е. по одному каналу идут четные отсчеты,по другому каналу -нечетные. Нужно поочередно обработать каждый отсчет последовательно.
Проблема в том,что за 1 такт на вход приходят два отсчета,а их обработка последовательная занимает два такта sad.gif ,обработка в режиме реального времени.
Прочитал xapp1071_V6_ADC_DAC_LVDS.pdf от xilinx не смог толком разобраться,скачал пример к этому документу, что-то сильно навороченный он,пока разбираюсь.
Пробовал использовать две памяти типа single dual memory port :пока запись шла в первом канале(записывал сигнал одновременно с двух каналов,а воспроизводил поочередно) воспроизводил во втором канале,что-то правильно так и не заработало sad.gif .

Есть ли скакое-то устройство или стандартный алгоритм обработки такого демультиплексированного сигнала.
Methane
А какая частота?
Skryppy
частота демультиплексированного сигнала 200 МГц. Но меня интересует сам алгоритм обработки. Частоту можно взять любую,главное понять как упорядочить отсчеты.
Methane
Цитата(Skryppy @ Nov 20 2013, 19:52) *
частота демультиплексированного сигнала 200 МГц. Но меня интересует сам алгоритм обработки. Частоту можно взять любую,главное понять как упорядочить отсчеты.

А что значит "обработать"?
Skryppy
просто упорядоченно подать на цифровой фильтр,бпф и т.д.
Opex
Через FIFO с разной шириной записи/чтения.
Methane
Цитата(Opex @ Nov 21 2013, 05:30) *
Через FIFO с разной шириной записи/чтения.

Сложновато сделать обработку на частоте 400MHz.
Opex

Цитата(Methane @ Nov 21 2013, 09:38) *
Сложновато сделать обработку на частоте 400MHz.


Цитата(Skryppy @ Nov 20 2013, 23:52) *
частота демультиплексированного сигнала 200 МГц. Но меня интересует сам алгоритм обработки. Частоту можно взять любую,главное понять как упорядочить отсчеты.



А если поток непрерывный и обработка с обратной связью, другого и не остается.
soldat_shveyk
Демультиплексированный выход АЦП у= полифазный сигнал.
Входную часть дальнейшей обработки надо переделать, чтобы она тоже имела полифазный вход.
Например КИХ-фильтр очень просто реализуется в полифазной форме, умножение на комплексную экспоненту может быть реализовано в полифазной форме.
Не хочу посылать Вас к изучению любого учебника по ЦОС, но взять разностное уравнение простейшего КИХ фильтра из 4-х коэффициентов и
на листе бумаги расписать его в полифазной форме - элементарная задача, которую можно решить руководствуясь просто здравым смылсом.


Methane
Цитата(Opex @ Nov 21 2013, 06:11) *
А если поток непрерывный и обработка с обратной связью, другого и не остается.

Может быть какой-то кусочно-непрерывный. Тогда можно распараллелить.
Bad0512
Цитата(Skryppy @ Nov 21 2013, 00:41) *
Здравствуйте. У меня проблема- не могу найти литературу,примеров как обработать сигнал с ацп, выход которого демультиплексирован, т.е. по одному каналу идут четные отсчеты,по другому каналу -нечетные. Нужно поочередно обработать каждый отсчет последовательно.
Проблема в том,что за 1 такт на вход приходят два отсчета,а их обработка последовательная занимает два такта sad.gif ,обработка в режиме реального времени.
Прочитал xapp1071_V6_ADC_DAC_LVDS.pdf от xilinx не смог толком разобраться,скачал пример к этому документу, что-то сильно навороченный он,пока разбираюсь.
Пробовал использовать две памяти типа single dual memory port :пока запись шла в первом канале(записывал сигнал одновременно с двух каналов,а воспроизводил поочередно) воспроизводил во втором канале,что-то правильно так и не заработало sad.gif .

Есть ли скакое-то устройство или стандартный алгоритм обработки такого демультиплексированного сигнала.

Многое зависит от того, какой у вас кристалл. Если шустрый - то можно попытаться сделать обработку на 400Мгц, но это очень непростой путь. Жёсткая битва с таймингами на этом пути обеспечена, из бонусов можно отметить экономию ресурса. Но если вы раньше этого никогда не делали (обработку на 400 МГц), то лучше пойти стандартным путём - как вам тут уже советовали, сделать полифазную обработку. Из бонусов - гораздо легче вписаться во временные ограничения, из минусов - ресурса надо примерно в количество фаз больше. Если кристалл у вас слабенький (спартан какой-нибудь), то остаётся только второй путь.
_Anatoliy
Цитата(Opex @ Nov 21 2013, 06:11) *
А если поток непрерывный и обработка с обратной связью, другого и не остается.

Не вводите людей в заблуждение.Полифазная реализация позволяет в реал-тайме обрабатывать гигасемплэвые потоки на приемлемых тактовых частотах.
Maverick
Цитата(Opex @ Nov 21 2013, 06:11) *
А если поток непрерывный и обработка с обратной связью, другого и не остается.

добавлю свои 5 копеек
Полифазная обработка довольно неплохо описана:
Айфичер Э. Джервис Б. Цифровая обработка сигналов. Практический подход. 2-е издание
Skryppy
Спасибо,поищу информацию о полифазной обработке.
Methane
Цитата(_Anatoliy @ Nov 21 2013, 09:06) *
Не вводите людей в заблуждение.Полифазная реализация позволяет в реал-тайме обрабатывать гигасемплэвые потоки на приемлемых тактовых частотах.

И как сделать полифазный к примеру PID регулятор?
_Anatoliy
Цитата(Methane @ Nov 21 2013, 11:06) *
И как сделать полифазный к примеру PID регулятор?

Конкретно PID регулятор я не делал,но другую автоматику делать приходилось.А в чем Вы видите проблему?
Methane
Цитата(_Anatoliy @ Nov 21 2013, 11:43) *
Конкретно PID регулятор я не делал,но другую автоматику делать приходилось.А в чем Вы видите проблему?

В том, что Орех писал:
Цитата
А если поток непрерывный и обработка с обратной связью, другого и не остается.

Тоесть FIR так можно сделать. IIR уже нет.
_Anatoliy
Цитата(Methane @ Nov 21 2013, 11:56) *
В том, что Орех писал:

Тоесть FIR так можно сделать. IIR уже нет.

Вся эта автоматика (с обратными связями,конечно) выполнена на тактовой Fadc / 4.
Тыц
Methane
Цитата(_Anatoliy @ Nov 21 2013, 12:04) *
Вся эта автоматика (с обратными связями,конечно) выполнена на тактовой Fadc / 4.
Тыц

Еще раз. Если алгоритм подразумевает обратную связь в пределах одного такта - как пример PID регулятор, то он не может быть выполнен на меньшей частоте. Можно взять другой алгоритм, который будет делать что-то похожее.
_Anatoliy
Цитата(Methane @ Nov 21 2013, 12:12) *
Еще раз. Если алгоритм подразумевает обратную связь в пределах одного такта - как пример PID регулятор, то он не может быть выполнен на меньшей частоте. Можно взять другой алгоритм, который будет делать что-то похожее.

Не совсем понял,но - уменьшение тактовой частоты совсем не означает увеличение задержек.Ведь за один такт обрабатывается не один отсчёт,а сразу четыре.Или мы о разном?
ViKo
Цитата(_Anatoliy @ Nov 21 2013, 13:21) *
Ведь за один такт обрабатывается не один отсчёт,а сразу четыре.

И результат такой обработки выдается раз в такт, на каждые 4 отсчета... А не по каждому отсчету.
Или выдается 4 результата параллельно?
_Anatoliy
Цитата(ViKo @ Nov 21 2013, 12:52) *
И результат такой обработки выдается раз в такт, на каждые 4 отсчета... А не по каждому отсчету.
Или выдается 4 результата параллельно?

Конечно,выдаётся 4 результата параллельно.Но вот частота обновления этой четвёрки будет соответственно в 4 раза ниже.В некоторых случаях это может быть критично,согласен.
Skryppy
Цитата
Демультиплексированный выход АЦП у= полифазный сигнал.
Входную часть дальнейшей обработки надо переделать, чтобы она тоже имела полифазный вход.
Например КИХ-фильтр очень просто реализуется в полифазной форме, умножение на комплексную экспоненту может быть реализовано в полифазной форме.
Не хочу посылать Вас к изучению любого учебника по ЦОС, но взять разностное уравнение простейшего КИХ фильтра из 4-х коэффициентов и
на листе бумаги расписать его в полифазной форме - элементарная задача, которую можно решить руководствуясь просто здравым смылсом.




Написал разностное уравнение для КИХ-фильтра с 4 коэффициентами:
y(0)=x(0)*h(0)
y(1)=x(1)*h(0)+x(0)*h(1)
y(2)=x(2)*h(0)+x(1)*h(1)+x(0)*h(2)
y(3)=x(3)*h(0)+x(2)*h(1)+x(1)*h(2)+x(0)*h(3)
y(4)=x(4)*h(0)+x(3)*h(1)+x(2)*h(2)+x(1)*h(3)
......
где y()-выходное значение фильтра
х()-входной отсчет ,пусть,например все время равен =1
h()-коэффициент фильтра (пусть будут равны 1,2,3,4,соответственно) ,тогда y(0)=1,y(1)=3,y(2)=6,y(3)=10,y(4)=10....

Я не разобрался как записать полученное выражение для ких-фильтра в полифазном виде.

в книге Айфичера_Джервиса (стр 665) приводится пример получения полифазного фильтра-интерполятора,судя по моему уравнению сгруппировать ничего нельзя.
Попробовал сгруппировать четные и нечетные коэффициенты фильтра ( h(0),h(2) и h(1),h(3))в два канала получаю неверный ответ.
_Anatoliy
Цитата(Methane @ Nov 21 2013, 11:56) *
Тоесть FIR так можно сделать. IIR уже нет.

Кстати насчёт IIR похоже спорный вопрос.Я не теоретик,поэтому собрал модельку для простейшего случая,см.рисунок.Полифазный вариант работает не хуже обычного.Это противоречит теории,как по вашему?
Opex
Цитата(_Anatoliy @ Nov 21 2013, 13:06) *
Не вводите людей в заблуждение.Полифазная реализация позволяет в реал-тайме обрабатывать гигасемплэвые потоки на приемлемых тактовых частотах.


В общем случае для БИХ-фильтра, то есть фильтра с обратной связью, полифазную форму не построить. Это ж здравый смысл подсказывает.
Для частных случаев можно, например, если для обратной связи используются отсчеты, начиная со второго, то фильтр можно разбить на 2,
если с 3-го, то на 3, и т.д.

Цитата(Skryppy @ Nov 21 2013, 19:25) *
Написал разностное уравнение для КИХ-фильтра с 4 коэффициентами:
y(0)=x(0)*h(0)
y(1)=x(1)*h(0)+x(0)*h(1)
y(2)=x(2)*h(0)+x(1)*h(1)+x(0)*h(2)
y(3)=x(3)*h(0)+x(2)*h(1)+x(1)*h(2)+x(0)*h(3)
y(4)=x(4)*h(0)+x(3)*h(1)+x(2)*h(2)+x(1)*h(3)
......
где y()-выходное значение фильтра
х()-входной отсчет ,пусть,например все время равен =1
h()-коэффициент фильтра (пусть будут равны 1,2,3,4,соответственно) ,тогда y(0)=1,y(1)=3,y(2)=6,y(3)=10,y(4)=10....

Я не разобрался как записать полученное выражение для ких-фильтра в полифазном виде.

в книге Айфичера_Джервиса (стр 665) приводится пример получения полифазного фильтра-интерполятора,судя по моему уравнению сгруппировать ничего нельзя.
Попробовал сгруппировать четные и нечетные коэффициенты фильтра ( h(0),h(2) и h(1),h(3))в два канала получаю неверный ответ.


Очевидно, в конечном счете так и будет выглядеть.
Если делим частоту в 2 раза, то и отсчеты входные четные и нечетные считаем отдельно. И складываем в нужном порядке.

f1(0)___x(0)*h(0)
f2(0)___x(1)*h(0)

f1(2)___x(2)*h(0)___x(0)*h(1)
f2(2)___x(3)*h(0)___x(1)*h(1)

f1(4)___x(4)*h(0)___x(2)*h(1)___x(0)*h(2)
f2(4)___x(5)*h(0)___x(3)*h(1)___x(1)*h(2)
Skryppy
спасибо,сейчас распишу на листочке sm.gif
_Anatoliy
Цитата(Skryppy @ Nov 21 2013, 17:09) *
спасибо,сейчас распишу на листочке sm.gif

Ещё один вариант для вашего случая и для FIR c 8 тапов.Coeff = [1:8].Разбиение коэффициентов написано под фильтрами.
Skryppy
Спасибо,завтра попробую разобраться в этой модели,а также в разностном уравнении.
Timmy
Цитата(Opex @ Nov 21 2013, 18:46) *
В общем случае для БИХ-фильтра, то есть фильтра с обратной связью, полифазную форму не построить. Это ж здравый смысл подсказывает.
Для частных случаев можно, например, если для обратной связи используются отсчеты, начиная со второго, то фильтр можно разбить на 2,
если с 3-го, то на 3, и т.д.

Полифазную форму можно построить для любого БИХ фильтра.
пусть yn = H(yi, xi), i in (0,n-1) (1)
а yn+1 = H(yi, xi), i in (1,n) (2)
поскольку H - линейная функция по yi, при подстановке yn из (1) в (2) получится также линейная функция H'(yi, xi,xn), i in (0, n-1). То есть yn не требуется в явном виде для вычисления yn+1.
Opex
Разве после такой подстановки мы не получи фильтр, работающий с частотой входного сигнала?

Нет, то есть фильтр, который требует в 2 раза больше времени на рассчет, и который, соответственно, в 2 раза можно разогнать?
Timmy
Цитата(Opex @ Nov 22 2013, 07:28) *
Разве после такой подстановки мы не получи фильтр, работающий с частотой входного сигнала?

Нет, то есть фильтр, который требует в 2 раза больше времени на рассчет, и который, соответственно, в 2 раза можно разогнать?

Передаточная функция цифрового фильтра связывается не с частотой, а с числом отсчётов. Сам по себе цифровой фильтр существует вне времени и пространстваsm.gif, так что я не понял вопроса.
Аналогичный фокус используется при расчёте CRC, которая формально определена, как рекурсивная, для каждого входного бита, что, однако, не мешает, сделав множественную подстановку, обработать за один такт сколько угодно входных бит.
Opex
Пожалуй, я не прав, поскольку сужу лишь с точки зрения аппаратной реализуемости. Вы нарисуйте, пожалуйста, схему такого фильтра.
_Anatoliy
Цитата(Opex @ Nov 22 2013, 06:27) *
Пожалуй, я не прав, поскольку сужу лишь с точки зрения аппаратной реализуемости. Вы нарисуйте, пожалуйста, схему такого фильтра.

Вот вам полифазная реализация простейшего БИХ-фильтра с одним отводом.Или вы считаете что с увеличением числа отводов картина изменится принципиально?
Opex
Да, все работает, как надо, только вот цепь из 2 умножителей, да 2 сумматоров используется на протяжении одного такта с уменьшенной вдвое частотой.
Если взять обычную реализацию этого фильтра, будет использоваться 1 умножитель, и 1 сумматор за один такт. Соответственно, и работать она будет вдвое
быстрее.
dm.pogrebnoy
Цитата(Opex @ Nov 22 2013, 11:43) *
Да, все работает, как надо, только вот цепь из 2 умножителей, да 2 сумматоров используется на протяжении одного такта с уменьшенной вдвое частотой.
Если взять обычную реализацию этого фильтра, будет использоваться 1 умножитель, и 1 сумматор за один такт. Соответственно, и работать она будет вдвое
быстрее.


Когда исходная тактовая частота гигагерцы, то это то, что нам и нужно - путем распараллеливания снизить частоту работы схемы обработки. Мы же к полифазной обработке не от хорошей жизни переходим.
_Anatoliy
Цитата(dm.pogrebnoy @ Nov 22 2013, 09:49) *
Когда исходная тактовая частота гигагерцы, то это то, что нам и нужно - путем распараллеливания снизить частоту работы схемы обработки. Мы же к полифазной обработке не от хорошей жизни переходим.

Угу,за это приходится расплачиваться ресурсами.
Opex
Снижение частоты ведь не самоцель, снижать ее приходится, если схема не успевает выполнить обработку.
Смысл то переделывать схему с Fmax = 1Ггц на 2 таких же схемы с Fmax = 500Мгц? Объем обработанных данных не изменится.
dm.pogrebnoy
Цитата(Opex @ Nov 22 2013, 11:59) *
Снижение частоты ведь не самоцель, снижать ее приходится, если схема не успевает выполнить обработку.
Смысл то переделывать схему с Fmax = 1Ггц на 2 таких же схемы с Fmax = 500Мгц? Объем обработанных данных не изменится.


Именно снижение частоты, в данном конкретном случае - самоцель. Без этого никакую обработку на ПЛИС произвести не получится. А ведь есть АЦП на 3 ГГц и более.
Opex
Цель - обработать данные с этого ацп. И с таким подходом хоть до герца можно снижать, все одно не успеть.
_Anatoliy
Цитата(dm.pogrebnoy @ Nov 22 2013, 10:15) *
Именно снижение частоты, в данном конкретном случае - самоцель. Без этого никакую обработку на ПЛИС произвести не получится. А ведь есть АЦП на 3 ГГц и более.

Добавлю - например фильтр КИХ с полифазностью 8 и работающий на тактовой частоте 400МГц полностью эквивалентен обычному фильтру работающему на тактовой 3200МГц в реал-тайме,на FPGA это реализовать невозможно.Да, это требует в 8 раз больше ресурсов,на это идём сознательно,т.к. другого решения просто нет.
Timmy
Цитата(Opex @ Nov 22 2013, 08:27) *
Пожалуй, я не прав, поскольку сужу лишь с точки зрения аппаратной реализуемости. Вы нарисуйте, пожалуйста, схему такого фильтра.

Вот пример в Математике, как выполненяется подстановка, видно, что она не приводит к усложнению формулы расчёта.
Записываем общую формулу для y(n,p,q) по википедииsm.gif.
Смотрим для y(10) четвёртого порядка.
Подставляем туда выражение для y(9) от предыдущих координат.
Получаем новое линейное выражение, не содержащее y(9).
Поскольку a и b - константы, сложность вычислений не растёт. Конечно, надо ещё параллельно y(10) вычислить и y(9), которая понадобится в следующем цикле.
Opex
Все сходится, спасибо. Не догадался заранее константы считать.
Skryppy
Цитата(_Anatoliy @ Nov 21 2013, 18:20) *
Ещё один вариант для вашего случая и для FIR c 8 тапов.Coeff = [1:8].Разбиение коэффициентов написано под фильтрами.



1) Сделал модель, на выходе получил только нечетные ответы.Если в одном блоке Upsample параметр Sample offset=1,тогда на выходе четные ответы.
Получается,что даже если я сделаю два таких фильтра,получу за 1 такт два ответа четный и нечетный.
Я так понимаю, что затем обработку нужно будет производить пары отсчетов за такт?

Нажмите для просмотра прикрепленного файла

2)Непонятно как получилась такая модель:из разностного уравнения двухнакального фильтра

f1(6)=x(6)*h(0)+x(4)*h(1)+x(2)*h(2)+x(0)*h(3)
f2(6)=x(7)*h(0)+x(5)*h(1)+x(3)*h(2)+x(1)*h(3)

получаем,что просто надо взять два исходных фильтра с коэффициентами 1,2,3,4 и подать на первый фильтр четную последовательность,
на второй фильтр нечетную. Непонятно как будет выглядеть полифазный фильтр.
_Anatoliy
Цитата(Skryppy @ Nov 22 2013, 15:58) *

Какая у вас версия симулинка?Кину свою модель,у меня работает.
Skryppy
у меня матлаб 2013,так что поймет. Я хотел свою модель прикрепить,но на сайте прав нет sm.gif. Вот заархивировал,вроде получилось прикрепить
_Anatoliy
Цитата(Skryppy @ Nov 22 2013, 16:46) *
у меня матлаб 2013,так что поймет. Я хотел свою модель прикрепить,но на сайте прав нет sm.gif

Ясно. Да,после фильтра у вас будет две шины данных(odd/even).
Skryppy
Спасибо. В понедельник посмотрю Вашу модель,но главное,что я более менее разобрался как происходит обработка параллельных каналов sm.gif.
Skryppy
Просмотрел Вашу модель, пришел к выводу, что она немного неккоректна задачи,т.к. работает при подачи на вход всей последовательности(и четных и нечетных отсчетов). Ваша схема эквивалентна этой схеме:
Нажмите для просмотра прикрепленного файла

Я немного посидел,набросал схему,вроде работает - на выходе за 1 такт получаю два отсчета(четный и нечетный). Вот сама схема:
Нажмите для просмотра прикрепленного файла

Вот эти модели. Нажмите для просмотра прикрепленного файла

1)На выходе я так понимаю в моей модели будет такая же частота следования отсчетов как и на входе?
2)Эта схема полифазного фильтра?
_Anatoliy
Цитата(Skryppy @ Nov 25 2013, 18:17) *
Просмотрел Вашу модель, пришел к выводу, что она немного неккоректна задачи,т.к. работает при подачи на вход всей последовательности(и четных и нечетных отсчетов). Ваша схема эквивалентна этой схеме:

Нет,вы не правы.На входе стоит буфер,он и формирует из единой входной последовательности два потока odd/even, но на частоте Fadc/2(выделено цветом).

Цитата(Skryppy @ Nov 25 2013, 18:17) *
1)На выходе я так понимаю в моей модели будет такая же частота следования отсчетов как и на входе?
2)Эта схема полифазного фильтра?

1) да,частота на входе фильтра и на выходе будет Fadc/2(два отсчёта на такт)
2)не понял


Если в моей модели выделить только сам фильтр то он будет выглядеть так:
_Anatoliy
Цитата(Skryppy @ Nov 25 2013, 18:17) *
Я немного посидел,набросал схему,вроде работает - на выходе за 1 такт получаю два отсчета(четный и нечетный). Вот сама схема:

Чтобы убедиться что эта схема не работает подайте на вход ПСП(или счётчик) и сравните с эталоном.В моей модели можно выбирать входное воздействие,рекомендую и вам так сделать.Кстати,это не единственное решение. Импульсную характеристику можно не дробить,поставить в каждый канал по оригинальному КИХ с коэффициентами [1:8],просто по определённому алгоритму перемешать данные на входах.Сам придумал,в литературе такого варианта не встречал.Но это только реализация,по сути то же самое.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.