Noob 0 17 июля, 2013 Опубликовано 17 июля, 2013 · Жалоба Здравствуйте! Я в этих вопросах далеко не специалист и мне требуется помощь. Вопрос у меня следующий - делают ли КИХ фильтры через БПФ что называется в hardware. Я имею ввиду полноценно конвейерный фильтр с прямым ффт, умножителем и обратным ффт. Я так понял что на микроконтроллерах и дсп процессорах - это актуально, а вот так, в хардваре делают? Или юзают tapped-delay line просто? Заранее спасибо за помощь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 17 июля, 2013 Опубликовано 17 июля, 2013 · Жалоба Здравствуйте! Я в этих вопросах далеко не специалист и мне требуется помощь. Вопрос у меня следующий - делают ли КИХ фильтры через БПФ что называется в hardware. Я имею ввиду полноценно конвейерный фильтр с прямым ффт, умножителем и обратным ффт. Я так понял что на микроконтроллерах и дсп процессорах - это актуально, а вот так, в хардваре делают? Или юзают tapped-delay line просто? Заранее спасибо за помощь. посмотрите FPGA технологии и поделки на их основе... фирмы производители FPGA : xilinx, altera, lattice ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Noob 0 17 июля, 2013 Опубликовано 17 июля, 2013 · Жалоба Да, эта здравая мысль уже посещала мою голову. Покопавшись в мануалах от мегафункции Alter-ы, я не нашел никаког упоминания про FFT-шные КИХ фильтры. Там судя по всему используется что-то иное. В матлабе я тоже нашел fdatool для проектирования КИХ фильтров. Там тоже только обычные фильтры генерируются в HDL. Вы считаете этого достаточно чтобы сделать вывод что фильтры через БПФ в железе не реализуются? Мне просто хотелось бы убедиться что это действительно так. А заодно и услышать компетентное мнение - почему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 17 июля, 2013 Опубликовано 17 июля, 2013 · Жалоба Вы считаете этого достаточно чтобы сделать вывод что фильтры через БПФ в железе не реализуются? Мне просто хотелось бы убедиться что это действительно так. А заодно и услышать компетентное мнение - почему. Рекомендую для начала почитать теорию FFT, затем теорию расчета линейной свертки через фурье и понять особенности данного вида фильтрации. Затем уже сделать вывод когда его рационально применять и почему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 17 июля, 2013 Опубликовано 17 июля, 2013 · Жалоба Рекомендую для начала почитать теорию FFT, затем теорию расчета линейной свертки через фурье и понять особенности данного вида фильтрации. Затем уже сделать вывод когда его рационально применять и почему. ..а если в двух словах? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andyp 9 17 июля, 2013 Опубликовано 17 июля, 2013 · Жалоба ..а если в двух словах? Если в двух словах, то FFT-IFFT фильтрация N отсчетов жрет (KlogN+M)N операций, а линеная свертка F*N (MAC - умножений + сложений). K,M - заависят от реализации, F - длина фильтра. Начиная с некоторого F > (KlogN + M) FFT фильтр становится выгоднее. Вам нужно понять что есть F,K,M в Вашем случае. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Noob 0 18 июля, 2013 Опубликовано 18 июля, 2013 · Жалоба Если в двух словах, то FFT-IFFT фильтрация N отсчетов жрет (KlogN+M)N операций, а линеная свертка F*N (MAC - умножений + сложений). K,M - заависят от реализации, F - длина фильтра. Начиная с некоторого F > (KlogN + M) FFT фильтр становится выгоднее. Вам нужно понять что есть F,K,M в Вашем случае. Да, это я понимаю и осознаю. Если делать программными методами - то вопросов тут никаких. Если делать на одном "АЛУ" и с переадресацией памяти - то тоже всё ясно. Операций становится меньше начиная с какого-то порядка фильтра. Но вопрос мой остается - если делать в "железе" конвейерными методами - разве эта логика с количеством операций работает? Вот например простая схема FIR фильтра Тут каждый такт будет выдаваться верное значение, схема конвейерная. А вот как я через FFT представляю: Тут нужно ждать пока вся последовательность загрузиться в первый БПФ, потом такт на умножение, потом еще столько же на обратный БПФ. Общая Latency большая по сравнению с стандартным методом, с тактовой частотой тоже не видно почему она может стать лучше. В таком разрезе совершенно непонятно зачем юзать ФФТ подход. Или я чего-то не понимаю? Буду рад любым мыслям по этому поводу) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andyp 9 18 июля, 2013 Опубликовано 18 июля, 2013 (изменено) · Жалоба С простым конвейерным фильтром не все так просто - его трудно заставить работать на высокой частоте при большом количестве коэффициентов - проблемы с clock distribution внутри FPGA. С FFT у Вас все тоже несколько упрощенно - посмотрите про методы overlap-add/overlap-save для реализации непрерывной свертки. Там окна FFT берутся с перекрытием. Но в общем Вы правы- для FFT придется иметь буфер на входе и выходе. В теории длина импульсной харакетристики фильтра не шибко короче длины блока FFT, поэтому проигрыш по задержке относительно невелик. FFT движки обычно оптимизируются производителями FPGA, поэтому всегда можно найти хороший компромисс между задержкой движка (в минимальном случае это log N) и количеством съеденных движком ресурсов кристалла. В результате может получиться дизайн, способный работать на большей тактовой частоте при той же длине фильтра, хотя с несколько большей latency. PS Все это абстрактный разговор - все завист от требуемой частоты, количества (и даже значений) коэффициентов и количества доступных ресурсов в FPGA. Например, если тактовая невелика и фильтр короткий, то можно обйтись одним MAC-юнитом, делая свертку последовательно на частоте F*Fin (F -длина фильтра). Приведенный Вами вариант полностью параллелен. Также, всегда есть что-то между этими крайностями. Изменено 18 июля, 2013 пользователем andyp Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Noob 0 18 июля, 2013 Опубликовано 18 июля, 2013 · Жалоба Спасибо за ответ. Да, действительно, разговор абстрактный, ибо стоят чисто исследовательские задачи. Но в любом случае хочется грубо структурировать различные подходы по их применимости, чисто для понимания. Из ваших слов я сделал вывод следующий: если нам нужно сделать свертку последовательно - то при большом порядке фильтра действительно эффективно делать через БПФ. Если используется полностью параллельные медоты - эфективность не так очевидна и зависит от внешних факторов (связанных с реализационными аспектами в FPGA, наличием эффективных движков и т п). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andyp 9 18 июля, 2013 Опубликовано 18 июля, 2013 · Жалоба Точно, общего рецепта нет. Нужно всегда по задаче смотреть. Всегда есть дилемма площадь-частота. Ну и latency. Часто на высоких частотах на latency можно забить - она не сильно влияет на задержку всей системы (например, делаете модем - так что там latency по сравнению с задержкой декодирования). Иногда задержка будет критична. Также влияет, есть ли на кристалле или под рукой дешевая память. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aser 0 20 июля, 2013 Опубликовано 20 июля, 2013 · Жалоба Вот конкретный аппаратный фильтр на FFT с описанием: http://opencores.org/project,fft_fir_filter Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 23 июля, 2013 Опубликовано 23 июля, 2013 · Жалоба Вот конкретный аппаратный фильтр на FFT с описанием: http://opencores.org/project,fft_fir_filter Анатолий,посмотрите личку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 26 июля, 2013 Опубликовано 26 июля, 2013 · Жалоба Анатолий не отвечает,спрошу у all. Приглянулся мне метод который применяет Анатолий,написал скрипт для матлаба,а что-то он работает не так. Может кто глянет опытным глазом. firfft.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 6 26 июля, 2013 Опубликовано 26 июля, 2013 · Жалоба Вот казалось бы, известно правильное решение - быстрая свёртка, во всех классических книжках по ЦОС расписанная, но приглядывается почему-то всё время посредственная эвристика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 26 июля, 2013 Опубликовано 26 июля, 2013 · Жалоба Вот казалось бы, известно правильное решение - быстрая свёртка, во всех классических книжках по ЦОС расписанная, но приглядывается почему-то всё время посредственная эвристика. Так эта штука позволяет неслабо память сэкономить по сравнению с классическим решением.Немаловажный фактор.Если,конечно,нормально заработает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться