codegen错误:左侧被限制为非复杂,但右侧是复杂的

时间:2017-03-07 22:49:04

标签: matlab matlab-compiler codegen

我是matlab的新手,我正在尝试将遗留的matlab代码编译成C.我这样做时会遇到以下错误:

  

???左手边被限制为不复杂,但是   右手边很复杂。要纠正这个问题,请制作   右侧实际使用REAL函数,或更改初始值   使用左侧变量赋值为复数值   COMPLEX功能。

它抱怨的代码在以下代码的注释中:

function [z_out,ovf_flag,ovf_cnt] = fxpt_sgn_saturate(z_in,Nb_out)
Nb_out=(Nb_out<=0)+(Nb_out>0)*Nb_out;
max_val =  2^(Nb_out-1)-1;
min_val = -2^(Nb_out-1);
ovf_cnt = 0;
tmp_ind = find(real(z_in) > max_val);
z_in(tmp_ind) = max_val+1j*imag(z_in(tmp_ind)); // ERROR OCCURS HERE
ovf_cnt = ovf_cnt + numel(tmp_ind);
tmp_ind = find(real(z_in) < min_val);
z_in(tmp_ind) = min_val+1j*imag(z_in(tmp_ind));
ovf_cnt = ovf_cnt + numel(tmp_ind);
tmp_ind = find(imag(z_in) > max_val);
z_in(tmp_ind) = real(z_in(tmp_ind))+1j*max_val;
ovf_cnt = ovf_cnt + numel(tmp_ind);
tmp_ind = find(imag(z_in) < min_val);
z_in(tmp_ind) = real(z_in(tmp_ind))+1j*min_val;
ovf_cnt = ovf_cnt + numel(tmp_ind);
z_out = z_in;
ovf_flag = ~(ovf_cnt==0);
return

我不太了解代码。任何想法如何解决这个问题?

由于

1 个答案:

答案 0 :(得分:3)

生成代码时,可以使用-args flag指定输入参数的大小,类和复杂性。您可以将z_in显式转换为复数,以确保代码生成成功。

codegen fxpt_sgn_saturate -args {complex(z_in), double(Nb_out)}

或者,如果您从许多其他函数中调用此函数并且仅在顶级函数上调用codegen,那么您将需要在代码中将输入显式地转换为复杂数据类型在调用函数之前,codegen可以适当地确定输入的复杂性。

function a(thing)
    fxpt_sgn_saturate(complex(thing), 10);
end