⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ovector.h

📁 ofdm的完整系统模型,包含信道参数,多径模型,doppler频移等都可以自由修改!是您做仿真的有力帮助.c语言运行速度快!
💻 H
字号:
#ifndef OVECTOR_H
#define OVECTOR_H

#include "spwtypes.h"
/*
 * Fixed point defines for ObjPropsDefaults()
 */

#define VEC_MEM		-1
#define VEC_MIRROR     64      /* used to define mirror vectors */
#ifndef FXP_CLIP
#define FXP_CLIP 0x2000 /* Saturate value: return closest min or max value */
#endif
#define FXP_ROUND 0x2
#define FXP_DEFAULT_MODES (FXP_ROUND | FXP_CLIP)

/*
 *  Defines for OvGenerate
 */
#ifndef OvFFT
#define OvFFT      	16	
#endif
#define OvBARTLETT 	1
#define OvBLACKMAN 	2
#define OvHAMMING  	3
#define OvHANNING  	4
#define OvKAISER	5
#define OvCHEBYSHEV	6
#define OvBARTLETT_FFT 	9
#define OvBLACKMAN_FFT 	10
#define OvHAMMING_FFT  	11
#define OvHANNING_FFT  	12
#define OvKAISER_FFT	13
#define OvCHEBYSHEV_FFT	14
#define OvFFT_WINDOW	8

/*
 *  Macros
 */
#define OvNext(sp_vec)				((sp_vec)->curr_loc += (sp_vec)->stepsize)
#define OvPrev(sp_vec)				((sp_vec)->curr_loc -= (sp_vec)->stepsize)
#define OvToBegin(sp_vec)			((sp_vec)->curr_loc = (sp_vec)->virtstart)
#define OvToEnd(sp_vec)				((sp_vec)->curr_loc = (sp_vec)->virtend)
#define OvAdvance(sp_vec, i_nelement)		((sp_vec)->curr_loc += (i_nelement) *\
						    ((sp_vec)->stepsize))
#define OvGetType(sp_vec)			((sp_vec)->properties->type)
#define OvGetStepSize(sp_vec)			((sp_vec)->stepsize/Osizeof((sp_vec)->properties))
#define OvGetLength(sp_vec)			((sp_vec)->length)
#define OvGetCurr(sp_vec)			((sp_vec)->curr_loc)
#define OvGetData(sp_vec, i_element)		((sp_vec)->virtstart + (i_element) * \
						     (sp_vec)->stepsize)
#define OvGetStart(sp_vec)			((sp_vec)->start)
#define OvGetEnd(sp_vec)			((sp_vec)->end)
#define OvGetVirtStart(sp_vec)			((sp_vec)->virtstart)
#define OvGetVirtEnd(sp_vec)			((sp_vec)->virtend)
#define OvGetProps(sp_vec)			((sp_vec)->properties)

#define OvSetStepSize(sp_vec, i_step)		((sp_vec)->stepsize = (i_step)* \
						      Osizeof((sp_vec)->properties))
#define OvSetType(sp_vec, i_type)		((sp_vec)->properties->type = i_type)
#define OvSetProps(sp_vec, sp_props)		((sp_vec)->properties = sp_props)
#ifndef OvSetLength
#define OvSetLength(sp_vec,i_newlength)		{\
						   (sp_vec)->length = i_newlength;\
						   (sp_vec)->virtend = (sp_vec)->virtstart +\
						     (i_newlength) * (sp_vec)->stepsize;\
					        }
#endif
#define OvUpdate(sp_vec, ptr)			{\
						  (sp_vec)->virtstart = (sp_vec)->start = (Data) ptr;\
						  (sp_vec)->virtend = (sp_vec)->end = ((Data) ptr) +\
							  (sp_vec)->length * (sp_vec)->stepsize;\
						}
#define OvSetLoc(sp_vec,i_element)		((sp_vec)->curr_loc = (sp_vec)->virtstart +\
						     (i_element) * (sp_vec)->stepsize)
#define OvSetStart(sp_vec,cp_newstart)		((sp_vec)->start = cp_newstart)
#define OvSetVirtStart(sp_vec,cp_virtstart)	((sp_vec)->virtstart = cp_virtstart)
#define OvCirclePtr(sp_vec,ptr)			if ((Data)((ptr) = (void *)((Data)(ptr) + (sp_vec)->stepsize)) >= (sp_vec)->virtend) \
                                                     (ptr) = (void *) (sp_vec)->virtstart

#define IvGetCurr(sp_vec)			(*(long *) (sp_vec)->curr_loc)
#define DvGetCurr(sp_vec)			(*(double *) (sp_vec)->curr_loc)
#define LvGetCurr(sp_vec)			(*(Logical *) (sp_vec)->curr_loc)
#define CvGetCurr(sp_vec)			(*(Complex *) (sp_vec)->curr_loc)
#define ICvGetCurr(sp_vec)			(*(IntCmplx *) (sp_vec)->curr_loc)

#define IvSetCurr(sp_vec,i_value)		(*(long *) (sp_vec)->curr_loc = i_value)
#define DvSetCurr(sp_vec,d_value)		(*(double *) (sp_vec)->curr_loc = d_value)
#define LvSetCurr(sp_vec,ui_value)		(*(Logical *) (sp_vec)->curr_loc = ui_value)
#define CvSetCurr(sp_vec,s_cvalue)		(*(Complex *) (sp_vec)->curr_loc = s_cvalue)
#define ICvSetCurr(sp_vec,s_icvalue)		(*(IntCmplx *) (sp_vec)->curr_loc = s_icvalue)

/*
 *  Type conversion
 */
#define DvToCv(sp_vec)	{\
			   (sp_vec)->stepsize <<= 1;\
			   (sp_vec)->length >>= 1;\
		        }
#define CvToDv(sp_vec)	{\
			   (sp_vec)->stepsize >>= 1;\
			   (sp_vec)->length <<= 1;\
		        }
/*
 *  double data type function declarations
 */
#ifdef Dvfft
#undef Dvfft
#endif
#ifdef Dvifft
#undef Dvifft
#endif

Ovector		CvConj(Ovector sp_v1, Ovector sp_v2);
Ovector		CvEquate(Ovector sp_src, Ovector sp_dst);
Ovector		CvMag2(Ovector sp_src, Ovector sp_dst);
Ovector		CvMult(Ovector sp_src1, Ovector sp_src2, Ovector sp_dst);
Ovector		CvScale(Complex s_scalar, Ovector sp_src, Ovector sp_dst);
Ovector		Dvadd(Ovector sp_src1, Ovector sp_src2, Ovector sp_dst);
Ovector		Dvadd2(Ovector sp_src, Ovector sp_dst);
Ovector		Dvsub(Ovector sp_src1, Ovector sp_src2, Ovector sp_dst);
Ovector		Dvsub2(Ovector sp_src, Ovector sp_dst);
Ovector		Dvsubr2(Ovector sp_src, Ovector sp_dst);
Ovector		Dvmult(Ovector sp_src1, Ovector sp_src2, Ovector sp_dst);
Ovector		Dvmult2(Ovector sp_src, Ovector sp_dst);
Ovector		Dvsqrt(Ovector sp_src, Ovector sp_dst);
Ovector		Dvequate(Ovector sp_src, Ovector sp_dst);
Ovector		Dvscale(register double d_scalar, Ovector sp_src, Ovector sp_dst);
Ovector		Dvfill(register double d_scalar, Ovector sp_dst);
Ovector		Dvproc1(double (*fp_func)(double), Ovector sp_src, Ovector sp_dst);
Ovector		Dvproc2(double (*fp_func)(double, double), Ovector sp_src1, Ovector sp_src2, Ovector sp_dst);
Ovector		Dvabs(Ovector sp_src, Ovector sp_dst);
Ovector		Dvfft(Ovector sp_table, Ovector sp_in, Ovector sp_out);
Ovector		Dvifft(Ovector sp_table, Ovector sp_in, Ovector sp_out);
Ovector		Dvpivot(register double d_scale, Ovector sp_src1, Ovector sp_src2, Ovector sp_dst);
Ovector		Dvpivot2(register double d_scale, Ovector sp_src, Ovector sp_dst);
Ovector		DvGenerate(int i_type, int i_length, Objprops sp_props);
Ovector		DvGenWindow(int i_type, double d_param, Ovector sp_dst);
Ovector		Dvabs(Ovector sp_src, Ovector sp_dst);
Ovector		DvSwap(Ovector sp_v1, Ovector sp_v2);
long		  Dvmax(Ovector sp_src, double *dp_max_val);
long		  Dvmin(Ovector sp_src, double *dp_min_val);
int		    DvMaxAbs(Ovector sp_v, double *dp_val);
double		Dvdot(Ovector sp_src1, Ovector sp_src2, double *dp_result);
double		Dvfir(double d_input, Ovector sp_state, Ovector sp_coef);
double		Dvfir2(double d_input, Ovector sp_state, Ovector sp_coef);
double		Dviir(double d_input, Ovector sp_state, Ovector sp_num, Ovector sp_den);
double		Dvcsum(Ovector sp_src, double *dp_res);
double		Dvsumsqr(Ovector sp_src1, Ovector sp_src2);
double		Dvcprod(Ovector sp_src, double *dp_res);
double		Dvsos(register double d_input, Ovector sp_state, Ovector sp_num, Ovector sp_den);

  
/*
 *  long data type function declarations
 */
Ovector		Ivadd(Ovector sp_src1, Ovector sp_src2, Ovector sp_dst);
Ovector		Ivadd2(Ovector sp_src, Ovector sp_dst);
Ovector		Ivsub(Ovector sp_src1, Ovector sp_src2, Ovector sp_dst);
Ovector		Ivsub2(Ovector sp_src, Ovector sp_dst);
Ovector		Ivsubr2(Ovector sp_src, Ovector sp_dst);
Ovector		Ivmult(Ovector sp_src1, Ovector sp_src2, Ovector sp_dst);
Ovector		Ivmult2(Ovector sp_src, Ovector sp_dst);
Ovector		Ivequate(Ovector sp_src, Ovector sp_dst);
Ovector		Ivscale(long i_scalar, Ovector sp_src, Ovector sp_dst);
Ovector		Ivfill(long i_scalar, Ovector sp_dst);
Ovector		Ivproc1(long (*fp_func)(long), Ovector sp_src, Ovector sp_dst);
Ovector		Ivproc2(long (*fp_func)(long, long), Ovector sp_src1, Ovector sp_src2, Ovector sp_dst);
Ovector		Ivabs(Ovector sp_src, Ovector sp_dst);
Ovector		Ivpivot(long i_scale, Ovector sp_src1, Ovector sp_src2, Ovector sp_dst);
Ovector		Ivpivot2(long i_scale, Ovector sp_src, Ovector sp_dst);
Ovector		Ivabs(Ovector sp_src, Ovector sp_dst);
long		  Ivmax(Ovector sp_src, long *ip_max_val);
long		  Ivmin(Ovector sp_src, long *ip_min_val);
long		  Ivcsum(Ovector sp_src, long *ip_res);


/*
 *  Other miscellaneous function definitions
 */
Ovector	OvAlloc(long i_numelem, Objprops sp_props);
Ovector OvAllocHdr(Objprops sp_props);
Ovector	OvCopyHdr(Ovector sp_from);
Ovector	OvConvert(Data dp_data, int i_length, Objprops sp_prop);
Ovector tableFind(int i_type, int i_len, Objprops sp_props);
Data	Oalloc(int i_mem_type, long l_size);
int	Osizeof(Objprops sp_props);
void 	OallocInit(int i_vec_mem, int i_slo_mem);
Objprops ObjPropDefault(DATA_TYPE type, int mem, short bits, short exp, short format);

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -