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

 
 
 
Reply to this topicStart new topic
> БПФ большой последовательности отсчетов
ordWeist
сообщение Jun 22 2012, 14:37
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 17-09-11
Из: Одинцово, МО
Пользователь №: 67 227



Здравствуйте

Столкнулся с задачкой реализации алгоритма БПФ на плис, на вход которого подается последовательность, состоящая из более чем миллиона отсчетов сигнала (дискр100Мгц, 16 разрядов). Ознакомился с известными алгоритмами, но в большинстве требуется подавать всю последовательность сразу или почти сразу (например, с реализацией бабочки по основаниям 2,4). Найденные варианты как правило работают с последовательностями до 1000 отсчетов. Не хотелось бы накапливать всю последовательность во входном буфере, и делать БПФ сразу над 10^6 отсчетов. Прореживание по времени и частоте требует иметь весь массив в памяти, а мне хочется реализовать некий вариант алгоритма псевдо-реального времени.
Как я понимаю, главная проблема - корректно разбить последовательность на меньшие части, чтобы обработать их уже известным способом. Подскажите, правильно ли я понимаю задачу, и как именно лучше сделать разбиение и объединение после обработки в один спектр. На крайний случай - подскажите хорошую литературу.
Go to the top of the page
 
+Quote Post
dmitry-tomsk
сообщение Jun 24 2012, 18:15
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741



Вот тоже озадачился таким вопросом, только хочу решить его при помощи своего бпф блока с внешней ddr3. Может кто проверял, какой разрядности умножителей хватит для расчёта спектра такого длинного сигнала без существенных потерь динамического диапазона?
Go to the top of the page
 
+Quote Post
litv
сообщение Jun 25 2012, 06:23
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 6-10-04
Из: Воронеж
Пользователь №: 806



FFT real time длиной всего навсего 65536 дает 33 разряда на выходе динамического диапазона.(xilinx virtex-7 , 394 блока памяти, 31 умножитель 25х18). Можете прикинуть для миллиона. cranky.gif Куда столько динамического диапазона, это для астрономии? Может с моделирования начать??
В классике делается буфер на ПЛИС и затем fft на PC с плавающей запятой видимо с двойной точностью smile3046.gif .
Go to the top of the page
 
+Quote Post
dmitry-tomsk
сообщение Jun 25 2012, 10:26
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741



Цитата(litv @ Jun 25 2012, 09:23) *
FFT real time длиной всего навсего 65536 дает 33 разряда на выходе динамического диапазона.(xilinx virtex-7 , 394 блока памяти, 31 умножитель 25х18). Можете прикинуть для миллиона. cranky.gif Куда столько динамического диапазона, это для астрономии? Может с моделирования начать??
В классике делается буфер на ПЛИС и затем fft на PC с плавающей запятой видимо с двойной точностью smile3046.gif .

Да мне всего-то на полмиллиона надо. В рлс тоже бывает нужно большое время накопления, да ещё и многоканальность. А 394 блока памяти жирно будет и по цене и по тепловыделению, когда можно внешнюю ddr поставить.
Go to the top of the page
 
+Quote Post
_pv
сообщение Jun 25 2012, 13:41
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



так в спектре, наверное, не весь миллион отсчётов нужен, а такая длинная выборка просто для усреднения.
может проще будет обычное, небыстрое преобразование считать, только для нужных частот.
тогда можно и вообще без накопления данных обойтись и считать на лету
Go to the top of the page
 
+Quote Post
dmitry-tomsk
сообщение Jun 25 2012, 17:46
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741



Цитата(_pv @ Jun 25 2012, 16:41) *
так в спектре, наверное, не весь миллион отсчётов нужен, а такая длинная выборка просто для усреднения.
может проще будет обычное, небыстрое преобразование считать, только для нужных частот.
тогда можно и вообще без накопления данных обойтись и считать на лету

Весь спектр как раз и нужен для обнаружения, если цель вести, то одним фильтром следящим обойтись можно.
Go to the top of the page
 
+Quote Post
litv
сообщение Jun 26 2012, 03:56
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 6-10-04
Из: Воронеж
Пользователь №: 806



у локатора сигналы короткие по времени. Длинное бпф их не увидит. мы используем короткие fft реального времени для обнаружения.
Go to the top of the page
 
+Quote Post
dmitry-tomsk
сообщение Jun 26 2012, 09:18
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741



Цитата(litv @ Jun 26 2012, 07:56) *
у локатора сигналы короткие по времени. Длинное бпф их не увидит. мы используем короткие fft реального времени для обнаружения.

Ну это импульсный локатор, а у меня непрерывка.
Go to the top of the page
 
+Quote Post
TRILLER
сообщение Jun 26 2012, 14:20
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 180
Регистрация: 17-02-09
Из: Санкт-Петербург
Пользователь №: 45 001



Добрый день.
Как-то занимался данным вопросом(даже сделал собственное БПФ с плавающей точкой на 12 DSP Virtex4). У "хилых" по-моему также имеется бесплатная корка для БПФ с плавающей точкой(правда не заню про возможное число точек). Так вот собственные шумы округления данного ядра ниже 130 дБм, что значительно ниже шума квантования, который почти не зависит от числа точек. Можно брать и делать.
А вот насчёт вычисления "по частя" - ничего реально реализуемого(хотя, даже теоретического) найти не удалось. Берёте ДДР3 и постранично гоняете туда-сюда данные. Благо, скорости там с запасом. Даже реалтайм можно реализовать, так как у вас накопление миллиона точек будет(как я предполагаю) гораздо дольше вычисления БПФ. Т.е. пока по одной выборке вычисляется, другая записывается в ту же ДДР.
Других вариантов для решения "в лоб" Я не вижу - только изменение условий задачи.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Jun 26 2012, 17:08
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Цитата(TRILLER @ Jun 26 2012, 17:20) *
Добрый день.
Как-то занимался данным вопросом(даже сделал собственное БПФ с плавающей точкой на 12 DSP Virtex4). У "хилых" по-моему также имеется бесплатная корка для БПФ с плавающей точкой(правда не заню про возможное число точек). Так вот собственные шумы округления данного ядра ниже 130 дБм, что значительно ниже шума квантования, который почти не зависит от числа точек. Можно брать и делать.
А вот насчёт вычисления "по частя" - ничего реально реализуемого(хотя, даже теоретического) найти не удалось. Берёте ДДР3 и постранично гоняете туда-сюда данные. Благо, скорости там с запасом. Даже реалтайм можно реализовать, так как у вас накопление миллиона точек будет(как я предполагаю) гораздо дольше вычисления БПФ. Т.е. пока по одной выборке вычисляется, другая записывается в ту же ДДР.
Других вариантов для решения "в лоб" Я не вижу - только изменение условий задачи.


Ой поосторожнее с "реалтаймом". Для того чтобы для radix2 FFT посчитать надо (2+Log2(N) ) * 2N чтений/записи
что для 1M точек и 100/Ms 16Bit дает (2+20)*100M*2*4*2>35.8 GB/s требуемой полосы памяти и это при ограничении разрядности I/Q =32 bit 8-()
для radix4 (2+Log4(N) ) * 2N немного легче wink.gif >16 GB/s
И надо еще учесть что из за неравномерности чтения надо будет городить хитрый кэширующий контроллер памяти для эффективной работы DDR3.
Лучше уж тогда QDR SRAM использовать - два одновременных порта на запись и чтение как раз то что надо! 4-8 контроллеров с QDR2 и порядок

Думаю тут можно и нужно попробовать скомбинировать структуры fft где первую половину считать через внешнюю память а часть потоково внутри FPGA.
Но это будет тот еще монстр!

Успехов! Rob.



Go to the top of the page
 
+Quote Post
dmitry-tomsk
сообщение Jun 26 2012, 18:21
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741



Цитата(RobFPGA @ Jun 26 2012, 20:08) *
Приветствую!



Ой поосторожнее с "реалтаймом". Для того чтобы для radix2 FFT посчитать надо (2+Log2(N) ) * 2N чтений/записи
что для 1M точек и 100/Ms 16Bit дает (2+20)*100M*2*4*2>35.8 GB/s требуемой полосы памяти и это при ограничении разрядности I/Q =32 bit 8-()
для radix4 (2+Log4(N) ) * 2N немного легче wink.gif >16 GB/s
И надо еще учесть что из за неравномерности чтения надо будет городить хитрый кэширующий контроллер памяти для эффективной работы DDR3.
Лучше уж тогда QDR SRAM использовать - два одновременных порта на запись и чтение как раз то что надо! 4-8 контроллеров с QDR2 и порядок

Думаю тут можно и нужно попробовать скомбинировать структуры fft где первую половину считать через внешнюю память а часть потоково внутри FPGA.
Но это будет тот еще монстр!

Успехов! Rob.

Спасибо! У меня не больше мегагерца частота оцифровки после дециматоров, а то и меньше. Так что реал-тайм вполне можно. Только логикорный бпф внутри целочиселнную арифметику пользует, а результат для хранения переводит в плавающую. Хотя там ведь есть apu с любой шириной плавающих чисел, может на нём лучше?
Go to the top of the page
 
+Quote Post
TRILLER
сообщение Jun 26 2012, 18:32
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 180
Регистрация: 17-02-09
Из: Санкт-Петербург
Пользователь №: 45 001



Вы Rob всё верно подсчитали, только проблема не в потоке информации. DDR3 с 9-ми таймингами на частоте шины 469 МГц и при четвертьстраничной запись/чтение обеспечивает 46 Гбит/с суммарного потока.
Проблема в том, что стандартное ядро может работать только с внутренней памятью. Даже не так, стандартное ядро обеспечивает нужный ему порядок обращений к данным. А в этом случае от скорости ДДР ничего не останется rolleyes.gif А если всё же попытаться прилепить какой-нибудь свой контроллер, то, как вы верно сказали, это будет действительно нечто монстрообразное)
Как вариант, это сделать собственное ядро, которое отвечает заданному порядку обращения к данным. Правда это не очень быстро, зато надёжно)).

Цитата(dmitry-tomsk @ Jun 26 2012, 22:21) *
Спасибо! У меня не больше мегагерца частота оцифровки после дециматоров, а то и меньше. Так что реал-тайм вполне можно. Только логикорный бпф внутри целочиселнную арифметику пользует, а результат для хранения переводит в плавающую. Хотя там ведь есть apu с любой шириной плавающих чисел, может на нём лучше?

Что ж вы сразу не сказали, что там не напрямую с АЦП на 100МГц поток?
В таком случае ставите SRAM на несколько мегабайт, FFT с плавающей точкой, и горя не знаете))
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Jun 27 2012, 09:20
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Цитата(TRILLER @ Jun 26 2012, 21:32) *
Вы Rob всё верно подсчитали, только проблема не в потоке информации. DDR3 с 9-ми таймингами на частоте шины 469 МГц и при четвертьстраничной запись/чтение обеспечивает 46 Гбит/с суммарного потока.


46 Gbit/s / 8 ~=6 GByte/s всего-то sad.gif

Для меня ПРОБЛЕМЫ - это обычно физические ограничения в возможности реализации задуманного - а все остальное это просто производственные ТРУДНОСТИ sm.gif

Цитата
Проблема в том, что стандартное ядро может работать только с внутренней памятью. Даже не так, стандартное ядро обеспечивает нужный ему порядок обращений к данным. А в этом случае от скорости ДДР ничего не останется rolleyes.gif А если всё же попытаться прилепить какой-нибудь свой контроллер, то, как вы верно сказали, это будет действительно нечто монстрообразное)
Как вариант, это сделать собственное ядро, которое отвечает заданному порядку обращения к данным. Правда это не очень быстро, зато надёжно)).


В этом случае естественно нужно делать свое FFT Но для входного потока ~ 300 MByte/s это не должно вызывать ни каких проблем (только возможны трудности sm.gif ).

А для упрощения доступа к памяти оптимизировать порядок обработки для классического FFT или например посмотреть на структуру потокового fft R22 SDF там память организована как блоки кольцевых буферов поэтому доступ к ней всегда линеен. Плюс память для последних стадий (фактически с половины) можно будет делать в FPGA что уменьшает требования ко внешней.

Успехов! Rob.









Go to the top of the page
 
+Quote Post
eugen_pcad_ru
сообщение Jul 1 2012, 06:08
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 642
Регистрация: 15-11-07
Пользователь №: 32 353



В общем присоединяюсь к мнениям, озвученным выше. А может ст0ит дополнительно подсмотреть основы работы современных спектроанализаторов?.. Может буржуи дают какие-нибудь намеки?


--------------------
Правильно сформулированый вопрос содержит в себе половину ответа.
P.S.: Некоторые модераторы в качестве ответа так навязчиво предлагают посетить свой сайт, что иначе как саморекламу такие действия интерпретировать сложно.
Go to the top of the page
 
+Quote Post
khach
сообщение Jul 1 2012, 11:05
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Существую библиотеки UltraLong FFT - с интегрированным контроллером внешней памяти. Вот только они небесплатны очень. http://www.dilloneng.com/fft_ip
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:40
Рейтинг@Mail.ru


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