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

Здравствуйте! Я в этих вопросах далеко не специалист и мне требуется помощь. Вопрос у меня следующий - делают ли КИХ фильтры через БПФ что называется в hardware. Я имею ввиду полноценно конвейерный фильтр с прямым ффт, умножителем и обратным ффт. Я так понял что на микроконтроллерах и дсп процессорах - это актуально, а вот так, в хардваре делают? Или юзают tapped-delay line просто?

 

Заранее спасибо за помощь.

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


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

Здравствуйте! Я в этих вопросах далеко не специалист и мне требуется помощь. Вопрос у меня следующий - делают ли КИХ фильтры через БПФ что называется в hardware. Я имею ввиду полноценно конвейерный фильтр с прямым ффт, умножителем и обратным ффт. Я так понял что на микроконтроллерах и дсп процессорах - это актуально, а вот так, в хардваре делают? Или юзают tapped-delay line просто?

 

Заранее спасибо за помощь.

посмотрите FPGA технологии и поделки на их основе...

фирмы производители FPGA : xilinx, altera, lattice ...

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


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

Да, эта здравая мысль уже посещала мою голову. Покопавшись в мануалах от мегафункции Alter-ы, я не нашел никаког упоминания про FFT-шные КИХ фильтры. Там судя по всему используется что-то иное. В матлабе я тоже нашел fdatool для проектирования КИХ фильтров. Там тоже только обычные фильтры генерируются в HDL. Вы считаете этого достаточно чтобы сделать вывод что фильтры через БПФ в железе не реализуются? Мне просто хотелось бы убедиться что это действительно так. А заодно и услышать компетентное мнение - почему.

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


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

Вы считаете этого достаточно чтобы сделать вывод что фильтры через БПФ в железе не реализуются? Мне просто хотелось бы убедиться что это действительно так. А заодно и услышать компетентное мнение - почему.

Рекомендую для начала почитать теорию FFT, затем теорию расчета линейной свертки через фурье и понять особенности данного вида фильтрации. Затем уже сделать вывод когда его рационально применять и почему.

 

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


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

Рекомендую для начала почитать теорию FFT, затем теорию расчета линейной свертки через фурье и понять особенности данного вида фильтрации. Затем уже сделать вывод когда его рационально применять и почему.

..а если в двух словах?

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


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

..а если в двух словах?

Если в двух словах, то FFT-IFFT фильтрация N отсчетов жрет (KlogN+M)N операций, а линеная свертка F*N (MAC - умножений + сложений). K,M - заависят от реализации, F - длина фильтра. Начиная с некоторого F > (KlogN + M) FFT фильтр становится выгоднее. Вам нужно понять что есть F,K,M в Вашем случае.

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


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

Если в двух словах, то FFT-IFFT фильтрация N отсчетов жрет (KlogN+M)N операций, а линеная свертка F*N (MAC - умножений + сложений). K,M - заависят от реализации, F - длина фильтра. Начиная с некоторого F > (KlogN + M) FFT фильтр становится выгоднее. Вам нужно понять что есть F,K,M в Вашем случае.

 

Да, это я понимаю и осознаю. Если делать программными методами - то вопросов тут никаких. Если делать на одном "АЛУ" и с переадресацией памяти - то тоже всё ясно. Операций становится меньше начиная с какого-то порядка фильтра.

Но вопрос мой остается - если делать в "железе" конвейерными методами - разве эта логика с количеством операций работает? Вот например простая схема FIR фильтра

300px-FIR_Filter.svg.png

 

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

post-41699-1374131448_thumb.jpg

 

Тут нужно ждать пока вся последовательность загрузиться в первый БПФ, потом такт на умножение, потом еще столько же на обратный БПФ. Общая Latency большая по сравнению с стандартным методом, с тактовой частотой тоже не видно почему она может стать лучше. В таком разрезе совершенно непонятно зачем юзать ФФТ подход. Или я чего-то не понимаю? Буду рад любым мыслям по этому поводу)

 

 

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


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

С простым конвейерным фильтром не все так просто - его трудно заставить работать на высокой частоте при большом количестве коэффициентов - проблемы с clock distribution внутри FPGA.

 

С FFT у Вас все тоже несколько упрощенно - посмотрите про методы overlap-add/overlap-save для реализации непрерывной свертки. Там окна FFT берутся с перекрытием. Но в общем Вы правы- для FFT придется иметь буфер на входе и выходе. В теории длина импульсной харакетристики фильтра не шибко короче длины блока FFT, поэтому проигрыш по задержке относительно невелик.

FFT движки обычно оптимизируются производителями FPGA, поэтому всегда можно найти хороший компромисс между задержкой движка (в минимальном случае это log N) и количеством съеденных движком ресурсов кристалла. В результате может получиться дизайн, способный работать на большей тактовой частоте при той же длине фильтра, хотя с несколько большей latency.

 

PS Все это абстрактный разговор - все завист от требуемой частоты, количества (и даже значений) коэффициентов и количества доступных ресурсов в FPGA. Например, если тактовая невелика и фильтр короткий, то можно обйтись одним MAC-юнитом, делая свертку последовательно на частоте F*Fin (F -длина фильтра). Приведенный Вами вариант полностью параллелен. Также, всегда есть что-то между этими крайностями.

Изменено пользователем andyp

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


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

Спасибо за ответ. Да, действительно, разговор абстрактный, ибо стоят чисто исследовательские задачи. Но в любом случае хочется грубо структурировать различные подходы по их применимости, чисто для понимания. Из ваших слов я сделал вывод следующий: если нам нужно сделать свертку последовательно - то при большом порядке фильтра действительно эффективно делать через БПФ. Если используется полностью параллельные медоты - эфективность не так очевидна и зависит от внешних факторов (связанных с реализационными аспектами в FPGA, наличием эффективных движков и т п).

 

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


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

Точно, общего рецепта нет. Нужно всегда по задаче смотреть. Всегда есть дилемма площадь-частота. Ну и latency. Часто на высоких частотах на latency можно забить - она не сильно влияет на задержку всей системы (например, делаете модем - так что там latency по сравнению с задержкой декодирования). Иногда задержка будет критична. Также влияет, есть ли на кристалле или под рукой дешевая память.

 

 

 

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


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

Вот конкретный аппаратный фильтр на FFT с описанием:

http://opencores.org/project,fft_fir_filter

Анатолий,посмотрите личку.

 

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


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

Анатолий не отвечает,спрошу у all.

Приглянулся мне метод который применяет Анатолий,написал скрипт для матлаба,а что-то он работает не так.

Может кто глянет опытным глазом.

post-18832-1374830665_thumb.png

firfft.rar

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


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

Вот казалось бы, известно правильное решение - быстрая свёртка, во всех классических книжках по ЦОС расписанная, но приглядывается почему-то всё время посредственная эвристика.

 

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


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

Вот казалось бы, известно правильное решение - быстрая свёртка, во всех классических книжках по ЦОС расписанная, но приглядывается почему-то всё время посредственная эвристика.

Так эта штука позволяет неслабо память сэкономить по сравнению с классическим решением.Немаловажный фактор.Если,конечно,нормально заработает.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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