我正在尝试在我的计算机上运行field II提供的示例。此示例包含 matlab 函数以及 mex32 文件。我有更高版本的 matlab,所以我采用初始 .c 文件并将其转换为 mex64。然而,尽管像提供的示例中那样设置了所有内容,但我的 mex 函数不起作用。我对 C 编程不太熟悉,所以我不确定主要函数中到底哪里出现问题。如果有人可以指导我这个 .c 程序出了什么问题。另外,我可以成功地将这个 C 代码转换为 matlab 函数而不是使用 mex 文件吗?或者 C 代码中是否存在一些无法在 MATLAB 翻译中完全捕获的细微差别?
我试图根据 C 程序的算法编写 matlab 函数,但我不确定索引是否正确。我知道matlab索引从1开始而不是0。我不明白的是这个env_pointer被设置为一个变量的地址,然后被调用,就像它包含N_samples+1个变量一样。
void make_interpolation (unsigned char *envelope_data, /* The envelope detected and log-compressed data */
int N_samples, /* Number of samples in one envelope line */
int *index_samp_line, /* Index for the data sample number */
int *image_index, /* Index for the image matrix */
float *weight_coef, /* The weight table */
int N_values, /* Number of values to calculate in the image */
unsigned char *image) /* The resulting image */
{int i; /* Integer loop counter */
int ij_index_coef; /* Index into coefficient array */
unsigned char *env_pointer; /* Pointer to the envelope data */
float *weight_pointer; /* Pointer to the weight coefficients */
ij_index_coef = 0;
for (i=0; i<N_values; i++)
{
weight_pointer = &(weight_coef[ij_index_coef]);
env_pointer = &(envelope_data[index_samp_line[i]]);
image[image_index[i]]
= weight_pointer[0] * env_pointer[0]
+ weight_pointer[1] * env_pointer[1]
+ weight_pointer[2] * env_pointer[N_samples]
+ weight_pointer[3] * env_pointer[N_samples+1] + 0.5;
ij_index_coef = ij_index_coef + 4;
}
}
乍一看,这是一个明显的问题:维度数组需要是 API 调用的正确整数大小,因此您需要更改此设置:
int dimension[2];
到此
mwSize dimension[2];
此外,您可能会收到有关此转换的警告:
(unsigned char *) mxGetPr(etc)
所以我会把它改成这样:
(unsigned char *) mxGetData(etc)