Ejemplo n.º 1
0
/*
* interp1_table_per_mex()
*/
static int interp1_table_per_mex(
mxArray *plhs[],
const mxArray *mx_ck,
const mxArray *mx_h1,
const mxArray *mx_J,
const mxArray *mx_L,
const mxArray *mx_tm,
const mxArray *mx_order, /* optional: may be NULL */
const mxArray *mx_flips) /* optional: may be NULL */
{
	const int K1 = mxGetM(mx_ck);    /* # of DFT coefficients */
	const int N = mxGetN(mx_ck);    /* # of realizations */
	const int M = mxGetM(mx_tm);    /* # of time samples */

	const int J1 = *((int *) mxGetData(mx_J));
	const int L1 = *((int *) mxGetData(mx_L));

	const double *r_h1 = mxGetPr(mx_h1);
	const double *p_tm = mxGetPr(mx_tm);
	const double *r_ck = mxGetPr(mx_ck);
	const double *i_ck = mxGetPi(mx_ck);

	const int order = mx_order ? *((int *) mxGetData(mx_order)) : 0;
	const int flip1 = mx_flips ? *((int *) mxGetData(mx_flips)) : 0;
	double *r_fm, *i_fm;
	int nn;

	if (N != 1)
		fprintf(stderr, "Caution: multiple columns?");

	Call(mxIsComplexDouble, (mx_ck))
	Call(mxIsRealDouble, (mx_tm))

	/* J, L, must be scalar */
	if (!mxIsScalarInt32(mx_J))
		Fail("J must be scalar int32")
	if (!mxIsScalarInt32(mx_L))
		Fail("L must be scalar int32")
	if (mx_order && !mxIsScalarInt32(mx_order))
		Fail("order must be scalar int32 (0 | 1)")
	if (mx_flips && !mxIsScalarInt32(mx_flips))
		Fail("flips must be scalar int32 (0 | 1)")

	/* check h table size */
	if ((int) mxGetM(mx_h1) != J1*L1+1 || (mxGetN(mx_h1) != 1)) {
		fprintf(stderr, "J=%d L=%d tablelength=%d\n",
			J1, L1, (int) mxGetM(mx_h1));
		Fail("h size problem")
	}
/*
* Usage: ck = function(fm, h_table, J, L, tm, K)
*/
static int interp1_table_adj_mex(
mxArray *plhs[],
const mxArray *mx_fm,
const mxArray *mx_h1,
const mxArray *mx_J,
const mxArray *mx_L,
const mxArray *mx_tm,
const mxArray *mx_K)
{
	const int M = mxGetM(mx_fm);	/* # of time samples */
	const int N = mxGetN(mx_fm);	/* # of realizations */
	const int J = *((int *) mxGetData(mx_J));
	const int K = *((int *) mxGetData(mx_K));
	const int L = *((int *) mxGetData(mx_L));

	const double *r_fm = mxGetPr(mx_fm);
	const double *i_fm = mxGetPi(mx_fm);
	const double *p_tm = mxGetPr(mx_tm);
	const double *r_h1 = mxGetPr(mx_h1);
	double *r_ck, *i_ck;
	int nn;

	if (N != 1)
		fprintf(stderr, "Caution: multiple columns?");

	Call(mxIsComplexDouble, (mx_fm))
	Call(mxIsRealDouble, (mx_tm))

	/* J, L, K must be scalar */
	if (!mxIsScalarInt32(mx_J))
		Fail("J must be scalar int32")
	if (!mxIsScalarInt32(mx_K))
		Fail("K must be scalar int32")
	if (!mxIsScalarInt32(mx_L))
		Fail("L must be scalar int32")

	/* check h table size */
	if ((int) mxGetM(mx_h1) != J*L+1) {
		fprintf(stderr, "J=%d L=%d tablelength=%d\n",
			J, L, (int) mxGetM(mx_h1));
		Fail("h size problem")
	}
Ejemplo n.º 3
0
/*
* interp3_table_mex()
*/
static int interp3_table_mex(
mxArray *plhs[],
const mxArray *mx_ck,	/* [K1,K2,K3] DFT coefficients */
const mxArray *mx_h1,
const mxArray *mx_h2,
const mxArray *mx_h3,
const mxArray *mx_J,
const mxArray *mx_L,
const mxArray *mx_tm,
const mxArray *mx_order, /* optional: may be NULL */
const mxArray *mx_flips) /* optional: may be NULL */
{
	int nn;
	const int ndim = mxGetNumberOfDimensions(mx_ck);
	const int K1 = (ndim > 0) ? (mxGetDimensions(mx_ck))[0] : 1;
	const int K2 = (ndim > 1) ? (mxGetDimensions(mx_ck))[1] : 1;
	const int K3 = (ndim > 2) ? (mxGetDimensions(mx_ck))[2] : 1;
	const int N = (ndim > 3) ?  (mxGetDimensions(mx_ck))[3] : 1;
	const int M = mxGetM(mx_tm);	/* # of time samples */

	const int *Jd = (int *) mxGetData(mx_J);
	const int *Ld = (int *) mxGetData(mx_L);

	const double *p_tm = mxGetPr(mx_tm);
	const double *r_h1 = mxGetPr(mx_h1);
	const double *r_h2 = mxGetPr(mx_h2);
	const double *r_h3 = mxGetPr(mx_h3);
	const double *r_ck = mxGetPr(mx_ck);
	const double *i_ck = mxGetPi(mx_ck);

	const int order = mx_order ? *((int *) mxGetData(mx_order)) : 0;
	const int *flips = mx_flips ? ((int *) mxGetData(mx_flips)) : NULL;
	double *r_fm, *i_fm;

	Call(mxIsComplexDouble, (mx_ck))
	Call(mxIsRealDouble, (mx_tm))

	/* J,L must be [1,3] */
	if (!mxIsInt32n(mx_J, 3))
		Fail("J must be [1,3]")
	if (!mxIsInt32n(mx_L, 3))
		Fail("L must be [1,3]")
	if (mx_order && !mxIsScalarInt32(mx_order))
		Fail("order must be scalar int32 (0 | 1)")
	if (mx_flips && !mxIsInt32n(mx_flips, 3))
		Fail("flips must be [1 3] int32 (0 | 1)")

	/* check size & type of tables */
	if ((int) mxGetM(mx_h1) != Jd[0]*Ld[0]+1 || mxGetN(mx_h1) != 1) {
		fprintf(stderr, "J=%d L=%d tablelength=%d\n",
			Jd[0], Ld[0], (int) mxGetM(mx_h1));
		Fail("h1 size problem")
	}
Ejemplo n.º 4
0
/*
* interp1_table_per_mex()
*/
static int interp1_table_per_mex(
mxArray *plhs[],
const mxArray *mx_ck,
const mxArray *mx_h1,
const mxArray *mx_J,
const mxArray *mx_L,
const mxArray *mx_tm)
{
	const int K = mxGetM(mx_ck);    /* # of DFT coefficients */
	const int N = mxGetN(mx_ck);    /* # of realizations */
	const int M = mxGetM(mx_tm);    /* # of time samples */

	const int J1 = *((int *) mxGetData(mx_J));
	const int L1 = *((int *) mxGetData(mx_L));

	const double *r_h1 = mxGetPr(mx_h1);
	const double *i_h1 = mxGetPi(mx_h1);
	const double *p_tm = mxGetPr(mx_tm);
	const double *r_ck = mxGetPr(mx_ck);
	const double *i_ck = mxGetPi(mx_ck);
	double *r_fm, *i_fm;
	int nn;

	if (N != 1)
		fprintf(stderr, "Caution: multiple columns?");

	/* J, L, must be scalar */
	if (!mxIsScalarInt32(mx_J))
		mexErrMsgTxt("J must be scalar int32");
	if (!mxIsScalarInt32(mx_L))
		mexErrMsgTxt("L must be scalar int32");

	/* check h table size */
	if (mxGetM(mx_h1) != J1*L1+1 || (mxGetN(mx_h1) != 1)) {
		fprintf(stderr, "J=%d L=%d tablelength=%d\n",
			J1, L1, mxGetM(mx_h1));
		mexErrMsgTxt("h size problem");
	}
	if (!mxIsComplex(mx_h1))
		mexErrMsgTxt("h must be complex.");

	if (!mxIsComplex(mx_ck))
		mexErrMsgTxt("ck must be complex.");

	if (mxGetN(mx_tm) != 1)
		mexErrMsgTxt("t_m must be col vector.");
	if (mxIsComplex(mx_tm))
		mexErrMsgTxt("tm must be real");

	/* create a new array and set the output pointer to it */
	plhs[0] = mxCreateDoubleMatrix(M, N, mxCOMPLEX);
	r_fm = mxGetPr(plhs[0]);
	i_fm = mxGetPi(plhs[0]);

	/* call the C subroutine N times; once for each realization */
	for (nn=0; nn < N; ++nn) {
		interp1_table_per(r_ck, i_ck, K, r_h1, i_h1,
			J1, L1, p_tm, M, r_fm, i_fm);
		r_ck += K; i_ck += K;
		r_fm += M; i_fm += M;
	}

	return 1;
}