Перейти к содержанию

Xilinx FFT Опять про бит ту бит модкль

Здравствуйте. Уже писал по этому поводу, но к сожалению не смог найти тему. Вопрос по бит ту бит модели 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, 19:10) <{POST_SNAPBACK}>
Здравствуйте. Уже писал по этому поводу, но к сожалению не смог найти тему.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 Грендайзер
начните увеличивать числа xn_re и xn_im и смотреть где начнёт отличатся - думаю у вас там проблема с разрядностью.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата
чтобы найти чью-то тему...

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 Грендайзер
как то лихо вы начали инкрементировать : с 1 сразу на 11000 biggrin.gif
Я просто это к тому что {11_000 -> x2AF8} : вылезло сразу за байт

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата
Я просто это к тому что

А ну дык, я забыл упомянуть параметры ядра:
Входные данные: 16 разрядов; (так что 11000 вполне)
Длинна : 1024
Без масштабирования, с округлением выходных данных.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В матлабе есть своё синтезируемое FFT, можно с него начать, бит ту бит автоматически.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата
можно с него начать...

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

Поделиться сообщением


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


Смысл в симулинке прогнать всю ЦОС, разрядности рассчитать, проверить, сравнить с double моделью, там же получить синтезируемый HDL, дальше можно сразу в FPGA заливать, ну или в моделсим, если очень хочется, куча вопросов отпадёт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата
куча вопросов отпадёт

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(Грендайзер @ Oct 10 2017, 16:54) <{POST_SNAPBACK}>
SysGen это что то типа моделсима для матлаба?

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

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

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

А какова величина ошибки, после превышения которой вас перестают устраивать полученные результаты?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата
А какова величина ошибки

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

Поделиться сообщением


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

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

Кстати, корректно сравнивать не double значения, а fixed-point? Есть возможность получить целочисленные значения на выходе mex-функции?

Поделиться сообщением


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


Потому, что много лишних прослоек и закрытых вещей в себе, не нужны никакие моделсимы закрытые ядра и их модели, за время с первой темы можно было с нуля написать своё FFT в подходящей для ЦОС среде.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(Grizzzly @ Oct 10 2017, 19:04) <{POST_SNAPBACK}>
Есть возможность получить целочисленные значения на выходе mex-функции?

Дык если бы. Эта дурацкая функция работает лишь с числами >= -1 и <1. Ну и на выходе то же самое.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация