Code generation specific output array size
1 次查看(过去 30 天)
显示 更早的评论
hello, I am trying these codes that below
function [ Mshifted, f] = Func1( m ,ts,df)
fs = 1/ts;
Mshifted = zeros(1,4096);
f = zeros(1,4096);
[M,m1,df1]=fftseq(m,ts,df);
M=M/fs;
f=[0:df1:df1*(length(m1)-1)]-fs/2;
Mshifted = abs(fftshift(M));
end
and I obtain that prototype
void Func1(const double m[4096], double ts, double df, emxArray_real_T *Mshifted,emxArray_real_T *f);
How can I get array that it has 4096 size.Because in C ,this is problem especially in MCU you know because of fragmentation.emxArray_real_T include in struct is data* and if I use any emxArray_real_T abc; definition ,program give an interrupt about array size and shut down.By the way I am trying in Qt Creature those codes.Do you know any book about code generation examples and applications,and any offer about specific errors and workings
0 个评论
回答(1 个)
Denis Gurchenkov
2018-7-19
I think your question is "How can I get Mshifted and f to have size 4096 in the generated C code"?
With that presumption, if you use subscripted assignment, the size of the variable will be preserved. Change the last two lines of your code to:
f(:) = [0:df1:df1*(length(m1)-1)]-fs/2;
Mshifted(:) = abs(fftshift(M));
and now f and Mshifted are both 1-by-4096 because of the previous assignments with explicit sizes.
Another way to solve this is to modify fftseq so that it returns a fixed-size array, using same technique -- preallocate the output of the right size, and then use sub-assign to assign the first part of the array the output of fft.
hth,
Denis
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Introduction to Installation and Licensing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!