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

 
 
> Проблемы с коркой fft от Altera
novartis
сообщение Jan 23 2012, 09:26
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



Добрый день.
Вожусь с мегакоркой 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);

Может кто с этим сталкивался?

Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение

 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Slaven
сообщение Mar 19 2015, 12:20
Сообщение #2





Группа: Участник
Сообщений: 10
Регистрация: 16-08-13
Пользователь №: 77 949



У меня возникла следующая проблема.
Мне необходимо произвести расчет FFT c N=512 с учетом того, что выход будет организован в
Natural Order, в вход Digit Reverse Order (режим работы корки выбран как Varible Streaming c Floating Point). В обратном порядке, когда выход Digit Reverse Order, а вход Natural Order все работает . Я получаю данные с корки, записываю их в 2-х портовое ОЗУ, а затем производя digit reverse с адресом для чтения данных с ОЗУ, получаю массив переложенный в Natural Order (реверс адресов выглядит следующим образом, например: 1(00000 0001)=128(01000 0000), 5(00000 0101)=160(01010 0000) и т.д.
Но , как я писал в начале мне необходим вариант вход: Digit Reverse Order, выход: Natural Order.
Я так понимаю, что в этом случае реверс адресов должен выглядеть так: 1 (00000 0001)=256(10000 0000), 5(00000 0101)=384(11000 0000) и т.д. ). Но в данном случае на выходе FFT я вижу разваленный сигнал, смещенный по частоте. Подскажите пожалуйста, все ли я делаю правильно.
Go to the top of the page
 
+Quote Post



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

 


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


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