Sefo 0 28 октября, 2011 Опубликовано 28 октября, 2011 · Жалоба Возникла идея сделать в ПЛИСе не только само вычисление FFT, но и усреднение результата по нескольким прогонам. Используется стандартная корка от Xilinx, на выходе она выдает действительную и мнимую части отсчетов. Как правильнее подойти к задаче - усреднять по модулю или усреднять действительную и мнимую части, а потом уже брать модуль? К примеру, если у Вас на входе идеальный синус и частота оцифровки кратна частоте входного синуса, и каждый прогон Вы начинаете с одной и той же фазы входного синуса, то у Вас всегда будет одно и тоже значение мнимой и действительной части на выходе БПФ. В этом случае, Вам все равно как усреднять. Теперь рассмотрим тот же случай, но только прогон Вы начинаете со случайной фазы входного синуса. В этом случае, в каждом прогоне будут разные значения мнимой и действительной части на выходе БПФ, но модуль ( sqrt( im^2 + re^2) ) будет всегда одинаковый. Усредняя модуль Вы будете получать всегда одно и то же значение среднего модуля. Если Вы будете усреднять отдельно действительную и мнимую части, то при усреднении небольшого количества прогонов получите сильно заниженное значение модуля вычисляя его по отдельно усредненным re и im. При увеличении количества прогонов модуль, вычисленный по отдельно усредненным re и im будет неуклонно стремиться к 0. Так что на Ваш вопрос невозможно ответить без уточнения что из себя представляет входной сигнал, как происходит выборка отсчетов, как "организованы" прогоны и какую информацию о сигнале Вы хотите извлечь с помощью БПФ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
troiden 0 28 октября, 2011 Опубликовано 28 октября, 2011 · Жалоба Так что на Ваш вопрос невозможно ответить без уточнения что из себя представляет входной сигнал, как происходит выборка отсчетов, как "организованы" прогоны и какую информацию о сигнале Вы хотите извлечь с помощью БПФ. Входной сигнал - фактически оцифрованный радиоканал, отсчеты с АЦП, начало выборки производится без всякой синхронизации, просто в произвольные моменты времени берутся подряд 2048 отсчетов. А с помощью БПФ хочется получить спектральную панораму входного сигнала, усреднение нужно для получения более гладкой картинки. Как я понимаю из выжеизложенного, для данных условий нужно усреднять модуль. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 29 октября, 2011 Опубликовано 29 октября, 2011 · Жалоба Входной сигнал - фактически оцифрованный радиоканал, отсчеты с АЦП, начало выборки производится без всякой синхронизации, просто в произвольные моменты времени берутся подряд 2048 отсчетов. А с помощью БПФ хочется получить спектральную панораму входного сигнала, усреднение нужно для получения более гладкой картинки. Как я понимаю из выжеизложенного, для данных условий нужно усреднять модуль. Да. При таком раскладе усреднять нужно модуль. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ClockworkOrange 0 1 марта, 2012 Опубликовано 1 марта, 2012 · Жалоба 3. Если вы делаете БПФ на ПЛИС, то надо смотреть на алгоритмы по основанию 4, а не по основанию 2. Получается намного удобнее и эффективнее. Классическая бабочка - наследие от процессоров DSP, где она сделана аппаратно. Ядром алгоритма БПФ по основанию 4 является более сложный 4-х точечный БПФ, где все поворачивающие множители равны либо 1, либо -1. На ПЛИС удобно реализуется на сумматорах, можно сделать комбинаторную сехему, выполняющею этот самый 4-х точечный БПФ за один такт нельзя ли об этом подробнее? почему-то тот же Xilinx CoreIP FFT wizard предлагает только варианты реализаций Radix-2 & Radix-2 Lite да и гугл говорит что больше всего ищут "FFT radix 2" & "FFT radix 8" >> 4-х точечный БПФ, где все поворачивающие множители равны либо 1, либо -1 означает ли это что можно вообще обойтись без умножителей? ЗЫЖ как насчёт Radix-8 FFT ? ЗЫЫЖ интересуют данные алгоритмы в применении к БПФ на относительно большое число точек (2048) upd вот какое сравнение в слайдах нашёл Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 16 1 марта, 2012 Опубликовано 1 марта, 2012 · Жалоба вот какое сравнение в слайдах нашёл На мой взгляд, нет смысла вычислять FFT быстрее, чем заполняется входной буфер, а Radix-2 этому требованию, вроде как, удовлетворяет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ClockworkOrange 0 1 марта, 2012 Опубликовано 1 марта, 2012 · Жалоба На мой взгляд, нет смысла вычислять FFT быстрее, чем заполняется входной буфер, а Radix-2 этому требованию, вроде как, удовлетворяет. ну, еще есть такая штука как latency, которая м.б. критична во многих приложениях. ей и меряются наравне с ресурсами а cмысл, которого хочется достичь - 1) экономия площади (поэтому сравнивается обычно количество наиболее ресурсозатратных примитивов - умножителей ) 2) при фиксированном количестве точек память особо не поэкономишь, поэтому переходят на экономию обращений к памяти (уменьшение конфликтов) Radix-2 этому требованию, вроде как, удовлетворяет. в ПЛИС как раз-таки благодяря использованию сегментов блочной двухпортовой памяти снимается ограничение по обращениям (много операций чтения/записи из многих сегментов BlockRAM одновременно) в VLSI же как правило имеется 1 большой кусок DualPort RAM и там уже эти обращения становятся критичными Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 16 1 марта, 2012 Опубликовано 1 марта, 2012 · Жалоба 1) экономия площади (поэтому сравнивается обычно количество наиболее ресурсозатратных примитивов - умножителей ) Так количество умножений в алгоритме FFT и количество использованных аппаратных умножителей в IP-core это не одно и тоже.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 5 марта, 2012 Опубликовано 5 марта, 2012 · Жалоба нельзя ли об этом подробнее? почему-то тот же Xilinx CoreIP FFT wizard предлагает только варианты реализаций Radix-2 & Radix-2 Lite да и гугл говорит что больше всего ищут "FFT radix 2" & "FFT radix 8" >> 4-х точечный БПФ, где все поворачивающие множители равны либо 1, либо -1 означает ли это что можно вообще обойтись без умножителей? Конечно нет! Речь идет только о вычислении самой бабочки. 2-х и 4-х точечные бабочки имеют тривиальные коэффициенты и поэтому для их вычисления умножителей не требуются. Для всех остальных бабочек не все коэффициенты тривиальны (для 3-х, 5-ти и т.д. точечной бабочки все не тривиальны) и для вычисления самой бабочки требуются умножители. Стоит заметить, что требуются умножители на константу и если в ПЛИС нет DSP-блоков и все реализуется на простых лог. элементах, то умножители на константу занимают меньше площади (площадь зависит от значения константы) . Однако, до или после бабочки (в зависимости от схемы) нужно домножать данные на поворачивающие коэффициенты. И здесь без умножителей не обойтись. вот какое сравнение в слайдах нашёл Непонятно что значит "Complexity" и в каких попугаях. ну, еще есть такая штука как latency, которая м.б. критична во многих приложениях. ей и меряются наравне с ресурсами а cмысл, которого хочется достичь - 1) экономия площади (поэтому сравнивается обычно количество наиболее ресурсозатратных примитивов - умножителей ) 2) при фиксированном количестве точек память особо не поэкономишь, поэтому переходят на экономию обращений к памяти (уменьшение конфликтов) в ПЛИС как раз-таки благодяря использованию сегментов блочной двухпортовой памяти снимается ограничение по обращениям (много операций чтения/записи из многих сегментов BlockRAM одновременно) в VLSI же как правило имеется 1 большой кусок DualPort RAM и там уже эти обращения становятся критичными Как именно балансировать между скоростью вычислений и занимаемой площадью вопрос не простой, ввиду разнообразия реализаций одного и того же БПФ. Например, можно вычислять БПФ "переливая" из одного модуля памяти в другой и обратно, а можно сделать так называемое inplace БПФ и сэкономить память. Можно все вычисления выполнить одной бабочкой, а можно несколько бабочек считать в параллель. Да и саму бабочку можно вычислять параллельно, а можно последовательно. Если параллельно, то, скажем, для 4-х точечной бабочки нужно поставить параллельно 3 умножителя, а если последовательно вычислять, то 1. Если, к примеру, бабочка вычисляется последовательно, то нужно учитывать количество математических операций умножения . Скажем, 16-ти точечное БПФ при вычислении 2-х точечной бабочкой требует 4 этапа и, соответственно, нужно вычислить 4 этапа * 8 бабочек * 2 точки = 64 "точки" и произвести 4 этапа * 8 бабочек * 1 умножение = 32 операции умножения. При вычислении 4-х точечной бабочкой требует 2 этапа и, соответственно, нужно вычислить 2 этапа * 4 бабочки * 4 точки = 32 точки и произвести 2 этапа * 4 бабочки * 3 умножения = 24 операции умножения. Понятие "последовательное вычисление" бабочки тоже не однозначно т.к. надо уточнять какие именно вычисления выполняются последовательно: для вычисления одной "выходной" точки 2-х точечной бабочки нужно сложить 2 комплексных числа, а для 4-х точечной бабочки нужно сложить 4 комплексных числа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Corner 0 10 ноября, 2015 Опубликовано 10 ноября, 2015 · Жалоба БПФ с бабочками не 2 в степени N. Это что то новенькое... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 16 11 ноября, 2015 Опубликовано 11 ноября, 2015 · Жалоба БПФ с бабочками не 2 в степени N. Это что то новенькое... Так это для вас "это что-то новенькое".. А для всех остальных это все отнюдь не ново: Radix-3,5, Radix-3,6,12. Не говоря уж про классическое "БПФ с бабочками 4 и 8 в степени N": Radix-4,8. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DrbIn 0 13 апреля, 2018 Опубликовано 13 апреля, 2018 · Жалоба Прошу помощи у знатоков! Возникла необходимость реализовать БПФ на плис Альтера. Сидеть разбираться и с нуля писать времени нет. Знаю про мега функцию FFT, хочу воспользоваться её. Кто пользовался, поделитесь опытом? Может есть видео уроки или литература какая-нибудь. Блок создал, а какие сигналы и откуда их подключать не знаю. Подскажите!!! :help: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 16 13 апреля, 2018 Опубликовано 13 апреля, 2018 · Жалоба ug_fft Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DrbIn 0 13 апреля, 2018 Опубликовано 13 апреля, 2018 · Жалоба спасибо. а примеров случайно нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 13 апреля, 2018 Опубликовано 13 апреля, 2018 · Жалоба спасибо. а примеров случайно нет? Я работал лишь с Xilinx FFT core, но вот сейчас открыл альтеровский UG на их FFT ядро и вижу что там исчерпывающая информация, включая тайминги диаграммы, после которых никакие примеры больше не нужны. Есть ли конкретные вопросы? Добавить компонент ведь труда не составляет, тогда может уже есть какие-то вопросы, которые я по аналогии смогу помочь прояснить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DrbIn 0 16 апреля, 2018 Опубликовано 16 апреля, 2018 (изменено) · Жалоба Я работал лишь с Xilinx FFT core, но вот сейчас открыл альтеровский UG на их FFT ядро и вижу что там исчерпывающая информация, включая тайминги диаграммы, после которых никакие примеры больше не нужны. Есть ли конкретные вопросы? Добавить компонент ведь труда не составляет, тогда может уже есть какие-то вопросы, которые я по аналогии смогу помочь прояснить? Я новичок в этом деле, писал только простые алгоритмы, поэтому не судите строго. Создать компонент не составило труда, но какие вх/ вых.сигналы от куда и куда подать тут загвоздка. Если не трудно объясните НУБику)) Откуда взять вещественные и мнимые значения сигнала? Как я понимаю должна быть память, где будут храниться значения, которые будет брать компонент?! мне бы примерную блок-схему для начала. Изменено 16 апреля, 2018 пользователем DrbIn Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться