novartis 0 23 января, 2012 Опубликовано 23 января, 2012 · Жалоба Добрый день. Вожусь с мегакоркой 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); Может кто с этим сталкивался? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
almost 0 23 января, 2012 Опубликовано 23 января, 2012 · Жалоба Добрый день. Вожусь с мегакоркой FFT от Altera. Создал простенький проект в квартусе 11.1 (в 9.1 такие же косяки). Настроил мегакорку БПФ так: variable streaming, floating point, 1024 отсчета. Подаю на вход БПФ синус, преобразованный из целого к плавающей точке. Правильность преобразования проверял в матлабе, все правильно. В синус ввел постоянную составляющую 512, амплитуда синуса 512, то есть отсчеты принимают значения от 0 до 1024. Частота синуса такова, что на 16 точек приходится 1 период. На выходе БПФ имею спектр этого синуса. Сохраняю его в памяти, из памяти считываю в файл, затем в матлабе строю графики. Проблема в следующем: при некоторых фазах синуса спектр получается такой как надо, при других фазах - не правильный. Эксперименты представлены на рисунках. На двух графиках показал синус на входе БПФ и восстановленный путем ОБПФ из спектра из ПЛИС. Показана только малая чать сигнала. На двух других графиках - реальные и мнимые части спектра. Может кто нибудь наступал на подобные грабли? Для информативности покажите выборки до БПФ (т.е. исходный сигнал), похоже на то, что надо использовать оконную функцию, ибо проблема в "кривости" выборок (края выборок уродуют спектр). С 23-ей страницы почитайте. ______.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jojo 0 23 января, 2012 Опубликовано 23 января, 2012 · Жалоба novartis, что будет, если амплитуду сигнала в 2 раза уменьшить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Александр77 1 23 января, 2012 Опубликовано 23 января, 2012 · Жалоба Или постараться не превышать в сигнале значение 1023. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novartis 0 23 января, 2012 Опубликовано 23 января, 2012 · Жалоба Спасибо за помощь! Для информативности покажите выборки до БПФ (т.е. исходный сигнал) Исходный сигнал показан на графиках 1 и 2 черным цветом, специально его сохраняю в памяти ПЛИС, потом скидываю в файл и считываю в матлабе. novartis, что будет, если амплитуду сигнала в 2 раза уменьшить? амплитуду не уменьшал, завтра попробую, мне кажется это не поможет( Хотелось бы еще провести такой опросик по данной теме: кто реально использовал корку БПФ от альтеры, при каких настройках и все ли там работало? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosu-art 0 23 января, 2012 Опубликовано 23 января, 2012 · Жалоба http://electronix.ru/forum/index.php?showtopic=96723&hl= :bb-offtopic: А как как вы сохраняете значения в файл? Ниосом по JTAG-UART? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novartis 0 23 января, 2012 Опубликовано 23 января, 2012 · Жалоба http://electronix.ru/forum/index.php?showtopic=96723&hl= А как как вы сохраняете значения в файл? Ниосом по JTAG-UART? Указанную тему читал, там ядро настроено на целочисленные вычисления, автор не произвел блочное масштабирование, ему разъяснили, проблема решилась. У меня вычисления в формате с плавающей точкой, блочного масштабирования нет. Данные я тупо записываю в однопортовую память, потом в In System Memory Conetent Editor просматриваю и экспортирую в файл. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novartis 0 7 августа, 2012 Опубликовано 7 августа, 2012 · Жалоба Прошло уже полгода, а проблема у меня так и не решилась. Может кто за эти полгода тоже столкнуся с этим. Вот еще две картинки прикреплю. На первой на вход коры подаю синус: 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$. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shkal 0 7 августа, 2012 Опубликовано 7 августа, 2012 · Жалоба А как насчёт умножения на оконную функцию? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
slaveeen 0 19 марта, 2015 Опубликовано 19 марта, 2015 · Жалоба У меня возникла следующая проблема. Мне необходимо произвести расчет 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 я вижу разваленный сигнал, смещенный по частоте. Подскажите пожалуйста, все ли я делаю правильно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться