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

 
 
 
Reply to this topicStart new topic
> Проблемы с коркой 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
almost
сообщение Jan 23 2012, 12:04
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 199
Регистрация: 27-05-09
Из: Москва
Пользователь №: 49 648



Цитата(novartis @ Jan 23 2012, 13:26) *
Добрый день.
Вожусь с мегакоркой FFT от Altera. Создал простенький проект в квартусе 11.1 (в 9.1 такие же косяки).
Настроил мегакорку БПФ так: variable streaming, floating point, 1024 отсчета.

Подаю на вход БПФ синус, преобразованный из целого к плавающей точке.
Правильность преобразования проверял в матлабе, все правильно.
В синус ввел постоянную составляющую 512, амплитуда синуса 512, то есть отсчеты принимают значения от 0 до 1024. Частота синуса такова, что на 16 точек приходится 1 период.

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

Проблема в следующем: при некоторых фазах синуса спектр получается такой как надо, при других фазах - не правильный.

Эксперименты представлены на рисунках.

На двух графиках показал синус на входе БПФ и восстановленный путем ОБПФ из спектра из ПЛИС. Показана только малая чать сигнала.
На двух других графиках - реальные и мнимые части спектра.

Может кто нибудь наступал на подобные грабли?


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


С 23-ей страницы почитайте.
Прикрепленный файл  ______.pdf ( 673.42 килобайт ) Кол-во скачиваний: 1319
Go to the top of the page
 
+Quote Post
jojo
сообщение Jan 23 2012, 12:26
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 574
Регистрация: 9-10-04
Из: FPGA-city
Пользователь №: 827



novartis, что будет, если амплитуду сигнала в 2 раза уменьшить?
Go to the top of the page
 
+Quote Post
Александр77
сообщение Jan 23 2012, 15:46
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 608
Регистрация: 10-07-09
Из: Дубна, Московская область
Пользователь №: 51 111



Или постараться не превышать в сигнале значение 1023.
Go to the top of the page
 
+Quote Post
novartis
сообщение Jan 23 2012, 15:52
Сообщение #5


Местный
***

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



Спасибо за помощь!

Цитата
Для информативности покажите выборки до БПФ (т.е. исходный сигнал)

Исходный сигнал показан на графиках 1 и 2 черным цветом, специально его сохраняю в памяти ПЛИС, потом скидываю в файл и считываю в матлабе.

Цитата
novartis, что будет, если амплитуду сигнала в 2 раза уменьшить?

амплитуду не уменьшал, завтра попробую, мне кажется это не поможет(

Хотелось бы еще провести такой опросик по данной теме:
кто реально использовал корку БПФ от альтеры, при каких настройках и все ли там работало?
Go to the top of the page
 
+Quote Post
gosu-art
сообщение Jan 23 2012, 16:05
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 555
Регистрация: 14-10-09
Пользователь №: 52 939



http://electronix.ru/forum/index.php?showtopic=96723&hl=

bb-offtopic.gif А как как вы сохраняете значения в файл? Ниосом по JTAG-UART?
Go to the top of the page
 
+Quote Post
novartis
сообщение Jan 23 2012, 16:35
Сообщение #7


Местный
***

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



Цитата
http://electronix.ru/forum/index.php?showtopic=96723&hl=

А как как вы сохраняете значения в файл? Ниосом по JTAG-UART?


Указанную тему читал, там ядро настроено на целочисленные вычисления, автор не произвел блочное масштабирование, ему разъяснили, проблема решилась. У меня вычисления в формате с плавающей точкой, блочного масштабирования нет.

Данные я тупо записываю в однопортовую память, потом в In System Memory Conetent Editor просматриваю и экспортирую в файл.
Go to the top of the page
 
+Quote Post
novartis
сообщение Aug 7 2012, 03:22
Сообщение #8


Местный
***

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



Прошло уже полгода, а проблема у меня так и не решилась.
Может кто за эти полгода тоже столкнуся с этим.

Вот еще две картинки прикреплю.
На первой на вход коры подаю синус:
for i=1:128;
ss(i) = Amp*sin(pi/100+pi*i/4);
end.
С выхода корки снимаю результат, засовываю в матлаб, строю модуль, реальную и мнимую часть.
Прикрепленное изображение

Видим появляются существенные "пички".

На второй картинке входной синус смещен по фазе относительно первого:
for i=1:128;
ss(i) = Amp*sin(pi/10+pi*i/4);
end.
Прикрепленное изображение

Пичков уже нет, результат БПФ в ПЛИСке очень хорошо ложится на результат в матлабе.


Разные сигналы подсовывал в ПЛИС. Однозначную закономерность появления пичков не обнаружил.
Из за чего может проявляться этот эффект?

В скором времени начальство может сказать покупать корку, но не хотелось бы отдавать за ТАКОЕ 8000$.
Go to the top of the page
 
+Quote Post
shkal
сообщение Aug 7 2012, 14:11
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 281
Регистрация: 29-04-08
Из: Москва
Пользователь №: 37 149



А как насчёт умножения на оконную функцию?
Go to the top of the page
 
+Quote Post
Slaven
сообщение Mar 19 2015, 12:20
Сообщение #10





Группа: Участник
Сообщений: 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 Текстовая версия Сейчас: 22nd July 2025 - 00:28
Рейтинг@Mail.ru


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