Грендайзер 0 9 октября, 2017 Опубликовано 9 октября, 2017 (изменено) · Жалоба Здравствуйте. Уже писал по этому поводу, но к сожалению не смог найти тему. Вопрос по бит ту бит модели 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 - выходные данные. Изменено 9 октября, 2017 пользователем Грендайзер Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 5 9 октября, 2017 Опубликовано 9 октября, 2017 · Жалоба Здравствуйте. Уже писал по этому поводу, но к сожалению не смог найти тему. ..чтобы найти чью-то тему - нужно ткнуть в НИК пользователя и посмотреть его темы или ответы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 9 октября, 2017 Опубликовано 9 октября, 2017 · Жалоба 2 Грендайзер начните увеличивать числа xn_re и xn_im и смотреть где начнёт отличатся - думаю у вас там проблема с разрядностью. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Грендайзер 0 10 октября, 2017 Опубликовано 10 октября, 2017 (изменено) · Жалоба чтобы найти чью-то тему... Учту, спасибо. начните увеличивать числа... Да, я тоже так подумал, поэтому подал числа 11000, 12000, 13000, 14000 и т.д., но результат всёравно отличается. При том не только в единицах, а случается, что и десятки пропадают (ну или почти десятки). Изменено 10 октября, 2017 пользователем Грендайзер Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 10 октября, 2017 Опубликовано 10 октября, 2017 · Жалоба 2 Грендайзер как то лихо вы начали инкрементировать : с 1 сразу на 11000 Я просто это к тому что {11_000 -> x2AF8} : вылезло сразу за байт Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Грендайзер 0 10 октября, 2017 Опубликовано 10 октября, 2017 · Жалоба Я просто это к тому что А ну дык, я забыл упомянуть параметры ядра: Входные данные: 16 разрядов; (так что 11000 вполне) Длинна : 1024 Без масштабирования, с округлением выходных данных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 7 10 октября, 2017 Опубликовано 10 октября, 2017 · Жалоба В матлабе есть своё синтезируемое FFT, можно с него начать, бит ту бит автоматически. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Грендайзер 0 10 октября, 2017 Опубликовано 10 октября, 2017 (изменено) · Жалоба можно с него начать... А смысл? Матлабовский fft даёт похожие результаты, которые впрчем, отличаются от моделсима и модели... Изменено 10 октября, 2017 пользователем Грендайзер Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 7 10 октября, 2017 Опубликовано 10 октября, 2017 · Жалоба А смысл? Матлабовский fft даёт похожие результаты, которые впрчем отличаются от модклсима и модели... Смысл в симулинке прогнать всю ЦОС, разрядности рассчитать, проверить, сравнить с double моделью, там же получить синтезируемый HDL, дальше можно сразу в FPGA заливать, ну или в моделсим, если очень хочется, куча вопросов отпадёт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Грендайзер 0 10 октября, 2017 Опубликовано 10 октября, 2017 · Жалоба куча вопросов отпадёт Да у меня 1 только вопрос, почему не работает А если серьёзно, то тут вот http://myfpgablog.blogspot.ru/2010/07/fft-...ab-fft-bit.html вроде как гражданин пишет, что мол эти дела и впрямь отличаются. Хотя ниичего и не понятно... SysGen это что то типа моделсима для матлаба? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 10 октября, 2017 Опубликовано 10 октября, 2017 · Жалоба SysGen это что то типа моделсима для матлаба? Это тулбокс для Simulink, в котором есть много готовых блоков. Собственно, схема по вашей ссылке как раз с его помощью получена. В Simulink можно все промоделировать. WaveScope графическим представлением чем-то похож на ModelSim. Да, из SysGen генерируется HDL, который может быть загружен сразу в ПЛИС. А смысл? Матлабовский fft даёт похожие результаты, которые впрчем, отличаются от моделсима и модели... А какова величина ошибки, после превышения которой вас перестают устраивать полученные результаты? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Грендайзер 0 10 октября, 2017 Опубликовано 10 октября, 2017 (изменено) · Жалоба А какова величина ошибки Да над этим я ещё не задумывался, если честно... Есть алгаритм в матлаб, ну ихотелось повторить его в плисе один в один. Мне казалось, что результаты моделсима, должны совпадать с результатами из матлаба. Тем более в ксайлинсовском описании на модель так и написано... Изменено 10 октября, 2017 пользователем Грендайзер Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 10 октября, 2017 Опубликовано 10 октября, 2017 · Жалоба Да над этим я ещё не задумывался, если честно... Есть алгаритм в матлаб, ну ихотелось повторить его в плисе один в один. Мне казалось, что результаты моделсима, должны совпадать с результатами из матлаба. Тем более в ксайлинсовском описании на модель так и написано... Хм, посмотрел внимательно статью и код. Матлабовская mex-функция xfft_v7_1_bitacc_mex и SysGen должны давать одинаковый результат, поскольку fixed-point он и в Африке fixed-point. Возможно, по-разному учитываются разрядности регистров. Где-то в сишной модели они используются, как в процессере ПК, а в HDL совпадают с разрядностью, которая в ПЛИС. Я имею в виду при операциях умножения. Кстати, корректно сравнивать не double значения, а fixed-point? Есть возможность получить целочисленные значения на выходе mex-функции? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 7 10 октября, 2017 Опубликовано 10 октября, 2017 · Жалоба Да у меня 1 только вопрос, почему не работает А если серьёзно, то тут вот http://myfpgablog.blogspot.ru/2010/07/fft-...ab-fft-bit.html вроде как гражданин пишет, что мол эти дела и впрямь отличаются. Хотя ниичего и не понятно... SysGen это что то типа моделсима для матлаба? Потому, что много лишних прослоек и закрытых вещей в себе, не нужны никакие моделсимы закрытые ядра и их модели, за время с первой темы можно было с нуля написать своё FFT в подходящей для ЦОС среде. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Грендайзер 0 10 октября, 2017 Опубликовано 10 октября, 2017 · Жалоба Есть возможность получить целочисленные значения на выходе mex-функции? Дык если бы. Эта дурацкая функция работает лишь с числами >= -1 и <1. Ну и на выходе то же самое. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться