Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Реализация полифазного интегратора
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
_Anatoliy
Коллеги,помогите найти решение.На картинке вверху изображён обычный интегратор,внизу - его полифазная реализация.Сразу бросается в глаза большое дерево сумматоров по входному сигналу.Как следствие на нужной частоте эта схема в FPGA не работает.Как правильно конвееризировать это дерево сумматоров не нарушая при этом логику работы схемы?Очень мешает обратная связь,она вносит рекурсию...Вообще в принципе это решаемо?
KalashKS
Цитата(_Anatoliy @ Oct 15 2014, 14:15) *
Коллеги,помогите найти решение.На картинке вверху изображён обычный интегратор,внизу - его полифазная реализация.Сразу бросается в глаза большое дерево сумматоров по входному сигналу.Как следствие на нужной частоте эта схема в FPGA не работает.Как правильно конвееризировать это дерево сумматоров не нарушая при этом логику работы схемы?Очень мешает обратная связь,она вносит рекурсию...Вообще в принципе это решаемо?

Можно попробовать поставить в каждую ветвь сначала сумматор последних 4-х отсчетов, а за ним простой интегратор.
Кнкн
Цитата(_Anatoliy @ Oct 15 2014, 13:15) *
Коллеги,помогите найти решение.На картинке вверху изображён обычный интегратор,внизу - его полифазная реализация.Сразу бросается в глаза большое дерево сумматоров по входному сигналу.Как следствие на нужной частоте эта схема в FPGA не работает.Как правильно конвееризировать это дерево сумматоров не нарушая при этом логику работы схемы?Очень мешает обратная связь,она вносит рекурсию...Вообще в принципе это решаемо?


Look-ahead transformation
Можно посмотреть в
Shoab Ahmed Khan "Digital Design of Signal Processing Systems_ A Practical Approach"
Skryppy
Я такую же задачу решал при реализации полифазного CIC фильтра. Вот тестовая схемка (без оконечного сумматора и интеграторов):
Нажмите для просмотра прикрепленного файла
Так как при рекурсии постоянно увеличивается разрядность сигнала после суммирования,то первый сумматор должен иметь настройку точности не Full, а заданную пользователем(например,30 бит).
В первой схеме так и сделано,но лучше будет если суммировать с полной точностью,а после сумматора, перед блоком округления поставить регистр,тогда временные характеристики будут намного лучше.
P.S.: не тестировал как эта реализация будет работать в схеме цифровой обработки.
Нажмите для просмотра прикрепленного файла
_Anatoliy
Цитата(KalashKS @ Oct 15 2014, 14:47) *
Можно попробовать поставить в каждую ветвь сначала сумматор последних 4-х отсчетов, а за ним простой интегратор.

Хочу извиниться за долгое молчание не по моей вине.На работе нет интернета,снаряд перебил оптическую магистраль.

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

Цитата(Кнкн @ Oct 15 2014, 14:50) *
Look-ahead transformation
Можно посмотреть в
Shoab Ahmed Khan "Digital Design of Signal Processing Systems_ A Practical Approach"

Спасибо,посмотрел.Но,по моему,они рассматривают частные случаи,не понял как нужно действовать для решения любой произвольной задачи(в общем виде).

Цитата(Skryppy @ Oct 15 2014, 19:00) *
Я такую же задачу решал при реализации полифазного CIC фильтра. Вот тестовая схемка (без оконечного сумматора и интеграторов):

Вот-вот,мне как раз и нужно сделать полифазный CIC-фильтр. Но по Вашей картинке видно что Вы применяли обычное дерево сумматоров.У меня тактовая частота высокая,этот метод не годится.
andyp
Цитата(_Anatoliy @ Oct 26 2014, 19:39) *
Вот-вот,мне как раз и нужно сделать полифазный CIC-фильтр. Но по Вашей картинке видно что Вы применяли обычное дерево сумматоров.У меня тактовая частота высокая,этот метод не годится.


Если факторы децимации Вашего CIC фильтра являются степенями 2, то эти статьи могут представлять для Вас интерес
_Anatoliy
Цитата(andyp @ Oct 26 2014, 20:09) *
Если факторы децимации Вашего CIC фильтра являются степенями 2, то эти статьи могут представлять для Вас интерес

Спасибо за информацию.
Вот такой получился у меня полифазный интегратор.А эти сумматоры уже конвейеризуются штатным способом.
KalashKS
Цитата(_Anatoliy @ Oct 27 2014, 12:45) *
Спасибо за информацию.
Вот такой получился у меня полифазный интегратор.А эти сумматоры уже конвейеризуются штатным способом.


Я имел в виду примерно то, что у вас в итоге получилось, только предлагал сначала задерживать и суммировать, а потом интегрировать.
_Anatoliy
Цитата(KalashKS @ Oct 27 2014, 19:28) *
Я имел в виду примерно то, что у вас в итоге получилось, только предлагал сначала задерживать и суммировать, а потом интегрировать.

