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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Xilinx FFT Опять про бит ту бит модкль, кому верить
Грендайзер
сообщение Oct 9 2017, 16:10
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 352
Регистрация: 18-04-11
Пользователь №: 64 451



Здравствуйте. Уже писал по этому поводу, но к сожалению не смог найти тему. Вопрос по бит ту бит модели xilinx fft, а именно, данные полученные в матлаб не собпадают с результатами полученными в Questasim. Если на xn_re и xn_im подаю 1, то что матлаб, что квеста выдают 1024 (это хорошо), но вот когда подаю 12345678910, результаты начинают отличаться.
Приведу код матлаба:

Код
clear all; clc; close all;
generics.C_NFFT_MAX = 10; % maximum transform length 2^generics.C_NFFT_MAX
generics.C_ARCH = 1; % Architecture 1 = Radix-4, Burst I/O,
generics.C_HAS_NFFT = 0; % Run-time configurable transform length 0 = no, 1 = yes
generics.C_USE_FLT_PT = 0; % Core interface 0 = fixed point
generics.C_INPUT_WIDTH = 16; % Must be 32 if C_USE_FLT_PT = 1
generics.C_TWIDDLE_WIDTH = 16; % Must be 24 or 25 if C_USE_FLT_PT = 1
generics.C_HAS_SCALING = 0; % Set to 0 if C_USE_FLT_PT = 1
generics.C_HAS_BFP = 0; % Set to 0 if C_USE_FLT_PT = 1
generics.C_HAS_ROUNDING = 1; % Set to 0 if C_USE_FLT_PT = 1

channels = 1;
A = power(2, generics.C_INPUT_WIDTH-1);
nfft = generics.C_NFFT_MAX;

%Input date creatioт
S_elem = [1 2 3 4 5 6 7 8 9 10];
add_zeros = zeros(1, (2^nfft) - length(S_elem));
add_ones = ones(1, (2^nfft) - length(S_elem));
x_re = zeros(1, 2^nfft);
x_im = [S_elem, add_ones]*1i;

x = (x_re + x_im)/A;

if generics.C_ARCH == 1 || generics.C_ARCH == 3
   scaling_sch = [2,2,2,2,2];%ones(1,floor(nfft/2)) * 2;
   if mod(nfft,2) == 1
    scaling_sch = [scaling_sch 1];
   end
   else
   scaling_sch = ones(1,nfft);
end
  
direct_fft = 1;
invers_fft = 0;

q_16 = quantizer([generics.C_INPUT_WIDTH, generics.C_INPUT_WIDTH-1], 'fixed', 'convergent', 'saturate');

x_q = quantize(q_16, x);

[X, blkexp, overflow] = xfft_v7_1_bitacc_mex(generics, nfft, x_q, scaling_sch, direct_fft);

X_scale = X*A;


X_scale - выходные данные.

Сообщение отредактировал Грендайзер - Oct 9 2017, 16:23
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Oct 9 2017, 18:23
Сообщение #2


отэц
*****

Группа: Свой
Сообщений: 1 578
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



Цитата(Грендайзер @ Oct 9 2017, 19:10) *
Здравствуйте. Уже писал по этому поводу, но к сожалению не смог найти тему.

..чтобы найти чью-то тему - нужно ткнуть в НИК пользователя и посмотреть его темы или ответы.


--------------------
"..не нравятся мои выборы? ..приходите в мой суд."
Узурпатор П.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Oct 9 2017, 18:35
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 242
Регистрация: 13-02-07
Из: 49°25′58″ 11°53′5″
Пользователь №: 25 329



2 Грендайзер
начните увеличивать числа xn_re и xn_im и смотреть где начнёт отличатся - думаю у вас там проблема с разрядностью.
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Oct 10 2017, 07:58
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 352
Регистрация: 18-04-11
Пользователь №: 64 451



Цитата
чтобы найти чью-то тему...

Учту, спасибо.
Цитата
начните увеличивать числа...

Да, я тоже так подумал, поэтому подал числа
11000, 12000, 13000, 14000 и т.д., но результат всёравно отличается. При том не только в единицах, а случается, что и десятки пропадают (ну или почти десятки).

Сообщение отредактировал Грендайзер - Oct 10 2017, 08:25
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Oct 10 2017, 08:47
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 242
Регистрация: 13-02-07
Из: 49°25′58″ 11°53′5″
Пользователь №: 25 329



2 Грендайзер
как то лихо вы начали инкрементировать : с 1 сразу на 11000 biggrin.gif
Я просто это к тому что {11_000 -> x2AF8} : вылезло сразу за байт
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Oct 10 2017, 09:06
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 352
Регистрация: 18-04-11
Пользователь №: 64 451



Цитата
Я просто это к тому что

А ну дык, я забыл упомянуть параметры ядра:
Входные данные: 16 разрядов; (так что 11000 вполне)
Длинна : 1024
Без масштабирования, с округлением выходных данных.
Go to the top of the page
 
+Quote Post
petrov
сообщение Oct 10 2017, 10:49
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 062
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937



