📄 systemsim.h
字号:
//////////////////////////////////////////////////////////////////////////////
//
// TITLE: The Definations of Fixed Parameters and Types of the Program
//
// PURPOSE:Give the Definations of Fixed Parameters and Types of the
// Program that all the modules may use
//
// COMMENTS:
// The definations consist of these two parts:
//
// 1.公共数据结构, 可以分为4类:
// ● 与地理位置有关的公共数据。包括:坐标、小区标号、扇区标号。
// ● 与邻小区干扰和切换有关的公共数据。包括:周围扇区信息、候选
// 扇区信息、激活扇区信息,以及相关的数组、链表和函数。
// ● 与信道变化模型有关的公共数据。包括:信道数据、衰落数据。
// 其中,衰落数据结构体数组构成了信道模型类与移动台类的接口。
// ● 与链路性能预测有关的公共数据。包括:速率估计、BLER估计两个
// 数据表中用到的数据结构。数据业务移动台使用速率估计表,根据当前
// 的C/I确定适合的数据速率,作为系统调度算法的依据。在某个
// sub-packet传输结束后,数据业务移动台根据encoder packet的大小、
// 数据速率、平均编码速率、C/I的均值和方差,判断当前分组的BLER,
// 然后根据BLER估计该分组是否正确。上述数据表作为链路性能预测类的
// 成员数据,链路性能预测类中需要定义与之配合的成员函数。
//
// 2.宏定义部分:
// 定义了系统中相对固定的参数,可以作为常量在整个系统程序中使用。
//
// 本文件可以作为定义系统公共头文件的依据,在变量与宏的说明过程中,
// 已经给出了大部分的英文说明或定义,可以以此为依据,并结合已有的代码
// 编写规范,定义变量和宏的名称。
//
// AUTHOR: Ouyang Hui
//
// AUDITOR:Yang Guang
//
// DATE: 01/04/05
//
// MODIFICATIONS SINCE 01/04/05:
// 20020408:
// 1 增加了两个宏定义#define Voice 1
// #define Data 2 表示业务类型
//////////////////////////////////////////////////////////////////////////////
#if !defined(SYSTEMSIM_H__INCLUDED_)
#define SYSTEMSIM_H__INCLUDED_
#include <math.h>
#include <afxtempl.h>
#include <iostream.h>
#include "sys_random.h"
#include "newran.h"
#define CarrierFrequency 2e9 //载波频率
#define MM 5 //服务区内横向小区数量
#define NN 5 //服务区内纵向小区数量
#define SectorNumber 3 //一个小区的扇区数
#define NearCoefficient 0.707 //慢衰近场系数
#define FarCoefficient 0.707 //慢衰远场系数
#define FractionOfPilotChannel 0.125 //导频功率比例
#define FractionOfCommonChannel 0.075 //其他公共信道功率比例
#define BandWidth 1.25e6 //系统带宽
#define ChipRate 1.2288e6 //码片速率
//...... modified by cqm, May.29 ......//
#define NoiseFigure 10
//移动台接收机噪声系数,叠加于NoiseDensity之上,单位:dB
//..................................//
#define NoiseDensity -174 //热噪声功率谱密度
#define NoisePower float((pow(10,(NoiseDensity+NoiseFigure)/double(10))*BandWidth))
//热噪声功率
//噪声功率谱密度与带宽的乘积,计算C/I时用
//...... modified by cqm, May.29 ......//
#define AntennaGain 15 //天线增益&电缆损耗,单位:dB
//与天线方向性(Antenna Orientation)叠加,
//构成天线衰减值(Antenna Attenuation)
//..................................//
//...... added by cqm, May.29 .......//
#define OtherLosses 10 //其他损耗,单位:dB
#define MsAntennaGain -1 //移动台天线增益,单位:dB
//..................................//
#define MinPathLoss 70 //路径损耗最小值
#define SlotSize 1.25 //时隙长度
#define PI 3.14159265
#define MinimumValue pow(10,-30) //无穷小
#define ParameterFile "parameter.txt" //参数文件路径名
//Newly Added Macro
#define MeanCallLength 120 //平均呼叫时长 120 秒
#define SubslotNumber 4 //一个时隙中子时隙的数量
#define MaxTransmissionNum 4 //最大传输次数
#define INITIALSLOT 8000 //表示程序初始化时长的宏定义,以时隙为单位
#define MAXTRANSRATE 1228.8
#define MINTRANSRATE 19.2
//...... added by cqm, Apr.8 .......//
//业务类型
#define Voice 1
#define Data 2
#define WindowSize 20
//..................................//
//位置坐标结构体
typedef struct stLocation
{
float x; //横坐标
float y; //纵坐标
} LOCATION_TYPE;
//小区标号结构体
typedef struct stCellID
{
int m; //横坐标:小区在服务区内的横向位置
int n; //纵坐标:小区在服务区内的纵向位置
} CELLID_TYPE;
//扇区标号结构体
typedef struct stSectorID
{
CELLID_TYPE stCellID; //小区标号:小区在服务区内的位置
int s; //扇区序号:该扇区在小区内的序号
}SECTORID_TYPE;
//周围扇区信息结构体
typedef struct stNeighborSector
{
SECTORID_TYPE stSectorID; //扇区标号
float fPathLoss; //路径损耗
//该扇区到达移动台的路径损耗
float fAntennaGain; //天线增益
//该扇区到达移动台方向上的天线增益
float fFastFading[SubslotNumber];//快衰落值
//该扇区到达移动台的快衰落
float fSlowFading; //慢衰落值
//该扇区到达移动台的慢衰落,根据近场值和远场值得到
float fPropagationLoss; //总的损耗值:上述三项之和(不包括快衰)
float fPowerFromTheSector; //扇区到达移动台的总功率
}NEIGHBORSECTOR_TYPE;
//候选扇区信息结构体
typedef struct stCandidateSector
{
SECTORID_TYPE stSectorID; //扇区标号
int aiNeighborSet[7*SectorNumber-1]; //相邻扇区在周围扇区信息数组中的下标(相对位置)
float fInterferenceFromOtherSector; //相邻扇区总干扰
//相邻扇区数组中各元素的“扇区到达移动台总功率”项的和
float fPilotPower; //本扇区导频接收功率
//根据该扇区的导频功率和各类损耗与衰落计算
float fPilotSNR; //本扇区导频信噪比
//导频接收功率/(本扇区其他信道接收功率*正交因子+
//相邻扇区干扰功率总和+热噪声)
bool bIsInActive; //是否在激活集内
int iStatusTimer; //状态改变计时器
//记录导频信噪比超过或低于门限的时间,若计时器达到设定值,
//则改变上面布尔型变量的状态
bool bIsBestSector; //是否为最佳基站
//标志候选集内导频信噪比最高的扇区
}CANDIDATESECTOR_TYPE;
//激活扇区结构体
typedef struct stActiveSector
{
SECTORID_TYPE stSectorID; //扇区标号
int iIndexInCandidate; //本扇区在候选集中的位置
//即该扇区在候选集数组中的下标
float fTrafficPower; //前向业务信道发射功率
//话音信道或分组数据信道发射功率
float fTrafficC2I; //前向业务信道信噪比
//业务信道接收功率/(本扇区其他信道接收功率*正交因子+
//相邻扇区干扰功率总和+热噪声)
}ACTIVESECTOR_TYPE;
//信道数据结构体
typedef struct stChannelModel
{
int iID; //ID
float fMobileSpeed; //移动台速度
int iCoSlotNum; //相关时隙长度
}CHANNELMODEL_TYPE;
//衰落数据结构体
typedef struct stFadingValue
{
CELLID_TYPE stCellID; //小区序号
float fSlowFarFading; //慢衰远场值
float fSlowFading; //慢衰值:在链路级模块中根据近场和
//远场算出
float fFastFadingSet[SectorNumber][SubslotNumber];
//快衰数组:对应一个小区中的三个扇区
}FADINGVALUE_TYPE;
/*速率估计数据表*/
//速率到C/I映射结构体
typedef struct stRate2CI
{
float fTargetC2I; //目标C/I(dB)
float fDataRate; //数据速率(kbps)
int iModulationOrder; //调制阶数
float fEffectiveCodeRate; //等效编码速率
int iSlotNumPerSubPacket; //sub-packet占用的时隙数
int iSymbolNumber; //一个sub-packet中符号数量
}RATE2CI_TYPE;
//ENCODER PACKET SIZE 到 C/I 的映射结构体
typedef struct stEPS2CI
{
int iEncoderPacketSize; //编码数据包长度
RATE2CI_TYPE* pstAddrOfRate2CI; //Rate2CI 结构体数组的首地址
int iRATE2CILength; //Rate2CI 结构体数组的长度
}EPS2CI_TYPE;
/* BLER 估计数据表(1)*/
//SNR的均值、方差到 BLER 的映射结构体
typedef struct stSNR2BLER1
{
float fMeanSNR; //平均SNR
float fStdSNR; //SNR的方差
float fBLER;
}SNR2BLER1_TYPE;
//速率到 BLER 的映射结构体
typedef struct stRate2BLER1
{
float fEffectiveCodeRate; //等效编码速率
SNR2BLER1_TYPE* pstAddrOfSNR2BLER; //SNR2BLER 表的首地址
int iSNR2BLER1Length; //SNR2BLER 表的长度
}RATE2BLER1_TYPE;
//ENCODER PACKET SIZE 到 BLER 的映射结构体
typedef struct stEPS2BLER1
{
int iEncoderPacketSize; //编码数据包长度
RATE2BLER1_TYPE* pstAddrOfRate2BLER; //Rate2BLER 结构体数组的首地址
int iRATE2BLER1Length; //Rate2BLER 结构体数组的长度
}EPS2BLER1_TYPE;
/* BLER 估计数据表(2)*/
//SNR的均值到 BLER 的映射结构体
typedef struct stSNR2BLER2
{
float fMeanSNR; //平均SNR
float fBLER;
}SNR2BLER2_TYPE;
//SNR的方差到 BLER 修正值的映射结构体
typedef struct stStd2BLER
{
float fStdSNR; //SNR的方差
float fAdjustOfBLER; //BLER 修正值
}STD2BLER_TYPE;
//速率到 BLER 的映射结构体
typedef struct stRate2BLER2
{
float fEffectiveCodeRate; //等效编码速率
SNR2BLER2_TYPE* pstAddrOfSNR2BLER; //SNR2BLER 表的首地址
STD2BLER_TYPE* pstAddrOfStd2BLER; //Std2BLER 表的首地址
}RATE2BLER2_TYPE;
//ENCODER PACKET SIZE 到 BLER 的映射结构体
typedef struct stEPS2BLER2
{
int iEncoderPacketSize; //编码数据包长度
RATE2BLER2_TYPE* pstAddrOfRate2BLER; //Rate2BLER 结构体数组的首地址
}EPS2BLER_TYPE;
//软切换消息结构体
typedef struct stSoftHandoffMessage
{
int iCandidateIndex; //目标扇区在候选集数组中的下标
SECTORID_TYPE stTargetSector; //目标扇区的扇区标号
int iWaitTime; //需要等待的时间长度,以时隙为单位
bool bIsAdd; //是否加入到激活集中,true: add,false: drop
}SOFTHANDOFFMESSAGE_TYPE;
//小区交换消息结构体
typedef struct stCellSwitchMessage
{
int iCandidateIndex; //目标扇区在候选集数组中的下标
SECTORID_TYPE stTargetSector; //目标扇区的扇区标号
int iWaitTime; //需要等待的时间长度,以时隙为单位
}CELLSWITCHMESSAGE_TYPE;
//Packet到达消息结构体
typedef struct stPacketArrivalMessage
{
int iPacketSize; //当前Packet的大小
int iTimeOfGeneratePacket; //此Packet生成的时候的时隙数
int iPacketIndex; //此Packet是其所属的PC的第几个Packet
bool bIsPacketCallEnd; //表示此Packet是否是其所属的Packet Call的最后一个Packet
}PACKETARRIVALMESSAGE_TYPE;
//PacketCall到达消息结构体
typedef struct stPacketCallArrivalMessage
{
int iTimeOfPCArrival; //此PacketCall生成的时候的时隙数
long lDataBitsOfPC; //记录当前的PC的成功传输的比特数,计算PC的吞吐量时用到,用不到!
}PACKETCALLARRIVALMESSAGE_TYPE;
const double ProcessGain[4]={17.2,20.2,23.2,23.2};
const double SPDCCHEbNt[][5]={{1.4,1.5,1.55,2.7,1.4},
{0.9,1.0,1.1,1.2,0.9},
{0.9,0.9,0.9,1.1,0.9},
{0.9,0.9,0.9,1.1,0.9}};
const double SPDCCHPowerMargin[4][5]={{2.,4.,11.,16.,1.},
{1.,1.,6.,3.,1.},
{1.,1.,1.,1.,1.},
{1.,1.,1.,1.,1.}};
const double SPDCCHErrorRate[4][5]={{0.0001,0.,0.,0.,0.001},
{0.004,0.002,0.,0.0001,0.004},
{0.004,0.004,0.004,0.001,0.004},
{0.004,0.004,0.004,0.001,0.004}};
class CNetworkDrive;
class CServiceArea;
class CMsManager;
class CLinkPrediction;
class CCell;
class CSector;
class CMobile;
class CChannelModel;
class CVoiceMs;
class CDataMs;
class CHttpDataMs;
class CFtpDataMs;
#define FastFadingValueLength 50000
const float fConstTc=500.; //zx20010813,
//计算一定时间内数据用户平均速率的时间窗口常量, 单位为slot,
//具体情况见Proportional Fair调度算法的说明
typedef struct stC2IFeedbackDelay
{
float fDelayedC2IValue;
int iDelayTime;
}C2IFEEDBACKDELAY_TYPE;
#define FEEDBACKDELAY 3; //反向链路反馈时延,3个时隙
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -