Добрый день.
Вожусь с мегакоркой FFT от Altera. Создал простенький проект в квартусе 11.1 (в 9.1 такие же косяки).
Настроил мегакорку БПФ так: variable streaming, floating point, 1024 отсчета.
Подаю на вход БПФ синус, преобразованный из целого к плавающей точке.
Правильность преобразования проверял в матлабе, все правильно.
В синус ввел постоянную составляющую 512, амплитуда синуса 512, то есть отсчеты принимают значения от 0 до 1024. Частота синуса такова, что на 16 точек приходится 1 период.
На выходе БПФ имею спектр этого синуса. Сохраняю его в памяти, из памяти считываю в файл, затем в матлабе строю графики.
Проблема в следующем: при некоторых фазах синуса спектр получается такой как надо, при других фазах - не правильный.
Эксперименты представлены на рисунках.
На двух графиках показал синус на входе БПФ и восстановленный путем ОБПФ из спектра из ПЛИС. Показана только малая чать сигнала.
На двух других графиках - реальные и мнимые части спектра.
Может кто нибудь наступал на подобные грабли?
Еще проблема с этим ядром:
При количестве точек кратном степени 4 я применяю процедуру Digit Reverse ReOrder, и выходные отсчеты получаются как надо. Когда же количество точек кратно степени 2 ни Digit Reverse ReOrder, ни Bit Reverse ReOrder не помогает, отсчеты отсортированы ни в том, и ни в другом порядке. Экспериментально установил, что для сигнала из 2048 точек преобразовывать надо так:
zbin(0) <= xbin(0);
zbin(1) <= xbin(2);
zbin(2) <= xbin(1);
zbin(3) <= xbin(4);
zbin(4) <= xbin(3);
zbin(5) <= xbin(6);
zbin(6) <= xbin(5);
zbin(7) <= xbin(8);
zbin(8) <= xbin(7);
zbin(9) <= xbin(9);
zbin(10) <= xbin(10);
Может кто с этим сталкивался?
Эскизы прикрепленных изображений