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

📄 cdatams.cpp

📁 此程序为wcdma系统当中ftp/video业务模型的c++程序仿真 通过此程序 能得到此两种业务在多种条件下的吞吐量和无码率的性能
💻 CPP
📖 第 1 页 / 共 5 页
字号:
}

////设置移动台是否已经加入成功接纳DCH移动台队列的标志
void CDataMs::SetIsInAdmittedList(bool bIsInAdmittedList)
{
	m_bIsInAdmittedList = bIsInAdmittedList;
}

////获取Rate结构体指针
RATE2CI_TYPE* CDataMs::GetpstRate(void)
{
	return m_pstRate;
}
	
////读取移动台当前是否在传输的标志
bool CDataMs::IsTransmitNow(void)
{
	return m_bIsTransNow;
}		
	
////读取移动台数据队列是否为空的标志
bool CDataMs::IsDataQueueEmpty(void)
{
	return (	m_lDataQueueSize > 0	)? false:true;
}

////获取数据队列为空计时器的取值	
int CDataMs::GetDataQueueEmptyTimer(void)
{
	return m_iDataQueueEmptyTimer;
}

////设置数据队列为空计时器的取值
void CDataMs::SetDataQueueEmptyTimer(int iDataQueueTimer)
{
	m_iDataQueueEmptyTimer = iDataQueueTimer;
}
////读取移动台成功传输比特数
long CDataMs::GetTotalSucfulBitNum(void)
{
	return m_lTotalSucfulBitNum;
}

////读取移动台失败传输比特数 20051206
long CDataMs::GetTotalFailedBitNum(void)
{
	return m_lTotalFailedBitNum;
}

////读取移动台成功传输的传输块数
int  CDataMs::GetTotalSucfulBLNum(void)
{
	return m_iTotalSucfulBLNum;
}		

////读取移动台传输失败的传输块数
int  CDataMs::GetTotalFailedBLNum(void)
{
	return m_iTotalFailedBLNum;
}

////读取移动台AST计时器
int CDataMs::GetASTTimer(void)
{
	return m_iASTTimer;
}			

////设置移动台AST计时器
void CDataMs::SetASTTimer(int iTimer)
{
	m_iASTTimer = iTimer;
}			

////读取移动台Active Session Throughput
float CDataMs::GetAST(void)
{
	return m_fAST;
}

////读取移动台吞吐量
float CDataMs::GetThrput(void)
{
	return m_fServiceThrput;
}

////读取移动台成功传输的分组数
int  CDataMs::GetTotalSucfulPacketNum(void)
{
	return m_iTotalSucfulPacketNum;
}

////读取移动台传输失败的分组数
int  CDataMs::GetTotalFailedPacketNum(void)
{
	return m_iTotalFailedPacketNum;
}

////计算分组错误率
float CDataMs::GetPacketErrorRate(void)
{
	m_fPacketErrorRate = float(	m_iTotalFailedPacketNum/(m_iTotalFailedPacketNum + m_iTotalSucfulPacketNum)	);
	return m_fPacketErrorRate;
}

////读取和服务扇区的最近距离
float CDataMs::GetClosestSecDistance(void)
{
	return m_fClosestServingSecDistance;
}		

////计算分组时延
int CDataMs::GetTotalPacketDelay(void)
{
	return m_iTotalPacketDelay;
}

////计算平均分组时延
float CDataMs::GetAveragePacketDelay(void)
{
	return m_fAveragePacketDelay;
}

////读取分组呼叫传输成功比特数
long CDataMs::GetTotalPCSucfulBitNum(void)
{
	return m_lTotalSucfulPCBitNum;
}

////读取分组呼叫时延数,以时隙为单位		
int  CDataMs::GetTotalPCDelay(void)
{
	return m_iPacketCallDelay;
}			

//读取平均分组时延,以s为单位
float CDataMs::GetAveragePCDelay(void)
{
	return m_fAveragePCDelay;
}

////返回分组呼叫数
int  CDataMs::GetTotalPCNum(void)
{
	return m_iPacketCallNum;
}			

////读取当前分组是否结束标志
bool CDataMs::GetIsCurrentPacketOver(void)
{
	return m_bIsCurrentPacketOver;
}

////读取当前分组呼叫是否结束标志
bool CDataMs::GetIsCurrentPCOver(void)
{
	return m_bIsCurrentPCOver;
}

////读取当前TTI内传对的比特数
int  CDataMs::GetTTISucfulBitNum(void)
{
	return m_iTTISucfulBitNum;
}

////读取当前TTI传输成功的传输块数
int  CDataMs::GetTTISucfulBLNum(void)
{
	return m_iTTISucfulBLNum;
}

////读取当前TTI
int  CDataMs::GetTTIFailedBLNum(void)
{
	return m_iTTIFailedBLNum;
}			

////读取当前TTI内传输成功分组数
int  CDataMs::GetTTISucfulPacketNum(void)
{
	return m_iTTISucfulPacketNum;
}

////读取当前TTI内传输失败分组数
int CDataMs::GetTTIFailedPacketNum(void)
{
	return m_iTTIFailedPacketNum;
}

////读取当前分组时延	
int  CDataMs::GetCurrentPacketDelay(void)
{
	return m_iCurrentPacketDelay;
}

////读取当前分组呼叫时延
int  CDataMs::GetCurrentPCDelay(void)
{
	return m_iCurrentPCDelay;
}

////读取当前分组呼叫比特数
long CDataMs::GetCurrentPCBitNum(void)
{
	return m_lCurrentPCBitNum;
}

//用于数据DCH用户drop的接口函数 add by slj
////读取DCH用户drop计时器值
int    CDataMs::GetDCHDropTimer() 
{
	    return m_iDCHDropTimer;
}

////设置DCH用户drop计时器值    
void   CDataMs::SetDCHDropTimer(int a)
{
	    m_iDCHDropTimer=a;
}

////读取DCH用户是否drop
bool   CDataMs::DCHIsDropped()
{
	    return m_bDCHIsDropped;
}

////设置DCH用户是否drop标志
void   CDataMs::SetDCHIsDropped(bool flag)
{
	    m_bDCHIsDropped=flag;
}

////读取DCH用户已经服务时隙数
int    CDataMs::GetDCHServicedSlot() 
{
	    return m_iDCHServicedSlot;
}

////设置DCH用户已经服务时隙数    
void   CDataMs::SetDCHServicedSlot(int a)
{
	    m_iDCHServicedSlot=a;
}

////private functions:
////b导频强度测量相关方法
/////////////////////////////////////////////////////////////////////////
//
//	TITLE:	DCH信道初始化函数
//
//	PURPOSE:	清除原有属性,初始化DCH信道
//
//	SAMPLE CALL:	pHttpDataMs->DCHInitialize();
//			
//	CALLED BY FUNCTIONS:	CDataMs::BestSecStrenMonitor()
//			
//	CALLING FUNCTIONS:
//	
//	AUTHOR:	Chen Meiya 
//
//	DATE:	04/04(MM/YY)
//
//	MODIFICATIONS SINCE 04/04(MM/YY)
//
////////////////////////////////////////////////////////////////////////////
void CDataMs::DCHInitialize(void)
{
	//清除信道状态相关属性
	m_iHSDSCHPriority = -1;
	m_iBestSecTimer = 0;
	m_bIsInAdmittedList = false;

	//设置DCH信道相关属性
	m_iAdmitTimer = 7500;           
	m_bIsBlocked = false;  
	m_bIsAdmitted = false; 
	m_enCHSwitchState = NOSWITCH;
	
	//清除激活集链表
	POSITION postemp;               
	postemp = m_ActiveSetList.GetHeadPosition();	  
	while (postemp != NULL)						    	
	{
		delete m_ActiveSetList.GetNext(postemp);	
	}
	m_ActiveSetList.RemoveAll();			  
	
	//释放DCH信道功率,清除激活集消息队列
	ReleaseDCHPower();

	//清除软切换消息队列
	postemp = m_SoftHandoffMessageList.GetHeadPosition();
	while (postemp != NULL)									//到链表尾则结束循环
	{
		delete m_SoftHandoffMessageList.GetNext(postemp);
	}
	m_SoftHandoffMessageList.RemoveAll();				

	//清除传输块相关属性
	m_pstTFI = NULL;
	m_pstRate = NULL;
	m_bIsTransNow = false;
	m_iSlotNumRemained = 0;
	m_fRatePredictC2I = 0;
	m_fTTIBLER = 0;
	for (	int itemp = 0; itemp<MAXBLNUM; itemp++	) 
	{
		m_iaBLTransNum[ itemp ] = 0;    //TTI内各传输块的传输次数置零
	}
	
	for(	 itemp = 0; itemp < MAXTTISLOTNUM; ++itemp	)
	{
		m_fSlotC2IindB[itemp] = 0.0;	//TTI内各时隙C2I清零
	}	
	
	//设定用户类型
	m_pMsManager->m_iSwitchCounter++;            //累加切换的次数

	//设定传输块相关属性
	RATEandTFIPredict(); 	//得到下行链路速率和TFI      

	//初始化处在DCH信道移动台的激活集,其中包括了对最佳扇区的接纳控制
	InitActiveSet();  

//Modified by Li Jing,20040714
	if(m_bIsAdmitted)
	{
		BLERInitialization();
	}
	else
	{
		//do nothing
	}
		//有关DCH用户drop判断的初始化 add by slj
	m_bDCHIsDropped = false;      //初始化DCH用户未Drop
	m_iDCHDropTimer = 0;          //初始化DCH用户Drop计时器
	m_iDCHServicedSlot = 0;       //初始化DCH用户已经服务的时隙数



}

/////////////////////////////////////////////////////////////////////////
//
//	TITLE:	HSDSCH初始化函数
//
//	PURPOSE:	清除相关属性,设定移动台处在HSDSCH信道
//
//	SAMPLE CALL:	pHttpDataMs->HSDSCHInitialize()
//			
//	CALLED BY FUNCTIONS:
//			
//	CALLING FUNCTIONS:
//	
//	AUTHOR:	zhang lin 
//
//	DATE:	04/05(MM/YY)
//
//	MODIFICATIONS SINCE 04/05(MM/YY)
//
////////////////////////////////////////////////////////////////////////////
void CDataMs::HSDSCHInitialize(void)
{

	//清除信道状态相关属性
	m_iAdmitTimer = 7500;           
	m_bIsBlocked = false;            
	m_bIsAdmitted = false; 
    m_iBestSecTimer = 0;  
	
	m_enCHSwitchState = NOSWITCH;

	//清除激活集链表
	POSITION postemp;                         
	postemp = m_ActiveSetList.GetHeadPosition();	
	while (postemp != NULL)								
	{
		delete m_ActiveSetList.GetNext(postemp);	
	}
	m_ActiveSetList.RemoveAll();				
	
	//清除软切换消息队列
	postemp = m_SoftHandoffMessageList.GetHeadPosition();
	while (postemp != NULL)									
	{
		delete m_SoftHandoffMessageList.GetNext(postemp);	
	}
	m_SoftHandoffMessageList.RemoveAll();				

	//清除传输块相关属性
	//m_pstHSRate2CI = NULL;
	m_bIsTransNow = false;
	m_iSlotNumRemained = 0;
	m_fCurrentC2I = 0;
	m_fTTIBLER = 0.;
	
	for( int itemp = 0; itemp < HSDSCHTTISLOTNUM; ++itemp	)
	{
		m_fHSDSCHSlotC2IindB[itemp] = 0.0;	//TTI内各时隙C2I清零
	}

	
	//数据移动台的子信道初始化
	m_iFreeSAWProcess=MAXSAWCHANNELNUM; //空闲子信道数为最大子信道数
	m_iPrevChannelIndex=(int)-1;       
	m_iCurrChannelIndex=(int)-1;       
	
	for ( int i=0;i < MAXSAWCHANNELNUM;i++)
	{
        m_stSAWChannel[i].bNewDataIndicator=true;
		m_stSAWChannel[i].bIsTTIGood=false;
		m_stSAWChannel[i].iFeedbackTimer=0;
		m_stSAWChannel[i].iTransCounter=0;
		m_stSAWChannel[i].fChannelC2I=0.0;
		m_stSAWChannel[i].pstRate2CI=NULL;
	}
	

	bool m_bIsTTIGood=false;        

//	m_pLinkPrediction->HSInitialization(); //by slj

}
/////////////////////////////////////////////////////////////////////////
//
//	TITLE:	DCHToDCH切换处理函数
//
//	PURPOSE:	根据最佳导频对DCH移动台进行处理
//			移动台持续对DCH进行接纳控制或者接入到新的最佳扇区的DCH信道中
//
//	SAMPLE CALL:	pHttpDataMs->DCHToDCHProcess(int,int)
//			
//	CALLED BY FUNCTIONS:	CDataMs::BestSecStrenMonitor()
//			
//	CALLING FUNCTIONS:	CDataMs::DCHInitialize()
//	
//	AUTHOR:	Chen Meiya 
//
//	DATE:	04/04(MM/YY)
//
//	MODIFICATIONS SINCE 04/04(MM/YY)
//
////////////////////////////////////////////////////////////////////////////
void CDataMs::DCHToDCHProcess(	int iPreviousBestSecIndex, int iCurrentBestSecIndex	)
{

	if(	m_bIsAdmitted == true	)
	{
		//f.WriteString("在上一时隙移动台接纳控制成功,本时隙没有操作!\n");
		//上一次成功接入最佳扇区的DCH信道,相关的操作在软切换中实现	
	}
	else
	{
		//移动台可能处在DCHTODCH状态、DCHTODSCH状态、NOSWITCH状态
		if(	m_enCHSwitchState == NOSWITCH	)
		{	
			//f.WriteString("移动台处在NOSWITCH状态!\n");
			//进行了DCH信道初始化,但是没有成功接入
			if(	iPreviousBestSecIndex == iCurrentBestSecIndex	)
			{
				//f.WriteString("持续接入最佳导频DCH信道!\n");
				

				//

⌨️ 快捷键说明

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