www.pudn.com > WCDMA.rar > scramble_long.cpp


#include  
#include  
#include  
#include  
#include "mex.h" 
#include "ScrambleLong1.cpp" 
 
 
#define	SEQUENCE_LENGTH	33554432	/* 2^25 */ 
#define CODE_LENGTH		38400 
#define BUFFER_LENGTH	25 
#define ARRAY_LENGTH	26 
#define LOG2(arg) (log( (double) arg)/log(2)) 
 
#define OFFSET		16777232 
#define COUNT1		16777199 
#define MAX_CODE_NUMBER	16777215 
#define NDIMS			2 
 
void scramble_long(unsigned long, short int *, short int *); 
 
void mexFunction (int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) 
/************************************************************************************** 
* void mexFunction (int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) 
* 
* 
* Copyright 2002 The Mobile and Portable Radio Research Group 
* 
* Gateway function for scramble_long.cpp.  Supports that passing of one input parameter 
* and one output parameter.  The input parameters is 
*		code_number			Integer valued scalar between 0 and 16777215 
* 
* The one output parameter is  
*		scramble code		Complex valued vector that contains the scramble code 
***************************************************************************************/ 
{ 
	unsigned long MX_code_number; 
	int mrows,ncols; 
	double dbl_code_number,fraction,integer_portion; 
	short int *real_code, *imag_code; 
	const int dims[]={CODE_LENGTH,1}; 
 
	// Check for the proper number of inupt and output argurments 
	if (nrhs != 1) mexErrMsgTxt("\nExactly ONE input is required\n"); 
	else if (nlhs > 1) mexErrMsgTxt("\nToo many output arguements!  Only ONE is required\n"); 
 
	// The input must be a non_complex, scalar 
	mrows = mxGetM(*prhs); 
	ncols = mxGetN(*prhs); 
	if ( !mxIsDouble(*prhs) || mxIsComplex(*prhs) || !(mrows ==1 && ncols ==1)) 
		mexErrMsgTxt("\nInput must be a noncomplex scalar\n"); 
 
	// The input must also be an integer 
	dbl_code_number=mxGetScalar(*prhs); 
	fraction=modf(dbl_code_number,&integer_portion); 
	MX_code_number = (unsigned long) integer_portion; 
	if (fraction != 0) mexErrMsgTxt("\nInput must be an integer\n"); 
	if (MX_code_number > MAX_CODE_NUMBER)  
		mexErrMsgTxt("\nInput must be less than or equal to 16777215\n"); 
 
	// Create integer array for scrambling code 
/*	if ((real_code=(short int *) calloc(CODE_LENGTH,sizeof(short int )))==NULL) 
	{ 
		printf("\nreal code array not allocated!--exiting\n"); 
		exit(-2); 
	} 
 
	if ((imag_code=(short int *) calloc(CODE_LENGTH,sizeof(short int )))==NULL) 
	{ 
		printf("\nimag code array not allocated!--exiting\n"); 
		exit(-2); 
	} 
 
*/	 
	*plhs = mxCreateNumericArray( NDIMS,dims,mxINT16_CLASS,mxCOMPLEX); 
	real_code = (short int *) mxGetPr(*plhs); 
	imag_code = (short int *) mxGetPi(*plhs); 
 
	scramble_long(MX_code_number, real_code, imag_code); 
}