|
Узкополосный КИХ ФНЧ на FPGA, помогите новичку разобраться |
|
|
|
Oct 10 2007, 12:51
|

Местный
  
Группа: Свой
Сообщений: 340
Регистрация: 28-11-05
Из: Москва
Пользователь №: 11 469

|
Уважаемые знатоки! Я новичёк в реализации ЦОС на FPGA. В общем нужно сделать на FPGA ФНЧ с полосой пропускания 0,01 задерживания 0,02 с ослаблением >87Дб. Но при расчете получается огромный порядок. Ума не приложу, как такое можно реализовать, по стандартной схеме? Может есть какие то более рациональные подходы?
Хотя возможно я иду не правильным путём. В общем задача такая: АЦП работатет со сверхдискретизацией на 50Мгц, полоса сигнала от 30Кгц до 1Мгц, внутри FPGA нужно перемножить sin/cos c DDS на входной сигнал(частота с DDS такая же как и сигнал, только фаза разная). В Фазе заключена полезная информация. Мой не большой опыт подсказывает что сигнал нужно отфильтровать, затем проредить до 2Мгц. После перемножения с DDS снова отфильтровать, убрав двойную частоту. Может быть "пнёте" в нужном направлении как такую задачу можно решить более безболезненно?
|
|
|
|
|
Oct 10 2007, 13:47
|

Частый гость
 
Группа: Свой
Сообщений: 129
Регистрация: 28-11-06
Пользователь №: 22 854

|
Цитата(stoker @ Oct 10 2007, 16:51)  Уважаемые знатоки! Я новичёк в реализации ЦОС на FPGA. В общем нужно сделать на FPGA ФНЧ с полосой пропускания 0,01 задерживания 0,02 с ослаблением >87Дб. Но при расчете получается огромный порядок. Ума не приложу, как такое можно реализовать, по стандартной схеме? Может есть какие то более рациональные подходы? По стандартной никак.Можно конечно реализовать фильтр с параллельной структурой,но реализовывать больше 500 умножителей и хренову тучу сумматоров ни к чему Советую структуру на ячейке MAC Engine.Один умножитель,один аккумулятор,линия задержки и блочок управления.И будет Вам счастье. Или просто сгенерите готовую корку в CoreGenerator.
--------------------
Противник, вскрывающий ваши ошибки, гораздо полезнее, чем друг, скрывающий их. /Леонардо да Винчи/
|
|
|
|
|
Oct 10 2007, 14:26
|

Местный
  
Группа: Свой
Сообщений: 340
Регистрация: 28-11-05
Из: Москва
Пользователь №: 11 469

|
Цитата(YuP @ Oct 10 2007, 17:47)  По стандартной никак.Можно конечно реализовать фильтр с параллельной структурой,но реализовывать больше 500 умножителей и хренову тучу сумматоров ни к чему Советую структуру на ячейке MAC Engine.Один умножитель,один аккумулятор,линия задержки и блочок управления.И будет Вам счастье. Или просто сгенерите готовую корку в CoreGenerator. А есть ли более подробная информация по данному методу реализации? Мож книжкие какие подскажите? Не люблю я "корки", просто не знаю что там в них внутри генерится. Кстати я слышал о CIC фильтрах, но немогу понять как производить нормировку данных в FPGA. Ведь при суммировании на множестве каскадов может быть переполнение, да и точность не хочется терять.
|
|
|
|
|
Oct 10 2007, 21:20
|
Частый гость
 
Группа: Участник
Сообщений: 128
Регистрация: 7-06-06
Пользователь №: 17 825

|
Цитата(stoker @ Oct 10 2007, 18:26)  А есть ли более подробная информация по данному методу реализации? Мож книжкие какие подскажите? Не люблю я "корки", просто не знаю что там в них внутри генерится. Кстати я слышал о 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.
|
|
|
|
|
Oct 12 2007, 03:04
|

Местный
  
Группа: Свой
Сообщений: 340
Регистрация: 28-11-05
Из: Москва
Пользователь №: 11 469

|
Цитата(vladv @ Oct 11 2007, 01:20)  CIC-фильтр - правильное направление. При больших коэффициентах децимации, обычно вначале делают "грубую" фильрацию-децимацию на CIC, а потом на FIR с децимацией в 2-4 раза "подправляют". CIC хороши тем, что в них нет умножителей и их сложность от порядка децимации зависит слабо. Спасибо за толчок в нужном направлении, буду изучать CIC. Цитата(vladv @ Oct 11 2007, 01:20)  Информации по 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" Цитата(vladv @ Oct 11 2007, 01:20)  Еще у 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, чтобы система находилась в резонансе. В общем это ФАПЧ в цифровом виде. Вообще говоря, может быть кто нибудь делал похожую задачу. Был бы очень признателен, если кто нибудь подскажет, правильно ли я все делаю, а то я тока начинаю разбираться в ЦОС, да и может быть выбрал не самый короткий путь.
|
|
|
|
|
Oct 12 2007, 04:43
|

Частый гость
 
Группа: Свой
Сообщений: 129
Регистрация: 28-11-06
Пользователь №: 22 854

|
Цитата(stoker @ Oct 12 2007, 07:04)  Хочу правда с переполнениями разобраться, мож есть у кого оригинальная статья Хогенауэра про CIC? Пользуйтесь наздоровье
--------------------
Противник, вскрывающий ваши ошибки, гораздо полезнее, чем друг, скрывающий их. /Леонардо да Винчи/
|
|
|
|
|
Oct 12 2007, 17:27
|

Местный
  
Группа: Свой
Сообщений: 340
Регистрация: 28-11-05
Из: Москва
Пользователь №: 11 469

|
Цитата(YuP @ Oct 12 2007, 08:43)  Пользуйтесь наздоровье  Спасибо! Цитата(rloc @ Oct 12 2007, 14:02)  Не подскажете, какой порядок получается для FIR'а? Дополнительно, какая форма АЧХ нужна и неравномерность? Синтезил в Матлабе - порядок 506, думаю для такой задачи главное линейная фаза в полосе пропускания. Ачх - как у обычного FIR, главное чтобы подавление на 2w частоте было не менее 87Дб, иначе смысла в сверхдискретизации нет. Что касается неравномерности, тут я пока оценить немогу. Решил вот попробовать корки. Но не могу понять, поставил ISE.9.2, в папке где находятся все корки есть DDC и CIC, но немогу найти их в самой среде. Может кто подскажет, в чем может быть проблемма?
|
|
|
|
|
Oct 12 2007, 19:52
|
Узкополосный широкополосник
     
Группа: Свой
Сообщений: 2 316
Регистрация: 13-12-04
Из: Moscow
Пользователь №: 1 462

|
Цитата В общем задача такая: АЦП работатет со сверхдискретизацией на 50Мгц, полоса сигнала от 30Кгц до 1Мгц, внутри FPGA нужно перемножить sin/cos c DDS на входной сигнал(частота с DDS такая же как и сигнал, только фаза разная). В Фазе заключена полезная информация. Мой не большой опыт подсказывает что сигнал нужно отфильтровать, затем проредить до 2Мгц. После перемножения с DDS снова отфильтровать, убрав двойную частоту. Может быть "пнёте" в нужном направлении как такую задачу можно решить более безболезненно? Цитата(stoker @ Oct 12 2007, 21:27)  Синтезил в Матлабе - порядок 506, думаю для такой задачи главное линейная фаза в полосе пропускания. Ачх - как у обычного FIR, главное чтобы подавление на 2w частоте было не менее 87Дб, иначе смысла в сверхдискретизации нет. Что касается неравномерности, тут я пока оценить немогу. Если фильтр нужен симметричный, то никакого CIC для такого порядка не надо, для Virtex-4 или -5 все решается "в лоб" - 2 блока памяти и 3 DSP48 + немного логики.
|
|
|
|
|
Oct 13 2007, 07:47
|

Частый гость
 
Группа: Свой
Сообщений: 129
Регистрация: 28-11-06
Пользователь №: 22 854

|
Цитата(Leshii @ Oct 12 2007, 22:02)  В продолжении о применении CIC фильтра возникает еще один вопрос. Полоса пропускания чистого CIC фильтра очень неравномерна и соответственно после него необходимо ставить корректирующий фильтр. Подскажите пожалуйста методику расчета этого корректирующего фильтра. По-моему в Mathlab просто выбирается Инверсный sinc фильтр,ну и параметры свой вбиваете.Получите набор коэффициентов для обычного FIR фильтра.И будет Вам счастье. Цитата(stoker @ Oct 12 2007, 21:27)  Решил вот попробовать корки. Но не могу понять, поставил ISE.9.2, в папке где находятся все корки есть DDC и CIC, но немогу найти их в самой среде. Может кто подскажет, в чем может быть проблемма? Пользуйтесь поиском или посмотрите сдесь http://electronix.ru/forum/index.php?showtopic=34205
--------------------
Противник, вскрывающий ваши ошибки, гораздо полезнее, чем друг, скрывающий их. /Леонардо да Винчи/
|
|
|
|
|
Oct 13 2007, 11:04
|

Местный
  
Группа: Свой
Сообщений: 340
Регистрация: 28-11-05
Из: Москва
Пользователь №: 11 469

|
Цитата(rloc @ Oct 12 2007, 23:52)  Если фильтр нужен симметричный, то никакого CIC для такого порядка не надо, для Virtex-4 или -5 все решается "в лоб" - 2 блока памяти и 3 DSP48 + немного логики. У меня спартан 3, поколение Virtex для меня дороговато. так что особо ресурсами похвастаться немогу. А насчет того, нужна ли мне симметриная ИХ, скорее все равно, если только тут нет каких то скрытых камней. У меня все же осталься вопрос по ISE.9.2. У когонибудь загружаются корки: CIC и DDC? Цитата(YuP @ Oct 13 2007, 11:47)  Там особо ничего нету, типа ставте полную версию - и все будет ок. Но у меня вроде полный ISE. В папке где корки лежат они есть, но из среды не запускаются.
|
|
|
|
|
Oct 13 2007, 16:16
|
Узкополосный широкополосник
     
Группа: Свой
Сообщений: 2 316
Регистрация: 13-12-04
Из: Moscow
Пользователь №: 1 462

|
Цитата(stoker @ Oct 13 2007, 15:04)  Цитата Если фильтр нужен симметричный, то никакого CIC для такого порядка не надо, для Virtex-4 или -5 все решается "в лоб" - 2 блока памяти и 3 DSP48 + немного логики. У меня спартан 3, поколение Virtex для меня дороговато. так что особо ресурсами похвастаться немогу. А насчет того, нужна ли мне симметриная ИХ, скорее все равно, если только тут нет каких то скрытых камней. Ставьте два FIR'а последовательно, и то меньше будут чем этот CIC. CIC выгодно использовать, когда коэффициент децимации нужен большой и полоса узкая (не Ваш случай). Коэффициент децимации для CIC придется брать наверное 10 и количество стадий >5, но скорей всего вообще использовать нельзя (слишком большое внеполосное подавление и полоса широкая). Посмотрите по даташиту, сколько ресурсов на это уйдет. По поводу симметрии - в большинстве случаев используются симметричные фильтры и подводных камней не вижу.
|
|
|
|
|
Oct 15 2007, 08:20
|

Местный
  
Группа: Свой
Сообщений: 340
Регистрация: 28-11-05
Из: Москва
Пользователь №: 11 469

|
Цитата(rloc @ Oct 13 2007, 20:16)  У меня спартан 3, поколение Virtex для меня дороговато. так что особо ресурсами похвастаться немогу. А насчет того, нужна ли мне симметриная ИХ, скорее все равно, если только тут нет каких то скрытых камней. Ставьте два FIR'а последовательно, и то меньше будут чем этот CIC. CIC выгодно использовать, когда коэффициент децимации нужен большой и полоса узкая (не Ваш случай). Коэффициент децимации для CIC придется брать наверное 10 и количество стадий >5, но скорей всего вообще использовать нельзя (слишком большое внеполосное подавление и полоса широкая). Посмотрите по даташиту, сколько ресурсов на это уйдет. По поводу симметрии - в большинстве случаев используются симметричные фильтры и подводных камней не вижу. Если ставить 2 FIR последовательно где нужно ставить дециматор или его делать прямо внутри FIR'ов? И как их нужно правильно рассчитывать? Кстати ширина полосы - 200Гц - довольно узкая.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|