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

Узкополосный КИХ ФНЧ на FPGA

Уважаемые знатоки! Я новичёк в реализации ЦОС на FPGA. В общем нужно сделать на FPGA ФНЧ с полосой пропускания 0,01 задерживания 0,02 с ослаблением >87Дб.

Но при расчете получается огромный порядок. Ума не приложу, как такое можно реализовать, по стандартной схеме? Может есть какие то более рациональные подходы?

 

Хотя возможно я иду не правильным путём.

В общем задача такая:

АЦП работатет со сверхдискретизацией на 50Мгц, полоса сигнала от 30Кгц до 1Мгц, внутри FPGA нужно перемножить sin/cos c DDS на входной сигнал(частота с DDS такая же как и сигнал, только фаза разная). В Фазе заключена полезная информация. Мой не большой опыт подсказывает что сигнал нужно отфильтровать, затем проредить до 2Мгц. После перемножения с DDS снова отфильтровать, убрав двойную частоту. Может быть "пнёте" в нужном направлении как такую задачу можно решить более безболезненно?

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


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

Уважаемые знатоки! Я новичёк в реализации ЦОС на FPGA. В общем нужно сделать на FPGA ФНЧ с полосой пропускания 0,01 задерживания 0,02 с ослаблением >87Дб.

Но при расчете получается огромный порядок. Ума не приложу, как такое можно реализовать, по стандартной схеме? Может есть какие то более рациональные подходы?

По стандартной никак.Можно конечно реализовать фильтр с параллельной структурой,но реализовывать больше 500 умножителей и хренову тучу сумматоров ни к чему :05:

Советую структуру на ячейке MAC Engine.Один умножитель,один аккумулятор,линия задержки и блочок управления.И будет Вам счастье.

Или просто сгенерите готовую корку в CoreGenerator.

mac_fir.bmp

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


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

По стандартной никак.Можно конечно реализовать фильтр с параллельной структурой,но реализовывать больше 500 умножителей и хренову тучу сумматоров ни к чему :05:

Советую структуру на ячейке MAC Engine.Один умножитель,один аккумулятор,линия задержки и блочок управления.И будет Вам счастье.

Или просто сгенерите готовую корку в CoreGenerator.

 

А есть ли более подробная информация по данному методу реализации? Мож книжкие какие подскажите? Не люблю я "корки", просто не знаю что там в них внутри генерится.

Кстати я слышал о CIC фильтрах, но немогу понять как производить нормировку данных в FPGA. Ведь при суммировании на множестве каскадов может быть переполнение, да и точность не хочется терять.

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


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

А есть ли более подробная информация по данному методу реализации? Мож книжкие какие подскажите? Не люблю я "корки", просто не знаю что там в них внутри генерится.

Кстати я слышал о CIC фильтрах, но немогу понять как производить нормировку данных в FPGA. Ведь при суммировании на множестве каскадов может быть переполнение, да и точность не хочется терять.

 

CIC-фильтр - правильное направление. При больших коэффициентах децимации, обычно вначале делают "грубую" фильрацию-децимацию на CIC, а потом на FIR с децимацией в 2-4 раза "подправляют". CIC хороши тем, что в них нет умножителей и их сложность от порядка децимации зависит слабо.

 

Информации по CIC полно в интернете. Например: http://users.snip.net/~donadio/cic.pdf (Ну и вообще: www.yahoo.com=>search: CIC-filter). Там есть и удобная струтура (Хогенаура) и как разрядность каскадов выбрать. Переполнения, кстати, в CIC-е постоянно происходят, но не мешают.

 

Еще у Xilinx в appnot-ах естьинформация по CIC (http://www.xilinx.com/ipcenter/catalog/logicore/docs/cic.pdf), а также по FIR и DDC. Посмотрите, на их сайте.

 

 

Еще можеть быть полезно посмотреть Digital Down Convertor-ы (DDC) - микросхемы, сделанные специально для Вашей задачи. У Analog Device: AD6620, AD6634, AD6635, и т.д. или у Texas Instrument GC4016, GC5016.

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


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

CIC-фильтр - правильное направление. При больших коэффициентах децимации, обычно вначале делают "грубую" фильрацию-децимацию на CIC, а потом на FIR с децимацией в 2-4 раза "подправляют". CIC хороши тем, что в них нет умножителей и их сложность от порядка децимации зависит слабо.

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

 

Информации по CIC полно в интернете. Например: http://users.snip.net/~donadio/cic.pdf (Ну и вообще: www.yahoo.com=>search: CIC-filter). Там есть и удобная струтура (Хогенаура) и как разрядность каскадов выбрать. Переполнения, кстати, в CIC-е постоянно происходят, но не мешают.

Смотрел, в общем мне идея понятна. Хочу правда с переполнениями разобраться, мож есть у кого оригинальная статья Хогенауэра про CIC? Здесь была ветка по CIC, но я пока не "свой" и скачать немогу с ФТП. Если не сложно, может ли кто нибудь ее здесь приаттачить? кажется называется она так: "An economical class of digital filters for decimation and interpolation.pdf"

 

 

Еще у Xilinx в appnot-ах естьинформация по CIC (http://www.xilinx.com/ipcenter/catalog/logicore/docs/cic.pdf), а также по FIR и DDC. Посмотрите, на их сайте.

Еще можеть быть полезно посмотреть Digital Down Convertor-ы (DDC) - микросхемы, сделанные специально для Вашей задачи. У Analog Device: AD6620, AD6634, AD6635, и т.д. или у Texas Instrument GC4016, GC5016.

У меня к сожалению не стандартная задача.

DDS выдаёт 3 сигнала sin(wt);cos(wt);sin(wt+p)

сигнал sin(wt+p) - выдаётся наружу через DAC, на исследуемый элемент на основе кварца. Он добавляет фазовый сдвиг, который зависит от механических воздействий на него. А фаза p - для компенсации фазовых потерь в аналоговых цепях. В итоге получается сигнал sin(wt+f)

задача сводится в выделении сигналов sin(f) и cos(f) в fixed point. которые потом уходят на ДСП. ДСП, в свою очередь подстраивает w на DDS, чтобы система находилась в резонансе. В общем это ФАПЧ в цифровом виде. Вообще говоря, может быть кто нибудь делал похожую задачу. Был бы очень признателен, если кто нибудь подскажет, правильно ли я все делаю, а то я тока начинаю разбираться в ЦОС, да и может быть выбрал не самый короткий путь.

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


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

Хочу правда с переполнениями разобраться, мож есть у кого оригинальная статья Хогенауэра про CIC?

Пользуйтесь наздоровье :beer:

An_economical_class_of_digital_filters_for_decimation_and_interpolation.pdf

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


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

Уважаемые знатоки! Я новичёк в реализации ЦОС на FPGA. В общем нужно сделать на FPGA ФНЧ с полосой пропускания 0,01 задерживания 0,02 с ослаблением >87Дб.

Но при расчете получается огромный порядок. Ума не приложу, как такое можно реализовать, по стандартной схеме? Может есть какие то более рациональные подходы?

Не подскажете, какой порядок получается для FIR'а? Дополнительно, какая форма АЧХ нужна и неравномерность?

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


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

Пользуйтесь наздоровье :beer:

Спасибо!

 

Не подскажете, какой порядок получается для FIR'а? Дополнительно, какая форма АЧХ нужна и неравномерность?

Синтезил в Матлабе - порядок 506, думаю для такой задачи главное линейная фаза в полосе пропускания. Ачх - как у обычного FIR, главное чтобы подавление на 2w частоте было не менее 87Дб, иначе смысла в сверхдискретизации нет. Что касается неравномерности, тут я пока оценить немогу.

 

Решил вот попробовать корки. Но не могу понять, поставил ISE.9.2, в папке где находятся все корки есть DDC и CIC, но немогу найти их в самой среде. Может кто подскажет, в чем может быть проблемма?

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


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

В продолжении о применении CIC фильтра возникает еще один вопрос. Полоса пропускания чистого CIC фильтра очень неравномерна и соответственно после него необходимо ставить корректирующий фильтр. Подскажите пожалуйста методику расчета этого корректирующего фильтра.

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


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

В общем задача такая:

АЦП работатет со сверхдискретизацией на 50Мгц, полоса сигнала от 30Кгц до 1Мгц, внутри FPGA нужно перемножить sin/cos c DDS на входной сигнал(частота с DDS такая же как и сигнал, только фаза разная). В Фазе заключена полезная информация. Мой не большой опыт подсказывает что сигнал нужно отфильтровать, затем проредить до 2Мгц. После перемножения с DDS снова отфильтровать, убрав двойную частоту. Может быть "пнёте" в нужном направлении как такую задачу можно решить более безболезненно?

Синтезил в Матлабе - порядок 506, думаю для такой задачи главное линейная фаза в полосе пропускания. Ачх - как у обычного FIR, главное чтобы подавление на 2w частоте было не менее 87Дб, иначе смысла в сверхдискретизации нет. Что касается неравномерности, тут я пока оценить немогу.

 

Если фильтр нужен симметричный, то никакого CIC для такого порядка не надо, для Virtex-4 или -5 все решается "в лоб" - 2 блока памяти и 3 DSP48 + немного логики.

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


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

В продолжении о применении CIC фильтра возникает еще один вопрос. Полоса пропускания чистого CIC фильтра очень неравномерна и соответственно после него необходимо ставить корректирующий фильтр. Подскажите пожалуйста методику расчета этого корректирующего фильтра.

По-моему в Mathlab просто выбирается Инверсный sinc фильтр,ну и параметры свой вбиваете.Получите набор коэффициентов для обычного FIR фильтра.И будет Вам счастье.

 

Решил вот попробовать корки. Но не могу понять, поставил ISE.9.2, в папке где находятся все корки есть DDC и CIC, но немогу найти их в самой среде. Может кто подскажет, в чем может быть проблемма?

Пользуйтесь поиском или посмотрите сдесь

http://electronix.ru/forum/index.php?showtopic=34205

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


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

А поточнее можно в матлабе место указать, где в качестве желаемой АЧХ можно задавать инверсный sinc, да и не просто sinc, а его некая степень?

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


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

Если фильтр нужен симметричный, то никакого CIC для такого порядка не надо, для Virtex-4 или -5 все решается "в лоб" - 2 блока памяти и 3 DSP48 + немного логики.

 

У меня спартан 3, поколение Virtex для меня дороговато. так что особо ресурсами похвастаться немогу.

А насчет того, нужна ли мне симметриная ИХ, скорее все равно, если только тут нет каких то скрытых камней.

 

У меня все же осталься вопрос по ISE.9.2. У когонибудь загружаются корки: CIC и DDC?

 

Пользуйтесь поиском или посмотрите сдесь

http://electronix.ru/forum/index.php?showtopic=34205

Там особо ничего нету, типа ставте полную версию - и все будет ок. Но у меня вроде полный ISE. В папке где корки лежат они есть, но из среды не запускаются.

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


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

Если фильтр нужен симметричный, то никакого CIC для такого порядка не надо, для Virtex-4 или -5 все решается "в лоб" - 2 блока памяти и 3 DSP48 + немного логики.

У меня спартан 3, поколение Virtex для меня дороговато. так что особо ресурсами похвастаться немогу.

А насчет того, нужна ли мне симметриная ИХ, скорее все равно, если только тут нет каких то скрытых камней.

Ставьте два FIR'а последовательно, и то меньше будут чем этот CIC. CIC выгодно использовать, когда коэффициент децимации нужен большой и полоса узкая (не Ваш случай). Коэффициент децимации для CIC придется брать наверное 10 и количество стадий >5, но скорей всего вообще использовать нельзя (слишком большое внеполосное подавление и полоса широкая). Посмотрите по даташиту, сколько ресурсов на это уйдет.

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

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


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

У меня спартан 3, поколение Virtex для меня дороговато. так что особо ресурсами похвастаться немогу.

А насчет того, нужна ли мне симметриная ИХ, скорее все равно, если только тут нет каких то скрытых камней.

Ставьте два FIR'а последовательно, и то меньше будут чем этот CIC. CIC выгодно использовать, когда коэффициент децимации нужен большой и полоса узкая (не Ваш случай). Коэффициент децимации для CIC придется брать наверное 10 и количество стадий >5, но скорей всего вообще использовать нельзя (слишком большое внеполосное подавление и полоса широкая). Посмотрите по даташиту, сколько ресурсов на это уйдет.

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

 

Если ставить 2 FIR последовательно где нужно ставить дециматор или его делать прямо внутри FIR'ов? И как их нужно правильно рассчитывать? Кстати ширина полосы - 200Гц - довольно узкая.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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