MATLAB Embedded Coder: операция fft2 для uint8? - PullRequest
2 голосов
/ 13 ноября 2009

Я бы хотел сгенерировать некоторый код, используя встроенный кодер MATLAB, который выполняет операцию fft2 для типа данных uint8. Конечное приложение будет работать с изображениями размером до 4096 на 4096, поэтому я не хочу использовать double (~ 134 МБ двойных данных против ~ 16 МБ), необходимых для получения emlc для компиляции код прямо сейчас.

Вот пример того, что я бегу:

%#eml
function bar = emlc_test(foo)
    bar = fft2(foo);
end

с командой компилятора:

emlc -T rtw emlc_test -c -report -v -eg { zeros(32,32,'uint8') }

Это выдает ошибку:

??? Function 'fft' is not defined for values of class 'uint8'.

Та же команда кода / компиляции прекрасно работает при изменении 'uint8' на 'double'

Но, глядя на сгенерированный код, кажется, что обработка должна быть способной выполняться в пространстве uint8. Не хватает ли флажка, чтобы моя операция fft2 могла работать с данными uint8, а не с данными double?

Ответы [ 3 ]

4 голосов
/ 13 ноября 2009

Справочная документация MATLAB fft2 содержит явные требования относительно типов double или single.

Кажется, вам, возможно, придется использовать матрицу "монстр" (*), основанную на синглах, даже для ввода. Я думаю, что причина этого в том, что MATLAB не может определить желаемый тип в выводе, кроме того, что он совпадает с вводом.
(**) На самом деле не так уж и много: одиночный шрифт всего в 4 раза больше, чем вы предполагали.

2 голосов
/ 13 ноября 2009

Если вам действительно нужна оптимизация, я думаю, единственное, что вы можете сделать, это заново изобрести колесо: реализовать функцию FFT с нуля (это много работы).

2 голосов
/ 13 ноября 2009

Нет, не возможно. fft и fft2 поддерживают только одинарные и двойные числа с плавающей точкой. Не так много вы можете с этим поделать. Если вы хотите сэкономить место в памяти, попробуйте использовать одиночные поплавки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...