📄 cmsmanager.h
字号:
//ChengYU
//2001.3.19
//MsManager.h
#if !defined(SYSTEMLEVEL_SIMULATION_CDMATYPE_MANAGER_H)
#define SYSTEMLEVEL_SIMULATION_CDMATYPE_MANAGER_H
#include "systemsim.h"
#include <afxtempl.h>
//These several macros indicate the scheduling agorithms
//The macro MAXC2I indicates the system schedules the mobiles according to their C/I, and allocate the sector to the mobile with maximum C/I.
//The macro RANDOMR indicates the system allocates the sector to a user randomly
//Only one of these macros can be active.
#define MAXC2I //最大C/I算法宏
//#define RANDOMR //随机数算法宏
//#define PROPFAIRNESS //正比公平算法
//#define NEWMAXC2I //修正最大C/I
//#define NEWPROPFAIRNESS //修正正比公平
class CMsManager
{
//attribute
private:
CTypedPtrList<CPtrList, CVoiceMs*> m_VoiceList; //话音业务用户链表
CTypedPtrList<CPtrList, CHttpDataMs*> m_HttpDataList;//http业务用户链表
CTypedPtrList<CPtrList, CFtpDataMs*> m_FtpDataList; //ftp业务用户链表
CLinkPrediction* m_pLinkPrediction;
int m_iVoiceNumInSys; //系统总的话音用户数
float m_fFractionFtp; //FTP用户比例
int m_iDataNumInSys; //系统总的数据用户数
double m_fTotalBits; //总的传输比特量
long m_lTotalErrorEP; //总的差错EP数
long m_lTotalGoodEP; //总的正确EP数
float m_fMeanThroughputPerSector; //Drop内的平均吞吐量
float m_fMeanPER; //Drop内的平均分组差错概率
long m_lDiscardedPacket; //Drop内丢弃的packet数目
long m_lTotalErrorPacket; //总的差错Packet数
long m_lTotalGoodPacket; //总的正确Packet数
int m_iDropNumOfVoice; //话音业务掉话用户数
int m_iBadNumOfVoice; //话音业务不满意用户数
int m_iVoiceUserOfCurrentDrop; //本时隙结束通话的话音用户
float m_fDropTimeLimit; //话音业务掉话时间限
float m_fBadRatioOfVoice; //话音用户的不满意率
float m_fDropRatioOfVoice; //话音用户掉话率
CServiceArea* m_pServiceArea; //指向ServiceArea对象的指针##
//统计文件名参数
char m_sSystemMeanThroughputFile[40];
//● 系统平均吞吐量的统计文件,统计整个系统内每个扇区的平均吞吐量,
//每个drop输出一个值
char m_sSystemMeanPERFile[40];
//● 系统平均分组差错概率,整个系统中的分组差错概率,每个drop输出
//一个值
char m_sMobileC2IFile[40];
//● 移动台C/I的统计文件,在指定时间输出所有移动台的C/I数据,
//点数为移动台的个数
char m_sMobileThroughputServiceFile[40];
//● 移动台吞吐量(service)统计文件,按service统计用户吞吐量,
//点数为移动台的个数
char m_sVoiceFile[40];
//话音统计文件,每个drop输出一个值
char m_sMobileThroughputPacketCallFile[40];
//● 移动台吞吐量(packet call)统计文件,按packet call统计用户
//吞吐量,点数为移动台的个数
public:
int m_iSlotNum; //每drop时隙数
float m_fSlotTime; //每时隙时长
float m_fDropTime; //每drop时长
int m_iHttpNum; //http用户数
int m_iFtpNum; //ftp用户数
float m_fFractionHttp; //http用户比例
int m_iDataNumPerSector; //每扇区数据用户数
int m_iDataNumGenerated[SectorNumber]; //生成的属于每个扇区的数据用户数
//...... added by cqm, Arl.9 ......//
int m_iVoiceNumPerSector; //每扇区话音用户数
int m_iVoiceNumGenerated[SectorNumber]; //生成的属于每个扇区的话音用户数
//.................................//
int m_iSlotCurrentNum;
int m_iDropCurrentNum;
//以下为各个移动台类的参数
float m_fFudgetFactorOf8PSK; //8PSK高阶调制因子
float m_fFudgetFactorOf16QAM; //16QAM高阶调制因子
float m_fVoiceActiveFactor; //话音激活因子
int m_iActiveSetMaxSize; //激活集最大数量
float m_fPowerControlStep; //功率控制调整步长
int m_iSoftHandoffDelay; //软切换事件时延
float m_fC2IThreshold; //门限C/I
float m_fC2ITarget; //目标C/I
float m_fMaxFractionOfTrafficPower; //业务信道最大功率比例
float m_fDynamicRangeOfTrafficPower; //业务信道功率动态范围
float m_fBEROfPC; //功率控制差错概率
int m_iMaxTransmissionNum; //Encoder packet的最大传输次数
int m_iCellSwitchDelay; //小区交换事件时延
float m_fErrorRateOfFeedBack; //ACK/NAK差错概率
float m_fAlpha; //Pareto分布的参数alpha
float m_fK; //Pareto分布的参数K
int m_iMaxDataBitsNum; //Packet call的最大数据量
// int m_iMeanDataBitsNum; //Packet call的平均数据量
float m_fMeanIntervalOfPacketCall; //Packet call平均间隔时间
float m_fStdSlowFading; //慢衰标准差
int m_iHttpMeanPacketDataRate; //Http平均数据速率
int m_iHttpPacketSize; //Http packet的大小
//各信道类型数量
int m_iChannelNumber;
//...... added by cqm, Apr.9 ......//
//话音 FER vs Eb/N0 表
float m_fC2IIndex[26];
float m_fFER_3[26];
float m_fFER_30[26];
float m_fFER_100[26];
float m_fFER_0[26];
//.................................//
//各信道对应比例值
float m_fFractionOfChannel[10];
long m_lRealErrorSP;
long m_lRealTotalSP;
long m_lErrorSPDCCH;
//软切换参数
float m_fSHOAddThreshold; //软切换加入门限
float m_fSHODeleteThreshold; //软切换去掉门限
int m_iSHODeleteTimer; //软切换去掉定时器
float m_fSHOSubstitutionThreshold; //软切换替代门限
//Operation
public:
CMsManager(){}
//用户发射功率统计门限初始化
~CMsManager(); //清除用户链表
void Initialization(int,float,float,CLinkPrediction*); //完成类的初始化工作
void MsInitialization(CServiceArea*); //完成移动台对象的初始化工作
void AddUser(); //产生三种用户并加入链表队列
void Clean(); //清除用户链表,由析构函数调用
void VoiceProcess(); //对所有话音用户进行循环
void VoiceStatistics(); //统计所有话音用户的平均不满意率,并输出至文件中
void DataProcess(); //估计各个数据用户的传输速率,根据一定调度算法确定各个扇区应传送的数据用户
void Scheduling(CDataMs*); //根据一定算法确定各个扇区的最佳传输用户,在DataProcess()函数中调用
void DataBitsAndPacketCumulate(); //在各个扇区选定数据用户传输数据时,把成功传输的数据量(作为参数)累加值统计数据中
//并把成功传输或未成功(作为参数)的分组数(参数)累加值统计数据中
void MeanThroughputStatistics(); //计算平均吞吐量,并输出至文件中
void MeanPERStatistics(); //计算平均分组差错概率,并输出至文件
void MsThroughputStatistics(); //把各个数据用户的吞吐量输出至文件中
// void MsC2IStatistics(); //把各个移动台的C/I数据输出至文件中
//zdy新增统计输出文件的函数
void MsDelayStatistics(); //把各个http移动台的时延数据输出至文件MsDelay.txt
float DataPriorityCalculate(CDataMs*);
////数据用户优先权计算函数,用于判断采用哪一种调度算法,并计算给出相应的优先权值
float PropFairCalculate(CDataMs*);
//cyu于5。15修改
//考虑正比公平的优先权指标计算函数,由DataPriorityCalculate(CDataMs*)调用
int GetVoiceNumPerSector();
void SetVoiceNumPerSector(int);
int GetDataNumPerSector();
void SetDataNumPerSector(int);
float GetFractionHttp();
void SetFractionHttp(float);
float GetFractionFtp();
void SetFractionFtp(float);
////////////// Added by Ouyang Hui on May, 8, 2001///////////////
void UpdateSectorPower();
void UpdateSetPower();
/////////////////////////////////////////////////////////////////
//////////////////孟松新增函数///////////////////////////////////////////
float DistanceCaculte(LOCATION_TYPE,SECTORID_TYPE);
//计算移动台到最近基站的距离(多个函数中用到)
/////////////////////////////////////////////////////////////////////////
//
char* GetSystemMeanThroughputFile();
void SetSystemMeanThroughputFile(char*);
char* GetSystemMeanPERFile();
void SetSystemMeanPERFile(char*);
char* GetMobileC2IFile();
void SetMobileC2IFile(char*);
char* GetMobileThroughputServiceFile();
void SetMobileThroughputServiceFile(char*);
char* GetMobileThroughputPacketCallFile();
void SetMobileThroughputPacketCallFile(char*);
char* GetVoiceFile();
void SetVoiceFile(char*);
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -