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

📄 cservicearea.cpp

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

	temp[5].m=temp[6].m=temp[14].m=temp[18].m=m-1;
	if(m%2==1)
	{
        temp[5].n=n;
		temp[6].n=n-1;
		temp[14].n=n+1;
		temp[18].n=n-2;
	}
	else
	{
        temp[5].n=n+1;
		temp[6].n=n;
		temp[14].n=n+2;
		temp[18].n=n-1;
	}
        for(int i=0;i<19;i++)
	{
		m_aCellArray[m-1][n-1].m_aMonitorCellLocation[i]=GetCor(temp[i]);
		//存储监测小区的实际坐标
		//需要注明的是,这里不需要进行小区映射后再存储小区的坐标。这样
		//才能实现用有限区域来模拟无限区域的想法
		temp[i]=Translation(temp[i]);
		//小区映射
		sectorid.stCellID=temp[i];

	/*	//for compile
		if(m==3&&n==3)
		{
			CStdioFile f;
			char buf[50];
	
			if( !f.Open("MonitorSet.txt",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite))
			{
				#ifdef _DEBUG
		 	    afxDump<<"Unable to open file"<<"\n";	//异常处理
		        #endif
			}
            f.SeekToEnd();

			_itoa(temp[i].m,buf,10);
	        f.WriteString(buf);
	        f.WriteString("\t");
            
			_itoa(temp[i].n,buf,10);
	        f.WriteString(buf);
	        f.WriteString("\t");

			_gcvt(m_aCellArray[m-1][n-1].m_aMonitorCellLocation[i].x,8,buf);
			f.WriteString(buf);
			f.WriteString("\t");

			_gcvt(m_aCellArray[m-1][n-1].m_aMonitorCellLocation[i].y,8,buf);
			f.WriteString(buf);
			f.WriteString("\n");

			f.Close();
		}
		//end compile*/

		
		for(int j=0;j<SectorNumber;j++)
		{
		        sectorid.s=j+1;
		        m_aCellArray[m-1][n-1].m_aMonitorSector[i*SectorNumber+j]=GetSector(sectorid);
		}
	}
} 

/////////////////////////////////////////////////////////////////////////
//
//	TITLE:	DCH数据信道可用功率计算函数
//
//	PURPOSE:	计算服务环境中所有扇区的DCH数据信道可用功率
//
//	SAMPLE CALL:	pServiceArea->DCHAvailaCalculate(void)
//			
//	CALLED BY FUNCTIONS:	CNetworkDrive::SlotRun()
//			
//	CALLING FUNCTIONS:
//	
//	AUTHOR:	Chen Meiya 
//
//	DATE:	04/04(MM/YY)
//
//	MODIFICATIONS SINCE 04/04(MM/YY)
//
////////////////////////////////////////////////////////////////////////////
void CServiceArea::DCHAvailablePowerCalculate()
{
/*
	//by zl 20050425
	int m=2;
	int n=2;
*/
	//by HuangFan
	for(int m=0;m<MM;m++)
		for(int n=0;n<NN;n++)
			for(int i=0;i<SectorNumber;i++)
				m_aCellArray[m][n].m_aSectorInCell[i].DCHAvailablePowerCalculate();

}
//////////////////////////////////////////////////////////////////////////
//TITLE:      DSCHAvailablePowerCalculate(DSCH分组数据信道可用功率计算函数)				        
//
//PARAMETERS:NULL              
//
//PURPOSE AND ALGORITHMS:
//            依次调用每一小区中每一扇区的可用DSCH分组功率计算函数
//                                               
//AUTHOR:     Li Jing
//
//CALLING FUNCTIONS:
//            CSector::DSCHPowerCalculate()
//            
//////////////////////////////////////////////////////////////////////////
void CServiceArea::HSDSCHAvailablePowerCalculate()   
{
/*
    //by zl 20050425
	int m=2;
	int n=2;
*/
	//by HuangFan
	for(int m=0;m<MM;m++)
		for(int n=0;n<NN;n++)
			for(int i=0;i<SectorNumber;i++)
				m_aCellArray[m][n].m_aSectorInCell[i].HSDSCHAvailablePowerCalculate();
}



//////////////////////////////////////////////////////////////////////////
//TITLE:      TxPower(实际发射功率计算函数)				        
//
//PARAMETERS:NULL              
//
//PURPOSE AND ALGORITHMS:
//            依次调用每一小区中每一扇区的实际发射功率计算函数
//                                               
//AUTHOR:     Li Jing
//
//CALLING FUNCTIONS:
//            CSector::TxPowerCalculte()
//            
//////////////////////////////////////////////////////////////////////////
void CServiceArea::TxPower()       
{
/*
    //by zl 20050425
	int m=2;
	int n=2;
*/
	//by HuangFan
	for(int m=0;m<MM;m++)
		for(int n=0;n<NN;n++)
			for(int i=0;i<SectorNumber;i++)
				m_aCellArray[m][n].m_aSectorInCell[i].SlotTxPowerCalculate();
}


/////////////////////////////////////////////////////////////////////////
//
//	TITLE:	扇区统计量输出函数
//
//	PURPOSE:	将服务环境中所有扇区的数据统计量输出到参数文件中
//
//	SAMPLE CALL:	pServiceArea->SectorStatics(void)
//			
//	CALLED BY FUNCTIONS:	CNetworkDrive::SimulationRun()
//			
//	CALLING FUNCTIONS:
//	
//	AUTHOR:	Chen Meiya 
//
//	DATE:	04/04(MM/YY)
//
//	MODIFICATIONS SINCE 04/04(MM/YY)
//
////////////////////////////////////////////////////////////////////////////
void CServiceArea::SectorStatics()
{
	//for compile 只是考察了某些扇区的统计量结果
	CStdioFile f;	
	char buf[50];

	/* 打开数据文件准备写*/
	if(!f.Open("Sector.txt",
		CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite))
	{
	#ifdef _DEBUG
		afxDump<<"Unable to open file"<<"\n";	//异常处理
	#endif
	}

	f.SeekToEnd();                             
		//使文件指针指向文件尾部,输出数据可以在文件尾部接着写 
    f.WriteString("扇区吞吐量统计\n");
    f.WriteString("扇区标号,本扇区的分组用户数,本扇区成功传输的bit数,扇区平均分组时延_s\n");

	//notice 在程序并未及时地统计分组用户数
	long lTotalGoodBit=0;
	
	//by HuangFan
	for(int m=0;m<MM;m++)
		for(int n=0;n<NN;n++)
			for(int i=0;i<SectorNumber;i++)
			{
			//获取扇区指针
/*
			//by zl 20050425
			int m=2;
			int n=2;
*/
			CSector* pSector =&(m_aCellArray[m][n].m_aSectorInCell[i]);

			lTotalGoodBit += pSector->GetGoodBitNum();
			//计算扇区的统计量
			//计算扇区吞吐量、平均分组时延、平均分组呼叫时延和分组呼叫吞吐量
			pSector->SectorStatisticsCalculate(m_fDropTime);

			//将统计量输出到参数文件中
			_gcvt(m+1,8,buf);
			f.WriteString(buf);
			f.WriteString("\t");
			_gcvt(n+1,8,buf);             //将浮点数转换成字符串
			f.WriteString(buf);
			f.WriteString("\t");
			_gcvt(i+1,8,buf);
			f.WriteString(buf);
			f.WriteString("\t");

			_gcvt(pSector->GetTotalDataMsNum(),8,buf);
			f.WriteString(buf);
			f.WriteString("\t");
        

			_gcvt(pSector->GetGoodBitNum(),8,buf);
			f.WriteString(buf);
			f.WriteString("\t");

			_gcvt(pSector->GetAveragePDelay(),8,buf);
			f.WriteString(buf);
			f.WriteString("\n");
			}


	 f.Close();
}

//////////////////////////////////////////////////////////////////////////
//TITLE:      SystemReset(系统复位函数)				        
//
//PARAMETERS:NULL         
//
//PURPOSE AND ALGORITHMS:
//            将每一个扇区的实际话音业务总功率以及分组数据功率都置零,然
//            后再调用m_MsManager.UpdateSectorVoicePower()更新各扇区话音功率 
//                                                           
//AUTHOR:     Li Jing
//
//CALLING FUNCTIONS:
//            CSector::ResetPower()
//
//CALLED FUNCTIONS:
//            CNetworkDrive::SlotRun()
//            
//////////////////////////////////////////////////////////////////////////
void CServiceArea::SystemReset()               
{
	for(int m=0;m<MM;m++)
		for(int n=0;n<NN;n++)
			for(int i=0;i<SectorNumber;i++)
        		m_aCellArray[m][n].m_aSectorInCell[i].ResetPower();
}



//////////////////////////////////////////////////////////////////////////
//TITLE:      OutputSectorPower(输出扇区功率函数)				        
//
//PARAMETERS:NULL         
//
//PURPOSE AND ALGORITHMS:
//            通过循环调用扇区类中的功率输出函数,来实现输出所有扇区的发射
//            功率的目的 
//                                                           
//AUTHOR:     Li Jing
//
//CALLING FUNCTIONS:
//            CSector::OutputPower()
//
//CALLED FUNCTIONS:
//            CNetworkDrive::SlotRun()
//            
//////////////////////////////////////////////////////////////////////////
//for compile

void CServiceArea::OutputSectorPower()
{
	CStdioFile f;
	char FileName[40];
    CString sp;
	sp="SectorPower.txt";
	strcpy(FileName,sp);

	if(!f.Open(FileName,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite))
	{
	        #ifdef _DEBUG
	    	        afxDump<<"Unable to open file"<<"\n";	//exception handling
	        #endif
	}
    f.SeekToEnd();
	//使文件指针指向文件尾部,输出数据可以在文件尾部接着写
	
	f.WriteString("\nthe sectors' power are:\n");
	f.Close();

	for(int m=0;m<MM;m++)
		for(int n=0;n<NN;n++)
			for(int i=0;i<SectorNumber;i++)
				m_aCellArray[m][n].m_aSectorInCell[i].OutputPower();
}



//////////////////////////////////////////////////////////////////////////
//TITLE:      CalculateAveragePower(计算扇区平均发射功率函数)				        
//
//PARAMETERS:NULL         
//
//PURPOSE AND ALGORITHMS:
//            就是简单的对75个扇区的发射功率进行累加,再取算术平均
//                                                           
//AUTHOR:     Li Jing
//
//CALLING FUNCTIONS:
//            CSector::GetTxPower()
//
//CALLED FUNCTIONS:
//            CNetworkDrive::SlotRun()
//            
//DATE:       20040929
//////////////////////////////////////////////////////////////////////////
void CServiceArea::CalculateAveragePower()
{
/*
	for(int i=0;i<SectorNumber;i++)
		m_fSectorAveragePower[m_iArrayPosition]+=
		m_aCellArray[2][2].m_aSectorInCell[i].GetTxPower();
	m_fSectorAveragePower[m_iArrayPosition]/=SectorNumber;
    m_iArrayPosition++;
*/

	//by HuangFan
	for(int m=0;m<MM;m++)
		for(int n=0;n<NN;n++)
			for(int i=0;i<SectorNumber;i++)
				m_fSectorAveragePower[m_iArrayPosition]+=
				m_aCellArray[m][n].m_aSectorInCell[i].GetTxPower();

	m_fSectorAveragePower[m_iArrayPosition]/=SectorNumber*MM*NN;
    m_iArrayPosition++;

 
   
}


⌨️ 快捷键说明

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