|
Есть специалисты по FFT ?, про реализацию на fpga |
|
|
|
Oct 21 2004, 03:48
|
Знающий
   
Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905

|
В большинстве книг по БПФ рекомендуется не заморачиваться, а брать готовое. Вот только с готовым бывают проблемы. Делаю convolution processor на stratix. Можно использовать готовое ядро от altera (пока так и делаю), но помимо того, что оно стоит денег, оно еще и не очень оптимальное для моей задачи, так как целочисленное. При анализе спектра это нормально, но при свертке между прямым и обратным преобразованиями делается умножение, которое приводит либо к округлениям, либо к увеличению разрядности обратного преобразования. Хочется сделать FFT/iFFT, который бы работал с плавающей запятой, но не в формате 1 знак, 23 мантисса, 8 порядок (такое для stratix существует в продаже), а 6 - 9 бит мантисса, а порядок 7 или 8 бит. Пока не понимаю, можно ли организовать память так, что бы параллельно работали 8 или 16 бабочек, но памяти при этом использовалось меньше, чем в два раза больше блока.
PS: Заранее извиняюсь, если off-topic, подозрение вызвано противоречием между темами сообщений и названием раздела.
|
|
|
|
|
Oct 21 2004, 18:50
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 2-10-04
Из: Мухосранска
Пользователь №: 763

|
1.А как это ты себе представляешь работу 8 или 16 бабочек одновременно?Интересен вопрос организации памяти. 2.И с каким основанием бабочки? 3.Сколько точек обрабатывать собираешься? 4.Данные комплексные или как? Я когда-то заморачивался целочисенным фурье на 1024 точки.И пришёл к выводу(а как оказалось,что до меня до этого додумалисьуже подавно  ) что оптимальным является вычисление с помощью бабочки по основанию 4.Т.к. памяти используется столько же что и по основанию 2, а считает в 2 раза быстрей.
|
|
|
|
|
Oct 21 2004, 22:13
|
Частый гость
 
Группа: Свой
Сообщений: 113
Регистрация: 21-10-04
Пользователь №: 952

|
А почему convolution именно через Фурье, а не какое ТЧП/Хаара? Спектр тоже нужен?
В примерах (там их, правда, всего 4) к Catapult C идет БПФ в плавучке - с нормального C-кода синтезится нормальное железо (RTL VHDL), знай только выбирай, какой цикл развернуть и какой портовости и ширины память где поставить, чтобы нужную прокачку получить. Тип данных, конечно, явно задать надо - сколько в мантиссе и т.д. Имхо, самый перспективный маршрут. Думать все равно надо - но с совершенно другой степенью свободы и охвата возможностей. Сам еще в начале пути...
|
|
|
|
|
Oct 23 2004, 12:43
|
Знающий
   
Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905

|
to Mad Makc: 1. Работа нескольких бабочек - это проблема. Памяти нужно примернов вдвое болье, чем для хранения блока. Рассматривается такой вариант: Памятей две, одна на входе, другая на выходе бабочек. Вход. На кажду бабочку столько банков памяти, какое основание. Банк хранит данные, которые должны поступить на этот вход этой бабочки на этом цикле. Выход. Скорее это сдвиговые регистры. Их количество равно количеству выходов всех бабочек. Регистры поочередно защелкивают все выходы всех бабочке, затем эти данные выдвигаются и поступают на в входную память так, чтобы к следующему проходу были подрядидущие данный для каждой бабочки. Это еще не алгоритм, а первая идея, пришедшая в голову, нужно 2. основание видимо, 4. 3. нужно делать два варианта: 2048 или 4096 4. комплексные to yornik: Свертка через Фурье потому что исходная программа, которую нужно повторить в железе, делает это через Фурье. Задача формулировалась именно через эту программу, это уже я догадался, что это свертка, но я совсем не математик, другие преобразования начал разглядывать. Пока только убедился, что Walsh/Hadamard для этого не годится  Спектр не нужен. Большое спасибо за наводку про Catapult C, посмотрю и на Хаара тоже.
|
|
|
|
|
Oct 28 2004, 21:16
|
Знающий
   
Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905

|
Задачи опять же две: 1) Обрабатывать поток, который удается прокачать через PCI-X. speed grade у меня 6-ой, altera говорит, что максимум 100MHz 64 бита, не исключено, что все потуги сделать 133 исправляя и оптимизируя PLDA-шное ядро PCI-X будут безуспешными. Требуется иметь в виду и 133MHz, так как может появиться задача все это собрать на другой плате, где будет стоит stratix со speed grade 5. Входные данные комплексные, 5 бит на составляющую, на выходе 16 битная амплитуда. На 100MHz получается теоретический предел 200MSample/sec.
2) Как можно быстрее. В DDR2 или в распределенную память загружаются данные, а фильтры генерируются, результат используется только для подсчета качества фильтра, то есть, никакая шина уже не держит.
|
|
|
|
|
Nov 4 2004, 20:34
|
Знающий
   
Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905

|
to yornik: В CataputC нет float point, есть числа с фиксированной запятой. Все float и double конвертируются в sc_fixed/sc_ufixed, вот у них можно задать количество бит на целую и дробну часть  Использовать float и double сильно не советуют, разве что для констант, иначе будут отличия в работе железа и кода, выполняемого на процессоре для тестирования алгоритма. Вещь впечатляющая!
|
|
|
|
|
Dec 14 2004, 15:29
|
Участник

Группа: Свой
Сообщений: 22
Регистрация: 15-10-04
Пользователь №: 885

|
Конечно упускаешь. Когда умножаешь 10 на 10 в итоге получаешь 20 разрядов, затем тебе опять приходится умножать только уже 20 на 20, получается - 40. Смекаешь, что произойдет, на пятом шаге при 1024 точках. А если на входе у нас 16 разрядов? Естественно что даже более слабый DSP с плавающей точкой в этом случае уделает своего даже более шустрого целочисленного собрата. Господин Shtirlits, если у вас получится, дайте знать, если не жалко будет поделится плодами труда. Спасибо.
|
|
|
|
|
Jan 12 2005, 14:19
|
Участник

Группа: Свой
Сообщений: 62
Регистрация: 11-01-05
Из: Беларусь, Минск
Пользователь №: 1 894

|
Цитата(new6666 @ Dec 14 2004, 18:29) Конечно упускаешь. Когда умножаешь 10 на 10 в итоге получаешь 20 разрядов, затем тебе опять приходится умножать только уже 20 на 20, получается - 40. Смекаешь, что произойдет, на пятом шаге при 1024 точках. А если на входе у нас 16 разрядов? Естественно что даже более слабый DSP с плавающей точкой в этом случае уделает своего даже более шустрого целочисленного собрата. Господин Shtirlits, если у вас получится, дайте знать, если не жалко будет поделится плодами труда. Спасибо. Немножечко не согласен. Конечно можно получить 20 разрядов после умножения 10-ти разрядных. Но зачем ??? Если вы помните, то поворачивающие множители для БПФ всегда меньше 1. Следовательно после умножения число будет меньше умножаемого. Необходимо сделать только округление после умножения. Т.е. если на входе 16 разрядов, то после первой бабочки (Radix-2) нам достаточно на 2 разряда больше (умножение и затем сложение комплексных чисел). А если идти еще дальше и рассматривать скажем 1024 точки, то можно заметить, что после каждой бабочки увеличивать разрядность необязательно.
|
|
|
|
|
Feb 20 2005, 15:04
|
Участник

Группа: Свой
Сообщений: 46
Регистрация: 7-08-04
Пользователь №: 464

|
>To Jools Сходи на www.opencores.org. Простоты, правда не обещаю - извиняй  .
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|