А,ясно.Интеграл суммы эквивалентен сумме интегралов,схема линейная.Или в реализации будет какой выигрыш?
Timmy
Цитата(_Anatoliy @ Oct 15 2014, 13:15) *
Коллеги,помогите найти решение.На картинке вверху изображён обычный интегратор,внизу - его полифазная реализация.Сразу бросается в глаза большое дерево сумматоров по входному сигналу.Как следствие на нужной частоте эта схема в FPGA не работает.Как правильно конвееризировать это дерево сумматоров не нарушая при этом логику работы схемы?Очень мешает обратная связь,она вносит рекурсию...Вообще в принципе это решаемо?

По-моему в символьном виде описать преобразования описать гораздо проще. Исходные с добавленной задержкой на такт по всем входам:
outA = Z(Z(inA)+outD)
outB = Z(Z(inA)+Z(inB)+outD)
outC = Z(Z(inA)+Z(inB)+Z(inC)+outD)
outD = Z(Z(inA)+Z(inB)+Z(inC)+Z(inD)+outD)

И перегруппировать outC и outD, исходя из того, что Xilinx 6+ серии умеет складывать тройки в одной цепи переноса:
outC = Z(Z(inA+inB+inC)+outD)
outD = Z(Z(inA+inB+inC)+Z(inD)+outD)
Можно и по двойкам перегруппировать, но получится больше сумматоров и задержка ещё на такт, например, для outD:
outD = Z(Z(Z(inA+inB)+Z(inC+inD))+outD)
KalashKS
Цитата(_Anatoliy @ Oct 28 2014, 08:46) *
А,ясно.Интеграл суммы эквивалентен сумме интегралов,схема линейная.Или в реализации будет какой выигрыш?

Думаю, должен быть, т.к. большую часть схемы займут сумматоры. В моем случае разрядность сумматоров должна быть меньше, а разрядность интегратора всего на два бита больше.
_Anatoliy
Цитата(KalashKS @ Oct 29 2014, 13:07) *
Думаю, должен быть, т.к. большую часть схемы займут сумматоры. В моем случае разрядность сумматоров должна быть меньше, а разрядность интегратора всего на два бита больше.

Согласен beer.gif
_Anatoliy
Коллеги,тут пришлось реанимировать этот вопрос с небольшой модернизацией.


Теперь на верхнем рисунке нужно использовать не z^-1 , а z^-2 и на нижнем рисунке не четыре фазы а две. Что-то меня сильно смущает чётный показатель степени,не удаётся придумать нижнюю картинку. Сможет ли кто либо помочь?
_Anatoliy
Нашёл тут ещё немного математики,формулы понятны(правда в них есть ошибка), а как реализовать не ясно.
thermit
А что здесь не ясно? 2 параллельных фильтра и суммирование выхода 1-го с задержанным выходом второго.
_Anatoliy
Цитата(thermit @ Feb 17 2016, 15:24) *
А что здесь не ясно? 2 параллельных фильтра и суммирование выхода 1-го с задержанным выходом второго.

Хм,это работает только на основной частоте. По сути это полный аналог исходного варианта,только с двумя параллельными ветвями. Но вопрос то не в этом,нужно снизить в два раза тактовую частоту и за один такт обрабатывать сразу два входных отсчёта. С КИХ всё понятно,разделили на чётный и нечётный и вперёд. А здесь пока не выходит.
thermit
Четные отсчеты и нечетные фильтруются параллельно фильтрами с H(z) = 1 / (1 - a^2 * z^-1); Получаем y1(n), y2(n)

Четный выход формируется как y1(n)+a*y2(n-1)
Нечетные - y2(n)+a*y1(n)
_Anatoliy
Цитата(thermit @ Feb 17 2016, 17:24) *
Четные отсчеты и нечетные фильтруются параллельно фильтрами с H(z) = 1 / (1 - a^2 * z^-1); Получаем y1(n), y2(n)

Четный выход формируется как y1(n)+a*y2(n-1)
Нечетные - y2(n)+a*y1(n)

Спасибо за ответ! Пока взял а = 1. Да,для z^-1 по вашим формулам всё работает замечательно,но для z^-2 всё валится.
На картинке сверху реализация для z^-1
На картинке снизу реализация для z^-2
Может я чего не так сделал? Кстати,для нечётного канала никакая задержка на такт не нужна laughing.gif
thermit
Как-то так должно быть.

Цитата(_Anatoliy @ Feb 18 2016, 10:02) *
Спасибо за ответ! Пока взял а = 1. Да,для z^-1 по вашим формулам всё работает замечательно,но для z^-2 всё валится.
На картинке сверху реализация для z^-1
На картинке снизу реализация для z^-2
Может я чего не так сделал? Кстати,для нечётного канала никакая задержка на такт не нужна laughing.gif


При чем тут z^-2? Вы сами понижаете частоту дискретизации в 2 раза и z^-2 становится z^-1.
_Anatoliy
Цитата(thermit @ Feb 18 2016, 13:36) *
Как-то так должно быть.

Спасибо! Беру тайм-аут для переваривания.

Цитата(thermit @ Feb 18 2016, 13:36) *
При чем тут z^-2? Вы сами понижаете частоту дискретизации в 2 раза и z^-2 становится z^-1.


Очень боюсь что мы тут друг друга недопонимаем.А чем тогда становится z^-1? Ведь тот узел что я сделал прекрасно выполняет свою функцию.
Вот этот узел у Вас является эталонным для сравнения? Там стоит z^-1,а у меня в эталоне стоит z^-2.

Мне нужна полифазная реализация БИХ фильтра H(z) = 1 / (1 - a*z^-2) для двух фаз. Начать решил с z^-1.
И я уже сказал что для z^-1 по Вашим формулам всё прекрасно работает. А вот перейти к z^-2 не удаётся.
thermit
Цитата(_Anatoliy @ Feb 18 2016, 13:50) *
Спасибо! Беру тайм-аут для переваривания.
А чем тогда становится z^-1? Ведь тот узел что я сделал прекрасно выполняет свою функцию.
Вот этот узел у Вас является эталонным для сравнения? Там стоит z^-1,а у меня в эталоне стоит z^-2.



В ваших формулах показано, как организовать вычисления для рекурсивного фильтра 1-го порядка на половинной частоте дискретизации при помощи параллельной обработки рекурсивными фильтрами 1-го порядка пары отсчетов. Зачем в эталоне лепить z^-2 совершенно не понятно. Эталон ведь первого порядка.
_Anatoliy
Цитата(thermit @ Feb 18 2016, 13:58) *
В ваших формулах показано, как организовать вычисления для рекурсивного фильтра 1-го порядка на половинной частоте дискретизации при помощи параллельной обработки рекурсивными фильтрами 1-го порядка пары отсчетов. Зачем в эталоне лепить z^-2 совершенно не понятно. Эталон ведь первого порядка.

Ещё раз по полочкам.
Конечным результатом мне нужна полифазная реализация БИХ фильтра H(z) = 1 / (1 - a*z^-2) для двух фаз.
На первом этапе для начала я решил упростить задачу и реализовать БИХ фильтр H(z) = 1 / (1 - a*z^-1) и с помощью ваших рекомендаций мне это удалось.Для этой реализации в качестве эталона я брал БИХ фильтр H(z) = 1 / (1 - a*z^-1). Этот этап был промежуточным.
На втором этапе нужно сделать то же, но уже для фильтра H(z) = 1 / (1 - a*z^-2) и для этой реализации конечно нужен эталон с H(z) = 1 / (1 - a*z^-2).
thermit
Понятно. Проще некуда.
Четные и нечетные отсчеты фильтруются параллельно фильтрами H(z) = 1 / (1 - a*z^-1). Все.

Или распараллелить на 4 фазы

_Anatoliy
Цитата(thermit @ Feb 18 2016, 19:24) *
Понятно. Проще некуда.
Четные и нечетные отсчеты фильтруются параллельно фильтрами H(z) = 1 / (1 - a*z^-1). Все.

Или распараллелить на 4 фазы

Странно, но я же уже делал параллельно фильтры H(z) = 1 / (1 - a*z^-1), о чём сообщал выше и выход с этих фильтров сравнивался с эталонным фильтром работающем на основной частоте. Эталонный фильтр имел H(z) = 1 / (1 - a*z^-1) и все данные совпадали. Не может же эта самая схема выдавать отклик совпадающий и с эталонным фильтром H(z) = 1 / (1 - a*z^-2)???
thermit
Цитата(_Anatoliy @ Feb 18 2016, 19:33) *
Странно, но я же уже делал параллельно фильтры H(z) = 1 / (1 - a*z^-1), о чём сообщал выше и выход с этих фильтров сравнивался с эталонным фильтром работающем на основной частоте. Эталонный фильтр имел H(z) = 1 / (1 - a*z^-1) и все данные совпадали. Не может же эта самая схема выдавать отклик совпадающий и с эталонным фильтром H(z) = 1 / (1 - a*z^-2)???


Значит не совсем совпадали.
_Anatoliy
Цитата(thermit @ Feb 18 2016, 19:45) *
Значит не совсем совпадали.

o'k! Завтра вышлю модельку.
_Anatoliy
Вот моделька двухфазной реализации фильтра H(z) = 1 / (1 - a*z^-1) при а = 1. Похоже что совпадает со всем.
Огромное Вам спасибо за модель parallel_vs_serial_4ph! Буду анализировать. Не сможете ли поделиться своими выкладками(формулами) по синтезу этой схемы?
А для двух фаз вариант с z^-2 не реализуем?
_Anatoliy
Всё у меня получилось! Огромное Вам спасибо за потраченное время!
Вот вариант двухфазного фильтра для z^-2.
thermit
Тогда, резюме:

1.
Параллельное вычисление 2-х фаз





2.
Параллельное вычисление 2-х фаз


Параллельное вычисление 4-х фаз








_Anatoliy
Цитата(thermit @ Feb 19 2016, 14:36) *

Спасибо! Добавим в копилку. rolleyes.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.