Потоковый БПФ на 16 точек (FFT 16 point) на VHDL

FFT 8 point на VHDLВ одном из предыдущих постов про потоковый  БПФ на ПЛИС был рассмотрен потоковый алгоритм БПФ на 8 точек. Алгоритм построен на базе графа прореживания по частоте. Данный пост это продолжение темы FFT но с увеличением количества обрабатываемых точек до 16. Все выполнено с использованием базовой операции "бабочка" сдвиговых регистров и переключателей. В представленном ниже проекте для Quartus 11.0 БПФ успешно справляется с преобразованием за 20 тактов на частоте 50 мГц.

Алгоритм 16-точечного БПФ с прореживанием по частоте представлен на картинке ниже.

FFT бабочка прореживание по частоте

Тут все как обычно. Основная операция данного алгоритма - операция бабочка, которая состоит из комплексного суммирования, вычитания и умножения.

FFT бабочка прореживание по частоте

Потоковый алгоритм в точности такой же как и в случае БПФ на 8 точек. За один такт производится вычисление бабочки, тоесть получение результата сразу на двух выходах бабочки A и B. Это дает возможность уже после получения результата первых пяти бабочек первой стадии начать вычислять первую бабочку второй стадии. Ну и далее после вычисления первых трех бабочек второй стадии можно начинать вычислять первую бабочку третьей стадии и т. д. Вобщем и целом на вычисление БПФ на 16 точек по такому алгоритму понадобится всего 20 тактов. Данный алгоритм подробно рассмотрен в соответствующем букваре по БПФ и его схема выглядит так:

Поточная схема БПФ

Код VHDL потокового БПФ на 16 точек в виде проекта для Quartus 11.0 можно скачать по ссылке ниже по тексту. Проект также содержит временной (timing) тестбенч под ModelSim 6.6d. Для запуска тестбенча необходимо иметь на ПК установленный ModelSim 6.6d, скомпилированные библиотеки под Cyclone3 и выполнить действия как на картинке ниже.

Запуск временной симуляции из Quartus 11.0

Тестовые данные, которые представляют из себя выборки синуса и косинуса  загружаются до выполнения самой опереации БПФ. Синусные выборки загружаются на real, косинусные на image входы БПФ. Таким образом имитируются данные для выполнения БПФ по пространству на 16 пространственных точек, причем таким образом, что на 16 входных точек БПФ помещается ровно один период синусоиды.   

Тестовые данные для БПФ

После выполнения преобразования по пространству результат будет выглядеть как максимальный всплеск на одном из выходов БПФ при почти нулевых значениях на других, как на картинке ниже.

Выходные данные БПФ 16 точек

С тестовыми данными вполне можно поэкспериментировать в плане изменения пространственной входной синусоиды, например в сторону размещения на 16 входных точек БПФ не одного периода, а двух. Результатом преобразования должен быть всплеск на другом выходе БПФ. 

Top.Mail.Ru