我想使用MATLAB Embedded Coder生成一些代码,它在uint8数据类型上运行fft2操作。最终的应用程序将操作高达4096到4096的图像,所以我希望现在不必使用让emlc编译代码所需的double (~134MB双倍数据,而不是~16MB)输入。
下面是我正在运行的示例:
%#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数据上工作?
发布于 2009-11-13 23:14:12
对双精度或单精度类型的要求是明确的。
看起来你可能不得不使用一个基于单数的“怪物”(*)矩阵作为输入。我认为这样做的原因是MATLAB无法决定输出中所需的类型,而不是与输入相同。
(**)实际上没有那么大:单一类型只是你想要的4倍。
发布于 2009-11-13 23:13:48
不,不可能。快速傅立叶变换和fft2仅支持单浮点和双浮点。你对此无能为力。如果你想节省内存空间,可以试试单浮点数。
发布于 2009-11-14 03:25:00
如果你真的需要优化,我认为你唯一能做的就是重新发明轮子:从头开始实现你的FFT函数(这是一项大量的工作)。
https://stackoverflow.com/questions/1729581
复制相似问题