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

📄 cmsmanager.h

📁 这是cdma2000的一个分组调度算法实例
💻 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 + -