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

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 - выходные данные.

Изменено пользователем Грендайзер

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


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

Здравствуйте. Уже писал по этому поводу, но к сожалению не смог найти тему.

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

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


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

2 Грендайзер

начните увеличивать числа xn_re и xn_im и смотреть где начнёт отличатся - думаю у вас там проблема с разрядностью.

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


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

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

Учту, спасибо.

начните увеличивать числа...

Да, я тоже так подумал, поэтому подал числа

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

Изменено пользователем Грендайзер

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


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

2 Грендайзер

как то лихо вы начали инкрементировать : с 1 сразу на 11000 :biggrin:

Я просто это к тому что {11_000 -> x2AF8} : вылезло сразу за байт

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


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

Я просто это к тому что

А ну дык, я забыл упомянуть параметры ядра:

Входные данные: 16 разрядов; (так что 11000 вполне)

Длинна : 1024

Без масштабирования, с округлением выходных данных.

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


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

В матлабе есть своё синтезируемое FFT, можно с него начать, бит ту бит автоматически.

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


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

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

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

Изменено пользователем Грендайзер

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


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

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

 

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

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


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

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

Да у меня 1 только вопрос, почему не работает :biggrin:

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

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


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

SysGen это что то типа моделсима для матлаба?

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

 

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

 

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

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

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


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

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

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

Изменено пользователем Грендайзер

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


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

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

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

 

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

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


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

Да у меня 1 только вопрос, почему не работает :biggrin:

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

 

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

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


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

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

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

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...