реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> hardware FFT-based FIR filter, Помогите новичку!!!
Noob
сообщение Jul 17 2013, 14:12
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 17-11-08
Пользователь №: 41 699



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

Заранее спасибо за помощь.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Jul 17 2013, 14:16
Сообщение #2


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



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

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

посмотрите FPGA технологии и поделки на их основе...
фирмы производители FPGA : xilinx, altera, lattice ...


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
Noob
сообщение Jul 17 2013, 15:19
Сообщение #3





Группа: Новичок
Сообщений: 7
Регистрация: 17-11-08
Пользователь №: 41 699



Да, эта здравая мысль уже посещала мою голову. Покопавшись в мануалах от мегафункции Alter-ы, я не нашел никаког упоминания про FFT-шные КИХ фильтры. Там судя по всему используется что-то иное. В матлабе я тоже нашел fdatool для проектирования КИХ фильтров. Там тоже только обычные фильтры генерируются в HDL. Вы считаете этого достаточно чтобы сделать вывод что фильтры через БПФ в железе не реализуются? Мне просто хотелось бы убедиться что это действительно так. А заодно и услышать компетентное мнение - почему.
Go to the top of the page
 
+Quote Post
des00
сообщение Jul 17 2013, 15:28
Сообщение #4


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Noob @ Jul 17 2013, 09:19) *
Вы считаете этого достаточно чтобы сделать вывод что фильтры через БПФ в железе не реализуются? Мне просто хотелось бы убедиться что это действительно так. А заодно и услышать компетентное мнение - почему.

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


--------------------
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Jul 17 2013, 15:58
Сообщение #5


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



QUOTE (des00 @ Jul 17 2013, 19:28) *
Рекомендую для начала почитать теорию FFT, затем теорию расчета линейной свертки через фурье и понять особенности данного вида фильтрации. Затем уже сделать вывод когда его рационально применять и почему.

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


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
andyp
сообщение Jul 17 2013, 20:53
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Цитата(Lmx2315 @ Jul 17 2013, 19:58) *
..а если в двух словах?

Если в двух словах, то FFT-IFFT фильтрация N отсчетов жрет (KlogN+M)N операций, а линеная свертка F*N (MAC - умножений + сложений). K,M - заависят от реализации, F - длина фильтра. Начиная с некоторого F > (KlogN + M) FFT фильтр становится выгоднее. Вам нужно понять что есть F,K,M в Вашем случае.
Go to the top of the page
 
+Quote Post
Noob
сообщение Jul 18 2013, 07:16
Сообщение #7





Группа: Новичок
Сообщений: 7
Регистрация: 17-11-08
Пользователь №: 41 699



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


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


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


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

Go to the top of the page
 
+Quote Post
andyp
сообщение Jul 18 2013, 07:42
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



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

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

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

Сообщение отредактировал andyp - Jul 18 2013, 08:05
Go to the top of the page
 
+Quote Post
Noob
сообщение Jul 18 2013, 08:41
Сообщение #9





Группа: Новичок
Сообщений: 7
Регистрация: 17-11-08
Пользователь №: 41 699



Спасибо за ответ. Да, действительно, разговор абстрактный, ибо стоят чисто исследовательские задачи. Но в любом случае хочется грубо структурировать различные подходы по их применимости, чисто для понимания. Из ваших слов я сделал вывод следующий: если нам нужно сделать свертку последовательно - то при большом порядке фильтра действительно эффективно делать через БПФ. Если используется полностью параллельные медоты - эфективность не так очевидна и зависит от внешних факторов (связанных с реализационными аспектами в FPGA, наличием эффективных движков и т п).
Go to the top of the page
 
+Quote Post
andyp
сообщение Jul 18 2013, 09:06
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



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


Go to the top of the page
 
+Quote Post
анатолий
сообщение Jul 20 2013, 20:13
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 221
Регистрация: 10-12-05
Из: Украина
Пользователь №: 12 052



Вот конкретный аппаратный фильтр на FFT с описанием:
http://opencores.org/project,fft_fir_filter
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Jul 23 2013, 11:03
Сообщение #12


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(анатолий @ Jul 20 2013, 22:13) *
Вот конкретный аппаратный фильтр на FFT с описанием:
http://opencores.org/project,fft_fir_filter

Анатолий,посмотрите личку.
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Jul 26 2013, 09:28
Сообщение #13


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Анатолий не отвечает,спрошу у all.
Приглянулся мне метод который применяет Анатолий,написал скрипт для матлаба,а что-то он работает не так.
Может кто глянет опытным глазом.
Эскизы прикрепленных изображений
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  firfft.rar ( 531 байт ) Кол-во скачиваний: 15
 
Go to the top of the page
 
+Quote Post
petrov
сообщение Jul 26 2013, 10:24
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937



Вот казалось бы, известно правильное решение - быстрая свёртка, во всех классических книжках по ЦОС расписанная, но приглядывается почему-то всё время посредственная эвристика.
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Jul 26 2013, 11:59
Сообщение #15


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(petrov @ Jul 26 2013, 11:24) *
Вот казалось бы, известно правильное решение - быстрая свёртка, во всех классических книжках по ЦОС расписанная, но приглядывается почему-то всё время посредственная эвристика.

Так эта штука позволяет неслабо память сэкономить по сравнению с классическим решением.Немаловажный фактор.Если,конечно,нормально заработает.
Go to the top of the page
 
+Quote Post
thermit
сообщение Jul 26 2013, 14:27
Сообщение #16


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Есть только 2 способа секционирования апериодической свертки:
Перекрытие с накоплением и перекрытие с суммированием. Все остальное - лженаука.
Код
clear all;
N=1024;

h=randn(1,N);

x=randn(1,100*N);


H=fft([h zeros(1,N)]);
%Перекрытие с накоплением
y1=[];
for i=1:N:length(x)-N
    X=fft(x(i:i+2*N-1));
    Y=H.*X;
    z=ifft(Y);
    y1=[y1 z(N+1:end)];
end;
%Перекрытие с суммированием
y2=[];
mem=zeros(1,N);
for i=1:N:length(x)-N
    X=fft([x(i:i+N-1) zeros(1,N)]);
    Y=H.*X;
    z=ifft(Y);
    
    y2=[y2 z(1:N)+mem];
    mem=z(N+1:end);
end;

%образец
yy=conv(h,x);
yy=yy(N+1:end);
y2=y2(N+1:end);

grid on;
plot(yy);
hold on;
plot(y1,'r');
plot(y2,'g');
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Jul 26 2013, 14:42
Сообщение #17


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(thermit @ Jul 26 2013, 16:27) *

Спасибо!
Да,overlap-add/overlap-save я моделировал,прекрасно работают.
Подвёл тёзка.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th June 2025 - 08:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01516 секунд с 7
ELECTRONIX ©2004-2016