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

📄 datatypes.h

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


/*
 *	Typedefs for the data_type storage and of the types.
 */

typedef unsigned char DATA_TYPE;

/* 
 *	Define Data Classes 
 */

#define TYPE_UNDEFINED    0
#define TYPE_INVALID      1
#define TYPE_INTEGER      2
#define TYPE_DOUBLE       3
#define TYPE_FXDPT        4
#define TYPE_LOGICAL      5
#define TYPE_STRING       6
#define TYPE_FLOAT        7
#define TYPE_MVL9         8
#define TYPE_OBJECT       9  /* New "object" type for Multimedia blocks */
#define TYPE_POLYMORPHIC  9  /* Polymorphic type for EnVision 1.5 */
#define TYPE_FXPOBJ      10  /* New "fixed point object" type for Envision blocks */
#define TYPE_UNSPECIFIED 11  /* New for SPW 4.0: unspecified */
#define TYPE_USERDEF     12  /* New for SPW 4.0: user defined */

/* Mohit Agarwal Jun 2001 */
#define TYPE_ELECTRICAL  13
#define TYPE_BOOLN 	 14

/* #define TYPE_SPARE13      13 */
/* #define TYPE_SPARE14      14 */
/* #define TYPE_SPARE15      15 */
/* Valid range for type code is 0 to 15 */

#define TYPE_CLASS_MASK 0x0F
#define TYPE_IS_INVALID(type) (((type) & TYPE_CLASS_MASK) == TYPE_INVALID)
#define TYPE_IS_UNDEFINED(type) (((type) & TYPE_CLASS_MASK) == TYPE_UNDEFINED)
#define TYPE_IS_INTEGER(type) (((type) & TYPE_CLASS_MASK) == TYPE_INTEGER)
#define TYPE_IS_DOUBLE(type) (((type) & TYPE_CLASS_MASK) == TYPE_DOUBLE)
#define TYPE_IS_FXDPT(type) (((type) & TYPE_CLASS_MASK) == TYPE_FXDPT)
#define TYPE_IS_LOGICAL(type) (((type) & TYPE_CLASS_MASK) == TYPE_LOGICAL)
#define TYPE_IS_STRING(type) (((type) & TYPE_CLASS_MASK) == TYPE_STRING)
#define TYPE_IS_FLOAT(type) (((type) & TYPE_CLASS_MASK) == TYPE_FLOAT)
#define TYPE_IS_MVL9(type) (((type) & TYPE_CLASS_MASK) == TYPE_MVL9)
#define TYPE_IS_OBJECT(type) (((type) & TYPE_CLASS_MASK) == TYPE_OBJECT)
#define TYPE_IS_FXPOBJ(type) (((type) & TYPE_CLASS_MASK) == TYPE_FXPOBJ)
#define TYPE_IS_UNSPECIFIED(type) (((type) & TYPE_CLASS_MASK) == TYPE_UNSPECIFIED)
#define TYPE_IS_USERDEF(type) (((type) & TYPE_CLASS_MASK) == TYPE_USERDEF)
#define TYPE_CLASS_SET(flag,type) flag=(flag & ~TYPE_CLASS_MASK)|type

/* 
 * Define scalar/vector/matrix/tensor 
 */

#define TYPE_SCALAR 0x00
#define TYPE_VECTOR 0x40
#define TYPE_MATRIX 0x80
#define TYPE_TENSOR 0xC0
#define TYPE_SVMT_MASK 0xC0
#define TYPE_IS_SCALAR(type) (((type) & TYPE_SVMT_MASK) == TYPE_SCALAR)
#define TYPE_IS_VECTOR(type) (((type) & TYPE_SVMT_MASK) == TYPE_VECTOR)
#define TYPE_IS_MATRIX(type) (((type) & TYPE_SVMT_MASK) == TYPE_MATRIX)
#define TYPE_IS_TENSOR(type) (((type) & TYPE_SVMT_MASK) == TYPE_TENSOR)
#define TYPE_SVMT_SET(flag,type) flag=(flag & ~TYPE_SVMT_MASK)|type

/* 
 * Define real/complex 
 */
#define TYPE_REAL        0x00
#define TYPE_COMPLEX     0x20
#define TYPE_RC_MASK     0x20
#define TYPE_IS_REAL(type) (((type) & TYPE_RC_MASK) == TYPE_REAL)
#define TYPE_IS_COMPLEX(type) (((type) & TYPE_RC_MASK) == TYPE_COMPLEX)
#define TYPE_RC_SET(flag,type) flag=(flag & ~TYPE_RC_MASK)|type
/* 
 *  Also, distinguish real/imag and mag/phase (in radians).
 */
#define TYPE_REAL_IMAG   0x00
#define TYPE_MAG_PHASE   0x10
#define TYPE_MAG_MASK    0x10
#define COMPLEX_IS_REAL_IMAG(type) (((type) & TYPE_MAG_MASK) == TYPE_REAL_IMAG)
#define COMPLEX_IS_MAG_PHASE(type) (((type) & TYPE_MAG_MASK) == TYPE_MAG_PHASE)
#define TYPE_MAG_SET(flag,type) flag=(flag & ~TYPE_MAG_MASK)|type


#define TYPE_SRE (TYPE_ELECTRICAL | TYPE_SCALAR | TYPE_REAL)
#define TYPE_SRB (TYPE_BOOLN | TYPE_SCALAR | TYPE_REAL)

/*
 * Special case define
 */
#define TYPE_HAS_ATTR(type) (!TYPE_IS_SCALAR (type) || TYPE_IS_FXDPT (type))

/* 
 * Define Combinations of the above
 */ 

#define TYPE_SRI (TYPE_INTEGER | TYPE_SCALAR | TYPE_REAL)
#define SCALAR_REAL_INTEGER (TYPE_INTEGER | TYPE_SCALAR | TYPE_REAL)
#define TYPE_SCI (TYPE_INTEGER | TYPE_SCALAR | TYPE_COMPLEX)
#define SCALAR_COMPLEX_INTEGER (TYPE_INTEGER | TYPE_SCALAR | TYPE_COMPLEX)
#define TYPE_SMI (TYPE_INTEGER | TYPE_SCALAR | TYPE_COMPLEX | TYPE_MAG_PHASE)
#define SCALAR_COMPLEX_MAG_INTEGER (TYPE_INTEGER | TYPE_SCALAR | TYPE_COMPLEX | TYPE_MAG_PHASE)
#define TYPE_VRI (TYPE_INTEGER | TYPE_VECTOR | TYPE_REAL)
#define VECTOR_REAL_INTEGER (TYPE_INTEGER | TYPE_VECTOR | TYPE_REAL)
#define TYPE_VCI (TYPE_INTEGER | TYPE_VECTOR | TYPE_COMPLEX)
#define VECTOR_COMPLEX_INTEGER (TYPE_INTEGER | TYPE_VECTOR | TYPE_COMPLEX)
#define TYPE_VMI (TYPE_INTEGER | TYPE_VECTOR | TYPE_COMPLEX | TYPE_MAG_PHASE)
#define VECTOR_COMPLEX_MAG_INTEGER (TYPE_INTEGER | TYPE_VECTOR | TYPE_COMPLEX | TYPE_MAG_PHASE)
#define TYPE_MRI (TYPE_INTEGER | TYPE_MATRIX | TYPE_REAL)
#define MATRIX_REAL_INTEGER (TYPE_INTEGER | TYPE_MATRIX | TYPE_REAL)
#define TYPE_MCI (TYPE_INTEGER | TYPE_MATRIX | TYPE_COMPLEX)
#define MATRIX_COMPLEX_INTEGER (TYPE_INTEGER | TYPE_MATRIX | TYPE_COMPLEX)

#define TYPE_SRD (TYPE_DOUBLE | TYPE_SCALAR | TYPE_REAL)
#define SCALAR_REAL_DOUBLE (TYPE_DOUBLE | TYPE_SCALAR | TYPE_REAL)
#define TYPE_SCD (TYPE_DOUBLE | TYPE_SCALAR | TYPE_COMPLEX)
#define SCALAR_COMPLEX_DOUBLE (TYPE_DOUBLE | TYPE_SCALAR | TYPE_COMPLEX)
#define TYPE_SMD (TYPE_DOUBLE | TYPE_SCALAR | TYPE_COMPLEX | TYPE_MAG_PHASE)
#define SCALAR_COMPLEX_MAG_DOUBLE (TYPE_DOUBLE | TYPE_SCALAR | TYPE_COMPLEX | TYPE_MAG_PHASE)
#define TYPE_VRD (TYPE_DOUBLE | TYPE_VECTOR | TYPE_REAL)
#define VECTOR_REAL_DOUBLE (TYPE_DOUBLE | TYPE_VECTOR | TYPE_REAL)
#define TYPE_VCD (TYPE_DOUBLE | TYPE_VECTOR | TYPE_COMPLEX)
#define VECTOR_COMPLEX_DOUBLE (TYPE_DOUBLE | TYPE_VECTOR | TYPE_COMPLEX)
#define TYPE_VMD (TYPE_DOUBLE | TYPE_VECTOR | TYPE_COMPLEX | TYPE_MAG_PHASE)
#define VECTOR_COMPLEX_MAG_DOUBLE (TYPE_DOUBLE | TYPE_VECTOR | TYPE_COMPLEX | TYPE_MAG_PHASE)
#define TYPE_MRD (TYPE_DOUBLE | TYPE_MATRIX | TYPE_REAL)
#define MATRIX_REAL_DOUBLE (TYPE_DOUBLE | TYPE_MATRIX | TYPE_REAL)
#define TYPE_MCD (TYPE_DOUBLE | TYPE_MATRIX | TYPE_COMPLEX)
#define MATRIX_COMPLEX_DOUBLE (TYPE_DOUBLE | TYPE_MATRIX | TYPE_COMPLEX)

#define TYPE_SRX (TYPE_FXDPT | TYPE_SCALAR | TYPE_REAL)
#define SCALAR_REAL_FXDPT (TYPE_FXDPT | TYPE_SCALAR | TYPE_REAL)
#define TYPE_SCX (TYPE_FXDPT | TYPE_SCALAR | TYPE_COMPLEX)
#define SCALAR_COMPLEX_FXDPT (TYPE_FXDPT | TYPE_SCALAR | TYPE_COMPLEX)
#define TYPE_SMX (TYPE_FXDPT | TYPE_SCALAR | TYPE_COMPLEX | TYPE_MAG_PHASE)
#define SCALAR_COMPLEX_MAG_FXDPT (TYPE_FXDPT | TYPE_SCALAR | TYPE_COMPLEX | TYPE_MAG_PHASE)
#define TYPE_VRX (TYPE_FXDPT | TYPE_VECTOR | TYPE_REAL)
#define VECTOR_REAL_FXDPT (TYPE_FXDPT | TYPE_VECTOR | TYPE_REAL)
#define TYPE_VCX (TYPE_FXDPT | TYPE_VECTOR | TYPE_COMPLEX)
#define VECTOR_COMPLEX_FXDPT (TYPE_FXDPT | TYPE_VECTOR | TYPE_COMPLEX)
#define TYPE_VMX (TYPE_FXDPT | TYPE_VECTOR | TYPE_COMPLEX | TYPE_MAG_PHASE)
#define VECTOR_COMPLEX_MAG_FXDPT (TYPE_FXDPT | TYPE_VECTOR | TYPE_COMPLEX | TYPE_MAG_PHASE)
#define TYPE_MRX (TYPE_FXDPT | TYPE_MATRIX | TYPE_REAL)
#define MATRIX_REAL_FXDPT (TYPE_FXDPT | TYPE_MATRIX | TYPE_REAL)
#define TYPE_MCX (TYPE_FXDPT | TYPE_MATRIX | TYPE_COMPLEX)
#define MATRIX_COMPLEX_FXDPT (TYPE_FXDPT | TYPE_MATRIX | TYPE_COMPLEX)

#define TYPE_SRM (TYPE_MVL9 | TYPE_SCALAR | TYPE_REAL)
#define TYPE_SCALAR_REAL_MVL9 (TYPE_MVL9 | TYPE_SCALAR | TYPE_REAL)

#define TYPE_SRL (TYPE_LOGICAL | TYPE_SCALAR | TYPE_REAL)
#define SCALAR_REAL_LOGICAL (TYPE_LOGICAL | TYPE_SCALAR | TYPE_REAL)
#define TYPE_SCL (TYPE_LOGICAL | TYPE_SCALAR | TYPE_REAL)
#define SCALAR_COMPLEX_LOGICAL (TYPE_LOGICAL | TYPE_SCALAR | TYPE_COMPLEX)
#define TYPE_VRL (TYPE_LOGICAL | TYPE_VECTOR | TYPE_REAL)
#define VECTOR_REAL_LOGICAL (TYPE_LOGICAL | TYPE_VECTOR | TYPE_REAL)
#define TYPE_MRL (TYPE_LOGICAL | TYPE_MATRIX | TYPE_REAL)
#define MATRIX_REAL_LOGICAL (TYPE_LOGICAL | TYPE_MATRIX | TYPE_REAL)

#define TYPE_SRS (TYPE_STRING | TYPE_SCALAR | TYPE_REAL)
#define SCALAR_REAL_STRING (TYPE_STRING | TYPE_SCALAR | TYPE_REAL)
#define TYPE_VRS (TYPE_STRING | TYPE_VECTOR | TYPE_REAL)
#define VECTOR_REAL_STRING (TYPE_STRING | TYPE_VECTOR | TYPE_REAL)
#define TYPE_MRS (TYPE_STRING | TYPE_MATRIX | TYPE_REAL)
#define MATRIX_REAL_STRING (TYPE_STRING | TYPE_MATRIX | TYPE_REAL)

#define TYPE_SRF (TYPE_FLOAT | TYPE_SCALAR | TYPE_REAL)
#define SCALAR_REAL_FLOAT (TYPE_FLOAT | TYPE_SCALAR | TYPE_REAL)
#define TYPE_SCF (TYPE_FLOAT | TYPE_SCALAR | TYPE_COMPLEX)
#define SCALAR_COMPLEX_FLOAT (TYPE_FLOAT | TYPE_SCALAR | TYPE_COMPLEX)
#define TYPE_SMF (TYPE_FLOAT | TYPE_SCALAR | TYPE_COMPLEX | TYPE_MAG_PHASE)
#define SCALAR_COMPLEX_MAG_FLOAT (TYPE_FLOAT | TYPE_SCALAR | TYPE_COMPLEX | TYPE_MAG_PHASE)
#define TYPE_VRF (TYPE_FLOAT | TYPE_VECTOR | TYPE_REAL)
#define VECTOR_REAL_FLOAT (TYPE_FLOAT | TYPE_VECTOR | TYPE_REAL)
#define TYPE_VCF (TYPE_FLOAT | TYPE_VECTOR | TYPE_COMPLEX)
#define VECTOR_COMPLEX_FLOAT (TYPE_FLOAT | TYPE_VECTOR | TYPE_COMPLEX)
#define TYPE_VMF (TYPE_FLOAT | TYPE_VECTOR | TYPE_COMPLEX | TYPE_MAG_PHASE)
#define VECTOR_COMPLEX_MAG_FLOAT (TYPE_FLOAT | TYPE_VECTOR | TYPE_COMPLEX | TYPE_MAG_PHASE)
#define TYPE_MRF (TYPE_FLOAT | TYPE_MATRIX | TYPE_REAL)
#define MATRIX_REAL_FLOAT (TYPE_FLOAT | TYPE_MATRIX | TYPE_REAL)
#define TYPE_MCF (TYPE_FLOAT | TYPE_MATRIX | TYPE_COMPLEX)
#define MATRIX_COMPLEX_FLOAT (TYPE_FLOAT | TYPE_MATRIX | TYPE_COMPLEX)

/*
 * "OBJECT" (user defined) is used for "object" and "fixed-point object"
 * ports in the new multimedia blocks.  This data type should only
 * be seen by the BDE (as implemented today, September 28, 1995) as
 * the EDBPI will return INTEGER rather than OBJECT.  An additonal
 * parameter for each pin will distinguish between the integer and
 * fixed-point pins and these two new object type (user definable) pins.
 */
#define TYPE_SRP (TYPE_POLYMORPHIC | TYPE_SCALAR | TYPE_REAL)
#define TYPE_SRO (TYPE_OBJECT | TYPE_SCALAR | TYPE_REAL)
#define SCALAR_REAL_OBJECT (TYPE_OBJECT | TYPE_SCALAR | TYPE_REAL)
#define TYPE_SCO (TYPE_OBJECT | TYPE_SCALAR | TYPE_COMPLEX)
#define SCALAR_COMPLEX_OBJECT (TYPE_OBJECT | TYPE_SCALAR | TYPE_COMPLEX)
#define TYPE_SMO (TYPE_OBJECT | TYPE_SCALAR | TYPE_COMPLEX | TYPE_MAG_PHASE)
#define SCALAR_COMPLEX_MAG_OBJECT (TYPE_OBJECT | TYPE_SCALAR | TYPE_COMPLEX | TYPE_MAG_PHASE)
#define TYPE_VRO (TYPE_OBJECT | TYPE_VECTOR | TYPE_REAL)
#define VECTOR_REAL_OBJECT (TYPE_OBJECT | TYPE_VECTOR | TYPE_REAL)
#define TYPE_VCO (TYPE_OBJECT | TYPE_VECTOR | TYPE_COMPLEX)
#define VECTOR_COMPLEX_OBJECT (TYPE_OBJECT | TYPE_VECTOR | TYPE_COMPLEX)
#define TYPE_VMO (TYPE_OBJECT | TYPE_VECTOR | TYPE_COMPLEX | TYPE_MAG_PHASE)
#define VECTOR_COMPLEX_MAG_OBJECT (TYPE_OBJECT | TYPE_VECTOR | TYPE_COMPLEX | TYPE_MAG_PHASE)
#define TYPE_MRO (TYPE_OBJECT | TYPE_MATRIX | TYPE_REAL)
#define MATRIX_REAL_OBJECT (TYPE_OBJECT | TYPE_MATRIX | TYPE_REAL)
#define TYPE_MCO (TYPE_OBJECT | TYPE_MATRIX | TYPE_COMPLEX)
#define MATRIX_COMPLEX_OBJECT (TYPE_OBJECT | TYPE_MATRIX | TYPE_COMPLEX)

/*
 * "FXPOBJ" (user defined) is used for "fixed-point object"
 * ports in the new multimedia blocks.  This data type should only
 * be seen by the BDE (as implemented today, September 28, 1995) as
 * the EDBPI will return FXDPT rather than FXPOBJ.  An additonal
 * parameter for each pin will distinguish between the fixed-point and
 * fixed-point object pins and these two new object type (user definable) pins.
 */


#define TYPE_SRY (TYPE_FXPOBJ | TYPE_SCALAR | TYPE_REAL)
#define SCALAR_REAL_FXPOBJ (TYPE_FXPOBJ | TYPE_SCALAR | TYPE_REAL)
#define TYPE_SCY (TYPE_FXPOBJ | TYPE_SCALAR | TYPE_COMPLEX)
#define SCALAR_COMPLEX_FXPOBJ (TYPE_FXPOBJ | TYPE_SCALAR | TYPE_COMPLEX)
#define TYPE_SMY (TYPE_FXPOBJ | TYPE_SCALAR | TYPE_COMPLEX | TYPE_MAG_PHASE)
#define SCALAR_COMPLEX_MAG_FXPOBJ (TYPE_FXPOBJ | TYPE_SCALAR | TYPE_COMPLEX | TYPE_MAG_PHASE)
#define TYPE_VRY (TYPE_FXPOBJ | TYPE_VECTOR | TYPE_REAL)
#define VECTOR_REAL_FXPOBJ (TYPE_FXPOBJ | TYPE_VECTOR | TYPE_REAL)
#define TYPE_VCY (TYPE_FXPOBJ | TYPE_VECTOR | TYPE_COMPLEX)
#define VECTOR_COMPLEX_FXPOBJ (TYPE_FXPOBJ | TYPE_VECTOR | TYPE_COMPLEX)
#define TYPE_VMY (TYPE_FXPOBJ | TYPE_VECTOR | TYPE_COMPLEX | TYPE_MAG_PHASE)
#define VECTOR_COMPLEX_MAG_FXPOBJ (TYPE_FXPOBJ | TYPE_VECTOR | TYPE_COMPLEX | TYPE_MAG_PHASE)
#define TYPE_MRY (TYPE_FXPOBJ | TYPE_MATRIX | TYPE_REAL)
#define MATRIX_REAL_FXPOBJ (TYPE_FXPOBJ | TYPE_MATRIX | TYPE_REAL)
#define TYPE_MCY (TYPE_FXPOBJ | TYPE_MATRIX | TYPE_COMPLEX)
#define MATRIX_COMPLEX_FXPOBJ (TYPE_FXPOBJ | TYPE_MATRIX | TYPE_COMPLEX)

/*
 * TYPE_SRZ is used in the BDE to indicated a port with
 * a type that has not been specified (unbound).  A port
 * with an unspecified type can connect to any other port type.
 * The actual type is resolved during or after netlisting.
 */
#define TYPE_SRZ (TYPE_UNSPECIFIED | TYPE_SCALAR | TYPE_REAL)

/*
 * TYPE_SRU indicates a user defined port type.  An associated
 * string value associated with the dot actually defines the port type.
 */
#define TYPE_SRU (TYPE_USERDEF | TYPE_SCALAR | TYPE_REAL)


/*
 * String representations of the above
 */

#define TYPE_NUM_ENTRIES 256
#define TYPE_MASK 0xff

/* lines: 0-7, 8-31, 32-39, 40-63, 64-71, 72-95, 96-103, ... */
/*	   +7 +1+23  +1+7   +1+23  +1+7   +1+23  +1+7	 ... */
#define TYPE_STRINGS {\
"UNDEFINED", "INVALID", "SRI", "SRD", "SRX", "SRL", "SRS", "SRF", "SRM", "SRP", "SRO", 0, 0, "SRE",\
"SRB",       0,         0,      0,    0,     0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0,\
0,           0,         "SCI", "SCD", "SCX", 0,     0,     "SCF", 0,     0, 0, 0, 0, 0, 0, 0,\
0,           0,         "VMI", "VMD", "VMX", 0,     0,     "VMF", 0,     0, 0, 0, 0, 0, 0, 0,\
0,           0,         "VRI", "VRD", "VRX", "VRL", "VRS", "VRF", 0,     0, 0, 0, 0, 0, 0, 0,\
0,           0,         0,     0,     0,     0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0,\
0,           0,         "VCI", "VCD", "VCX", 0,     0,     "VCF", 0,     0, 0, 0, 0, 0, 0, 0,\
0,           0,         0,     0,     0,     0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0,\
0,           0,         "MRI", "MRD", "MRX", "MRL", "MRS", "MRF", 0,     0, 0, 0, 0, 0, 0, 0,\
0,           0,         0,     0,     0,     0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0,\
0,           0,         "MCI", "MCD", "MCX", 0,     0,     "MCF", 0,     0, 0, 0, 0, 0, 0, 0,\
0,           0,         0,     0,     0,     0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0}

#define SHORTSIZE (sizeof(short) * 8)
#define FIXBYTESIZE(bits) (((bits / SHORTSIZE) + ((bits % SHORTSIZE) > 0)) * 2)  


#endif

⌨️ 快捷键说明

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