📄 cservicearea.cpp
字号:
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 + -