📄 cmsmanager.cpp
字号:
{
m_fSpendingOfSHO += ( k+1 )*m_fScaleOfActiveSetSize[k];
}
--m_fSpendingOfSHO; //统计软切换开销
//软切换率的统计 add by slj 20041020
m_lTotalSlotOfSHO = m_lTotalSlotOfActiveSetSize - m_lSlotOfActiveSetSize[0];
m_fScaleOfSHO = float( m_lTotalSlotOfSHO )/float( m_lTotalSlotOfActiveSetSize );
//软切换下误块率等相关统计
m_fBLERInSHO = float( m_lTotalFailedBLNumInSHO )/float( m_lTotalBLNumInSHO );
m_fMeanPowerInSHO = (float)( m_fTotalMsPowerInSHO /double( m_lTotalMsSlotInSHO));
//open the file to write the statistics
if(!f.Open(m_sVoiceFile,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite))
{
#ifdef _DEBUG
afxDump<<"Unable to open file"<<"\n"; //exception handling
#endif
}
f.SeekToEnd();
//使文件指针指向文件尾部,输出数据可以在文件尾部接着写
_gcvt(m_iVoiceNumPerSector,8,buf);
f.WriteString(buf);
f.WriteString(" users:\n");
f.WriteString("此Drop总的话音用户数:");
_gcvt(m_iVoiceUserOfCurrentDrop,8,buf);
f.WriteString(buf);
f.WriteString("\n");
f.WriteString("话音用户阻塞率:");
_gcvt(m_fBlockRatioOfVoice,8,buf);
f.WriteString(buf);
f.WriteString("\n");
f.WriteString("话音用户中断率:");
_gcvt(m_fOutageRatioOfVoice,8,buf);
f.WriteString(buf);
f.WriteString("\n");
f.WriteString("话音用户掉话率:");
_gcvt(m_fDropRatioOfVoice,8,buf);
f.WriteString(buf);
f.WriteString("\n");
f.WriteString("话音用户满意率:");
_gcvt(m_fSatisfiedRadioOfVoice,8,buf);
f.WriteString(buf);
f.WriteString("\n");
f.WriteString("话音用户软切换开销:");
_gcvt(m_fSpendingOfSHO,8,buf);
f.WriteString(buf);
f.WriteString("\n");
f.WriteString("话音用户软切换率:");
_gcvt(m_fScaleOfSHO,8,buf);
f.WriteString(buf);
f.WriteString("\n");
f.WriteString("话音用户总的误块率:");
_gcvt(m_fMeanVoiceBLER,8,buf);
f.WriteString(buf);
f.WriteString("\n");
f.WriteString("话音用户软切换下误块率:");
_gcvt(m_fBLERInSHO,8,buf);
f.WriteString(buf);
f.WriteString("\n");
f.WriteString("话音用户软切换下平均功率:");
_gcvt(m_fMeanPowerInSHO,8,buf);
f.WriteString(buf);
f.WriteString("\n");
f.WriteString("\n话音用户软切换下总传输块数:");
_gcvt(m_lTotalBLNumInSHO,8,buf);
f.WriteString(buf);
f.WriteString("\n");
f.WriteString("话音用户软切换下传错的块数:");
_gcvt(m_lTotalFailedBLNumInSHO,8,buf);
f.WriteString(buf);
f.WriteString("\n");
f.WriteString("话音用户软切换下总时隙:");
_gcvt(m_lTotalMsSlotInSHO,8,buf);
f.WriteString(buf);
f.WriteString("\n");
f.Close();
}
//////////////////////////////////////////////////////////////////////////
//TITLE: UpdateSectorVoicePower(更新各扇区话音功率函数)
//
//PARAMETERS:NULL
//
//PURPOSE AND ALGORITHMS:
// 通过循环调用话音用户链表中移动台的更新激活集功率函数,最终将
// 更新所有扇区的话音功率
//
//AUTHOR: Li Jing
//
//CALLING FUNCTIONS:
// CMobile::UpdateActiveSetPower()
//////////////////////////////////////////////////////////////////////////
void CMsManager::UpdateSectorVoicePower()
{
POSITION pos;
CSector* pSector=NULL;
CVoiceMs* pVoiceMs=NULL;
pos=m_VoiceList.GetHeadPosition();
while(pos!=NULL) //循环话音链表中的每个话音用户
{
pVoiceMs=m_VoiceList.GetNext(pos);
pVoiceMs->UpdateActiveSetPower();
//将每一个话音用户激活集中各扇区的发射功率累加到相应扇区中
}
}
//////////////////////////////////////////////////////////////////////////
//TITLE: UpdateSetPower(更新移动台的监测集函数)
//
//PARAMETERS:NULL
//
//PURPOSE AND ALGORITHMS:
// 每个窗口结束时,计算这个窗口时间内的误块率,若是高于15%,则
// 为outage,若是高于50%,则为drop,并进行重撒。
//
//AUTHOR: Li Jing
//
//CALLING FUNCTIONS:
// CMobile::UpdateMonitorSet()
//////////////////////////////////////////////////////////////////////////
void CMsManager::UpdateSetPower()
{
POSITION pos;
//updata the voice users' monitorset
CVoiceMs* pVoiceMs=NULL;
pos=m_VoiceList.GetHeadPosition();
while(pos!=NULL)
{
pVoiceMs=m_VoiceList.GetNext(pos);
pVoiceMs->UpdateMonitorSet();
}
//updata the http users' monitorset
CHttpDataMs* pHttpDataMs=NULL;
pos=m_HttpDataList.GetHeadPosition();
while(pos!=NULL)
{
pHttpDataMs=m_HttpDataList.GetNext(pos);
pHttpDataMs->UpdateMonitorSet();
}
//updata the ftp users' monitorset
CFtpDataMs* pFtpDataMs=NULL;
pos=m_FtpDataList.GetHeadPosition();
while(pos!=NULL)
{
pFtpDataMs=m_FtpDataList.GetNext(pos);
pFtpDataMs->UpdateMonitorSet();
}
//updata the Video users' monitorset
CVideoDataMs* pVideoDataMs=NULL;
pos=m_VideoDataList.GetHeadPosition();
while(pos!=NULL)
{
pVideoDataMs=m_VideoDataList.GetNext(pos);
pVideoDataMs->UpdateMonitorSet();
}
}
//////////////////////////////////////////////////////////////////////////
//TITLE: Coverage(覆盖性能评估函数)
//
//PARAMETERS:NULL
//
//PURPOSE AND ALGORITHMS:
// 输出中间三个扇区的覆盖情况
//
//AUTHOR: Li Jing(20040820)
//
//CALLING FUNCTIONS:
//
//
//CALLED FUNCTIONS:
// CNetworkDrive::SlotRun()
//
//////////////////////////////////////////////////////////////////////////
void CMsManager::Coverage()
{
CStdioFile f;
char FileName[40];
char buf[50];
CString sp;
sp="Coverage.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 coverage performance of slot ");
_itoa(m_iSlotCurrentNum,buf,10);
f.WriteString(buf);
f.WriteString("\n移动台ID 距最佳扇区距离(Km) 最佳扇区导频SNR(dB) Ior/Ioc(dB) \n");
int iMsID;
float fDistance;
float fBestPilotSNR;
float fIor2IocindB;
SECTORID_TYPE stBestSector;
CELLID_TYPE stCell;
POSITION pos;
pos=m_VoiceList.GetHeadPosition();
CVoiceMs* pVoiceMs=NULL;
while(pos!=NULL)
{
pVoiceMs=m_VoiceList.GetNext(pos);
stBestSector=pVoiceMs->GetBestSector();
stCell=stBestSector.stCellID;
if(stCell.m==3&&stCell.n==3)
{
iMsID=pVoiceMs->GetMsID();
fDistance=pVoiceMs->GetMsBsDistance();
fBestPilotSNR=pVoiceMs->GetBestPilotSNR();
fIor2IocindB=pVoiceMs->GetIor2Ioc();
fIor2IocindB=(float)(10*log10(fIor2IocindB));
_gcvt(iMsID,8,buf);
f.WriteString(buf);
f.WriteString("\t");
_gcvt(fDistance,8,buf);
f.WriteString(buf);
f.WriteString("\t");
_gcvt(fBestPilotSNR,8,buf);
f.WriteString(buf);
f.WriteString("\t");
_gcvt(fIor2IocindB,8,buf);
f.WriteString(buf);
f.WriteString("\n");
}
}
}
////数据用户输出统计部分 by陈美娅
//////////////////////////////////////////////////////////////////////////
//
// TITLE: 数据移动台统计量计算函数
//
// PURPOSE: 循环处理数据移动台得到计算相应统计量
//
// SAMPLE CALL: pMsManager->DataMsStaticsCumulate()
//
// CALLED BY FUNCTIONS:CNetWorkDrive::SimulationRun()
//
// CALLING FUNCTIONS:
//
//
// AUTHOR: Chen Meiya
//
// DATE: 04/04(MM/YY)
//
////////////////////////////////////////////////////////////////////////////
void CMsManager::DataMsStatisticsCalculate()
{
POSITION pos;
CDataMs *pDataMs;
pos = m_HttpDataList.GetHeadPosition();
while( pos != NULL )
{
pDataMs = m_HttpDataList.GetNext(pos);
//计算距离
pDataMs->ClosestSectorDistance();
//计算业务相关统计量
pDataMs->SerivceStatisticsCalculate();
}
pos = m_FtpDataList.GetHeadPosition();
while( pos != NULL )
{
pDataMs = m_FtpDataList.GetNext(pos);
//计算距离
pDataMs->ClosestSectorDistance();
//计算业务相关统计量
pDataMs->SerivceStatisticsCalculate();
}
//20060116
pos = m_VideoDataList.GetHeadPosition();
while( pos != NULL )
{
pDataMs = m_VideoDataList.GetNext(pos);
//计算距离
pDataMs->ClosestSectorDistance();
//计算业务相关统计量
pDataMs->SerivceStatisticsCalculate();
}
}
//////////////////////////////////////////////////////////////////////////
//
// TITLE: 扇区统计变量累加函数
//
// PURPOSE: 累加移动台每个TTI的统计量到对应服务扇区中
//
// SAMPLE CALL: pMsManager->SectorStaticsCumulate()
//
// CALLED BY FUNCTIONS:CNetWorkDrive::SimulationRun()
//
// CALLING FUNCTIONS:
//
//
// AUTHOR: Chen Meiya
//
// DATE: 04/04(MM/YY)
//
////////////////////////////////////////////////////////////////////////////
void CMsManager::SectorStaticsCumulate()
{
POSITION pos;
CDataMs *pDataMs;
pos = m_HttpDataList.GetHeadPosition();
while( pos != NULL )
{
pDataMs = m_HttpDataList.GetNext(pos);
if( pDataMs->GetUserType() == DCHData )
{
if( pDataMs->IsAdmitted() == true && pDataMs->IsTTIEnd() == true )
pDataMs->SectorStatistics();
}
}
pos = m_FtpDataList.GetHeadPosition();
while( pos != NULL )
{
pDataMs = m_FtpDataList.GetNext(pos);
if( pDataMs->GetUserType() == DCHData )
{
if( pDataMs->IsAdmitted() == true && pDataMs->IsTTIEnd() == true )
pDataMs->SectorStatistics();
}
// else if( pDataMs->GetUserType() == HSDSCHData )
// {
//if() //只对调度上的用户处理
// pDataMs->SectorStatistics();
// }
}
}
//////////////////////////////////////////////////////////////////////////
//
// TITLE: 比特数和分组数累加函数函数
//
// PURPOSE: 累加所有移动台成功传输的比特数和分组数
//
// SAMPLE CALL: pMsManager->DataBitAndPacketCumulate()
//
// CALLED BY FUNCTIONS:CNetWorkDrive::SimulationRun()
//
// CALLING FUNCTIONS:
//
//
// AUTHOR: Chen Meiya
//
// DATE: 04/04(MM/YY)
//
////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -