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

📄 cservicearea.cpp

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

//////////////////////////////////////////////////////////////////////////
//TITLE:      AvePowerOutput(输出扇区的平均发射功率)				        
//
//PARAMETERS:NULL         
//
//PURPOSE AND ALGORITHMS:
//            依照时间顺序输出扇区的平均发射功率
//                                                           
//AUTHOR:     Li Jing
//
//CALLING FUNCTIONS:
//            NULL
//
//CALLED FUNCTIONS:
//            CNetworkDrive::SimulationRun()
//            
//DATE:       20040929
//////////////////////////////////////////////////////////////////////////
void CServiceArea::AvePowerOutput()
{
	float fAvePower=0.0;

	CStdioFile f;
	char buf[50];

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

	for(int i=0;i<m_iArrayPosition;i++)
	{
		_gcvt(m_fSectorAveragePower[i],8,buf);
	    f.WriteString(buf);
        f.WriteString("	");
	}

	f.Close();

//by zl  20050425
//	int j=(int)(INITIALSLOT/100);
	for(i=0;i<m_iArrayPosition;i++)
	    fAvePower+=m_fSectorAveragePower[i];

	fAvePower/=(m_iArrayPosition);

	if(!f.Open("voice.txt",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite))
	{
	        #ifdef _DEBUG
	    	        afxDump<<"Unable to open file"<<"\n";	//exception handling
	        #endif
	}
    f.SeekToEnd();

	f.WriteString("扇区平均发射功率:");
	_gcvt(fAvePower,8,buf);
	f.WriteString(buf);
	f.WriteString("\n");

	f.WriteString("--------------------------------------------\n");

	f.Close();
}



//////////////////////////////////////////////////////////////////////////
//TITLE:      Translation(阴影小区转换函数)
//
//PARAMETERS:小区标号         
//
//PURPOSE AND ALGORITHMS:
//            具体算法见《关于服务区环境模型的一些初步设想》 
//                                                           
//AUTHOR:     Li Jing
//
//CALLING FUNCTIONS:
//            NULL
//            
//////////////////////////////////////////////////////////////////////////
CELLID_TYPE CServiceArea::Translation(CELLID_TYPE cellid)
{
    if(cellid.m<=0)
	{
		cellid.m+=MM;
	}
	if(cellid.m>=MM+1)
	{
		cellid.m-=MM;
	}
	if(cellid.n<=0)
	{
		cellid.n+=NN;
	}
	if(cellid.n>=NN+1)
	{
		cellid.n-=NN;
	}
    return cellid;
}



//////////////////////////////////////////////////////////////////////////
//			           以下为get(), set()接口函数					    //
//////////////////////////////////////////////////////////////////////////
SECTORID_TYPE CServiceArea::GetCurrentSector()    	       //返回当前扇区号
{
	return m_stCurrentSector;
}

void CServiceArea::SetSiteDistance(float f_inputDistance)    //设置基站间隔
{
	m_fSiteDistance=f_inputDistance;
}
	
float  CServiceArea::GetSiteDistance()                       //返回基站间隔
{
	return m_fSiteDistance;
}
	
void  CServiceArea::SetOrthogonalFactor(float i_inputOrthogonalFactor)    //设置正交因子
{
    m_fOrthogonalFactor=i_inputOrthogonalFactor;
}
	
float CServiceArea::GetOrthogonalFactor()                   //返回正交因子
{
	return m_fOrthogonalFactor;
}
 
void CServiceArea::SectorPowerToFile(int iSlotNum)
{
	//for compile
	CStdioFile f;
	char  buf[50];
	if(!f.Open("The sector power file.txt",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite))
	{
		#ifdef _DEBUG
			afxDump<<"Unable to open file"<<"\n";	//异常处理
		#endif
	}
	f.SeekToEnd();
	f.WriteString("当前时隙为:");
	_itoa(iSlotNum,buf,10);
	f.WriteString(buf);
	f.WriteString("\n");
	f.WriteString("扇区编号:	扇区发射功率:	扇区DCH信道功率:	扇区DPCCH信道功率:	扇区DSCH信道功率:\n");

	for(int m = 0; m<MM;m++)
	{
		for( int n = 0; n<NN;n++)
		{
			for(int i=0;i<SectorNumber;i++)
			{
			//获取扇区指针
			CSector* pSector =&(m_aCellArray[m][n].m_aSectorInCell[i]);

			//将发射功率参量输出到参数文件中
			f.WriteString("(");
			_gcvt(m+1,8,buf);
			f.WriteString(buf);
			f.WriteString(",");
			_gcvt(n+1,8,buf);             
			f.WriteString(buf);
			f.WriteString(",");
			_gcvt(i+1,8,buf);
			f.WriteString(buf);
			f.WriteString(")\t\t");
             
			_gcvt(pSector->GetTxPower(),8,buf);
			f.WriteString(buf);
			f.WriteString("\t");
        

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


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



/////////////////////////////////////////////////////////////////////////
//
//	TITLE:	HSDSCHProcess() 
//
//	PURPOSE:	HS-DSCH用户处理过程
//			
//	CALLED BY FUNCTIONS:	
//			
//	CALLING FUNCTIONS:
//	
//	AUTHOR:  zhanglin 
//
//	DATE:	05/04(MM/YY)
//
//	MODIFICATIONS SINCE 05/04(MM/YY)
//
////////////////////////////////////////////////////////////////////////////
void CServiceArea::HSDSCHProcess() 
{
	CSector *pCurSector = NULL;
	CDataMs *pCurDataMs=NULL;
    NCHANNELSAW_TYPE* stSAW=NULL;
 
	
	////循环所有扇区    revised by HuangFan
	for(int m=0;m<MM;m++)
		for(int n=0;n<NN;n++)
			for(int iSectorNum = 0; iSectorNum < SectorNumber; ++iSectorNum	)
			{
				////获取当前扇区最高优先级的HSDSCH用户
				pCurSector = &m_aCellArray[m][n].m_aSectorInCell[iSectorNum]; //20050425
				pCurDataMs = pCurSector->GetHighestPriorityDataMs();
              
		      if(pCurDataMs!=NULL)
			  {
				if( pCurDataMs->IsTransmitNow()==false)
				{
					// 没有传输
					pCurDataMs->NewTTIGenerate();   //产生新的TTI
					pCurSector->SetIsExistHighestPriority(true);  //设置扇区存在最高优先级
					
                    
					//如果采用的调度算法是最大C/I
                    if(pCurDataMs->m_fScheduleAlgorithm==MAXC2I)
					{	
					   pCurDataMs->SAWProcess();  //处理子信道
					   stSAW=pCurDataMs->GetSAWChannel(pCurDataMs->GetCurrChannelIndex());
					   //该子信道上传输的是新数据,则进行速率预测
					   if(stSAW->bNewDataIndicator == true)
					   {
						   pCurDataMs->HSRatePrediction();
						   stSAW->pstRate2CI=pCurDataMs->GetHSDataRate();
					   }
					}
					 
					  //如果采用的调度算法轮询
				     else if(pCurDataMs->m_fScheduleAlgorithm==RANDOMR)
					 {
					   pCurDataMs->SAWProcess();  //处理子信道
					   stSAW=pCurDataMs->GetSAWChannel(pCurDataMs->GetCurrChannelIndex());
					   if(stSAW->bNewDataIndicator == true)
					   {
						   pCurDataMs->HSRatePrediction();
						   stSAW->pstRate2CI=pCurDataMs->GetHSDataRate();
					   }
					 }
					   
                    else if(pCurDataMs->m_fScheduleAlgorithm==PROPFAIRNESS)
					{
					   stSAW=pCurDataMs->GetSAWChannel(pCurDataMs->GetCurrChannelIndex());
					}  
					
					else if(pCurDataMs->m_fScheduleAlgorithm==GradePF)   //20051205
					{
					   stSAW=pCurDataMs->GetSAWChannel(pCurDataMs->GetCurrChannelIndex());
					} 
					else if(pCurDataMs->m_fScheduleAlgorithm==AdaptiveGPF)   //20051219
					{
					   stSAW=pCurDataMs->GetSAWChannel(pCurDataMs->GetCurrChannelIndex());
					} 
					else if(pCurDataMs->m_fScheduleAlgorithm==Utility)   //20060111
					{
					   stSAW=pCurDataMs->GetSAWChannel(pCurDataMs->GetCurrChannelIndex());
					} 
					else if(pCurDataMs->m_fScheduleAlgorithm==M_LWDF)//20060405 by huangfan
					{
					   stSAW=pCurDataMs->GetSAWChannel(pCurDataMs->GetCurrChannelIndex());
					} 
					else if(pCurDataMs->m_fScheduleAlgorithm==EXP)   //20060405 by huangfan
					{
					   stSAW=pCurDataMs->GetSAWChannel(pCurDataMs->GetCurrChannelIndex());
					} 
				}
				else
				{					
					stSAW=pCurDataMs->GetSAWChannel(pCurDataMs->GetCurrChannelIndex());                   
					/*  20051223
					if(stSAW->pstRate2CI->fDataRate!=0)
					{
					    //正在传输,计算每个时隙的C/I
					    pCurDataMs->C2ICalculate();						
                        pCurDataMs->m_fHSDSCHSlotC2IindB[HSDSCHTTISLOTNUM-pCurDataMs->GetSlotNumRemained()]=pCurDataMs->GetCurrentC2IindB();
					    //stSAW=pCurDataMs->GetSAWChannel(pCurDataMs->GetCurrChannelIndex());
					}*/
				}
                
				pCurDataMs->TTITransmit();   //传输数据
				if( pCurDataMs->IsTransmitNow()==true)//wlm 060223 准备下一时隙传输
				{
					TTINumInitialization();
				}
								
                //  if(pCurDataMs->m_fScheduleAlgorithm==PROPFAIRNESS || pCurDataMs->m_fScheduleAlgorithm == GradePF || pCurDataMs->m_fScheduleAlgorithm == Utility)
				pCurDataMs->m_fAverageRate+=(float)( stSAW->pstRate2CI->fDataRate/ fConstTc);       

				if(	pCurDataMs->IsTTIEnd() == true	)
				{
					//传输结束
				    pCurSector->SetPriorityFactor(-100000);              // 设该扇区的最高优先级置0
					pCurSector->SetHighestPriorityDataMs(NULL);    // 清除扇区最高优先级的用户
					pCurSector->SetIsExistHighestPriority(false);  //扇区不存在最高优先级的用户

					float fChannelC2IindB;
					
					if(stSAW->pstRate2CI->fDataRate!=0)
					{
					   //chase Combining
					   //pCurDataMs->TTIMeanC2ICalculate();  20051223
					   float fTTIMeanC2IindB=pCurDataMs->GetTTIMeanC2IindB();
					   float fTTIMeanC2I=(float)pow(10,(fTTIMeanC2IindB/10));
					   stSAW->fChannelC2I+=fTTIMeanC2I;
					   fChannelC2IindB=float(10*log10(stSAW->fChannelC2I));
					}
					else 
					{fChannelC2IindB=-20;}

					pCurDataMs->HSFERPredition(fChannelC2IindB);  //误码率预测
					
					stSAW->iFeedbackTimer=1;
                   
					pCurDataMs->HSTTIStatics();          //TTI统计
					pCurDataMs->SectorStatistics();      //移动台和扇区的统计        
					
					pCurDataMs->SetCurrChannelIndex((int)-1);  //清除当前的子信道下标
//				    if(stSAW->bNewDataIndicator==true)
//					  pCurDataMs->ThresholdAdjust();       //门限调整
                    //pCurDataMs->ThresholdOrderAdjust();  //门限顺序调整
					//pCurDataMs->IntervalStatistics();   //区间统计
                    
				}
				else
				{
					//传输没有结束,没有操作
				}
			}
		
	}
	
}

 void   CServiceArea::TTINumInitialization()//wlm  置0
{
		m_iTTINum=0;
}
void    CServiceArea::TTINumAddOne()//wlm  步进
{
		m_iTTINum++;
}
int    CServiceArea::GetTTINum()//wlm  返回
{
		return m_iTTINum;
}


				

⌨️ 快捷键说明

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