В матлабе есть своё синтезируемое FFT, можно с него начать, бит ту бит автоматически.
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Oct 10 2017, 11:29
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 352
Регистрация: 18-04-11
Пользователь №: 64 451



Цитата
можно с него начать...

А смысл? Матлабовский fft даёт похожие результаты, которые впрчем, отличаются от моделсима и модели...

Сообщение отредактировал Грендайзер - Oct 10 2017, 11:38
Go to the top of the page
 
+Quote Post
petrov
сообщение Oct 10 2017, 11:41
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 062
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937



Цитата(Грендайзер @ Oct 10 2017, 14:29) *
А смысл? Матлабовский fft даёт похожие результаты, которые впрчем отличаются от модклсима и модели...


Смысл в симулинке прогнать всю ЦОС, разрядности рассчитать, проверить, сравнить с double моделью, там же получить синтезируемый HDL, дальше можно сразу в FPGA заливать, ну или в моделсим, если очень хочется, куча вопросов отпадёт.
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Oct 10 2017, 13:54
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 352
Регистрация: 18-04-11
Пользователь №: 64 451



Цитата
куча вопросов отпадёт

Да у меня 1 только вопрос, почему не работает biggrin.gif
А если серьёзно, то тут вот http://myfpgablog.blogspot.ru/2010/07/fft-...ab-fft-bit.html вроде как гражданин пишет, что мол эти дела и впрямь отличаются. Хотя ниичего и не понятно... SysGen это что то типа моделсима для матлаба?
Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Oct 10 2017, 14:03
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 464
Регистрация: 22-02-13
Пользователь №: 75 748



Цитата(Грендайзер @ Oct 10 2017, 16:54) *
SysGen это что то типа моделсима для матлаба?

Это тулбокс для Simulink, в котором есть много готовых блоков. Собственно, схема по вашей ссылке как раз с его помощью получена. В Simulink можно все промоделировать. WaveScope графическим представлением чем-то похож на ModelSim.

Да, из SysGen генерируется HDL, который может быть загружен сразу в ПЛИС.

Цитата(Грендайзер @ Oct 10 2017, 14:29) *
А смысл? Матлабовский fft даёт похожие результаты, которые впрчем, отличаются от моделсима и модели...

А какова величина ошибки, после превышения которой вас перестают устраивать полученные результаты?
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Oct 10 2017, 14:57
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 352
Регистрация: 18-04-11
Пользователь №: 64 451



Цитата
А какова величина ошибки

Да над этим я ещё не задумывался, если честно... Есть алгаритм в матлаб, ну ихотелось повторить его в плисе один в один. Мне казалось, что результаты моделсима, должны совпадать с результатами из матлаба. Тем более в ксайлинсовском описании на модель так и написано...

Сообщение отредактировал Грендайзер - Oct 10 2017, 14:58
Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Oct 10 2017, 16:04
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 464
Регистрация: 22-02-13
Пользователь №: 75 748



Цитата(Грендайзер @ Oct 10 2017, 17:57) *
Да над этим я ещё не задумывался, если честно... Есть алгаритм в матлаб, ну ихотелось повторить его в плисе один в один. Мне казалось, что результаты моделсима, должны совпадать с результатами из матлаба. Тем более в ксайлинсовском описании на модель так и написано...

Хм, посмотрел внимательно статью и код. Матлабовская mex-функция xfft_v7_1_bitacc_mex и SysGen должны давать одинаковый результат, поскольку fixed-point он и в Африке fixed-point. Возможно, по-разному учитываются разрядности регистров. Где-то в сишной модели они используются, как в процессере ПК, а в HDL совпадают с разрядностью, которая в ПЛИС. Я имею в виду при операциях умножения.

Кстати, корректно сравнивать не double значения, а fixed-point? Есть возможность получить целочисленные значения на выходе mex-функции?
Go to the top of the page
 
+Quote Post
petrov
сообщение Oct 10 2017, 16:33
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 062
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937



Цитата(Грендайзер @ Oct 10 2017, 16:54) *
Да у меня 1 только вопрос, почему не работает biggrin.gif
А если серьёзно, то тут вот http://myfpgablog.blogspot.ru/2010/07/fft-...ab-fft-bit.html вроде как гражданин пишет, что мол эти дела и впрямь отличаются. Хотя ниичего и не понятно... SysGen это что то типа моделсима для матлаба?


Потому, что много лишних прослоек и закрытых вещей в себе, не нужны никакие моделсимы закрытые ядра и их модели, за время с первой темы можно было с нуля написать своё FFT в подходящей для ЦОС среде.
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Oct 10 2017, 17:04
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 352
Регистрация: 18-04-11
Пользователь №: 64 451



Цитата(Grizzzly @ Oct 10 2017, 19:04) *
Есть возможность получить целочисленные значения на выходе mex-функции?

Дык если бы. Эта дурацкая функция работает лишь с числами >= -1 и <1. Ну и на выходе то же самое.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th November 2017 - 09:33
Рейтинг@Mail.ru


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