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

📄 cvoicems.h

📁 这是cdma2000的一个分组调度算法实例
💻 H
字号:
/////////////////////////////////////////////////////////////////////////////////////////////
//CVoiceMs.h
//by Cai QiMing
/////////////////////////////////////////////////////////////////////////////////////////////

#if !defined(_CVOICEMS_H__INCLUDED_)
#define _CVOICEMS_H__INCLUDED_

#include "CMobile.h"
#include "Markov.h"
#include "stdlib.h"
#include "bitset"
//#include "Afxtempl.h"
class CVoiceMs:public CMobile
{
//----------属性-----------------------------------------------------------------------------
private:
	int	  m_iActiveSetSize;	                //当前激活集大小
	int	  m_iServiceLength;    	            //话音业务时长,以时隙为单位
	int   m_iServiceTime;                   //话音服务时长
	int	  m_iSHOMsgNum;	                    //软切换消息队列长度
	int   m_iDropTimer;                     //掉话计时器
	int   m_iUnsatisfiedTimer;              //不满意计时器
	float   m_fVoiceActiveFactor;	        //话音激活因子
	float   m_fC2I;	                        //当前时隙的C/I
	float   m_fMeanC2I;                     //平均C/I(帧内累加,帧结束时才是平均值)
	float   m_fFwdCurrentActiveFactor;      //当前slot前向话音激活因子
	float   m_fFwdLastActiveFactor;         //上一slot的前向话音激活因子
//	bool   m_bIsServiceActive;           	//当前时隙的话音激活标志,TRUE激活
	bool   m_bIsC2IEnough;	                //C/I是否超过门限值
	int   m_iFwdFrameRate;                  //当前前向帧速率

	//...... added by cqm, Apr.9 ......//
	float* m_pfC2IIndex;					//C/I索引
	float* m_pfFER;							//FER表指针
	float  m_fFER;							//当前slot的FER
	bool   m_bIsFrameCorrect;				//当前帧是否正确
	int    m_iFERIndicator;					//坏帧指示器
	int    m_iBadFrameCounter;
	float  m_fC2ITarget;
	float  m_fMeanC2IofLastFrame;                  
	std::bitset<WindowSize> bsFrameErrorFlagSet; //定义对象bsFrameErrorFlagSet,它的类型是bitset
	size_t uiCountErrorFrame;			    //记录在前20帧(窗口)里错帧的个数

	//.................................//

	CMarkovVoice  m_cFwdMarkovState;        //前向话音激活Markov状态

    CTypedPtrList<CPtrList, ACTIVESECTOR_TYPE*>	  m_ActiveSetList;	                    //激活集信息链表
    CTypedPtrList<CPtrList, SOFTHANDOFFMESSAGE_TYPE*>	m_SoftHandoffMessageList;   	//软切换消息队列,模拟软切换事件的时延
	
//----------操作-----------------------------------------------------------------------------
public:
	CVoiceMs();
    ~CVoiceMs();

	bool   m_bIsSHOOut;

	void   VoiceInitialization();	//初始化函数,初始化m_iServiceLength、m_bIsServiceActive,并调用最佳扇区选择函数,计算出最佳扇区,调用激活集初始化函数,设定激活集,随机初始化激活集的业务信道功率。
	void   InitActiveSet();      	//激活集初始化函数,根据最佳基站的导频信噪比,扫描候选集中其他扇区的导频信噪比,确定激活集扇区、业务信道功率和信噪比。
	void   ObtainC2I();          	//C/I计算函数,根据激活集情况,计算用户最终的C/I。
	void   SHOMsgGenerator();	    //软切换消息生成函数,根据候选集更新情况,生成加入、去掉或替换消息(替换体现为去掉和加入各一个消息)
	int    SHOMsgProcess();         //消息队列处理函数,完成每个时隙内消息等待时间递减的功能,并返回到时消息的数量。
	void   ChangeActiveSet();	    //激活集变更函数,根据消息处理函数的返回值,读出相应的软切换消息,根据该消息完成相应的操作,去掉:直接从链表中删除,加入:加入新的激活信息结构体,并初始化各个变量。
	void   UpdateActiveSet();	    //激活集更新函数,根据候选集更新的情况,计算业务信道的信噪比。在每个时隙中均需调用,激活集初始化和变更之后也需调用。
	void   PowerControl();	        //功率控制函数,根据计算得到的C/I与功率控制目标C/I的关系,调整激活集内各个扇区的发射功率。需要考虑功控误差。
	void   SetVoiceActivity();   	//话音激活特性设置函数,根据话音激活因子,设置话音激活标志。
	bool   IsServiceOver();	        //服务时长到时的判断函数,判断服务时长是否到时,到时返回TRUE。若到时则可以在程序流程中调用初始化函数,重新初始化。也可以在该函数中直接调用,重新初始化。
	void   UpdateActiveSetPower();   //得到激活集的总功率
	void   Clean();                  //通话结束后清除链表
	//...... added by cqm, Apr.9 ......//
	void    FERPrediction();		//FER预测函数,根据接收到的Eb/Nt值,查短期FER vs Eb/Nt表得到当前用户的FER
	void    FrameQualityDecision();	//帧质量判断函数,判断当前slot话音帧是否正确
	void    GOSDecision();			//服务质量判断函数,如果短期FER大于15%,m_iFERIndicator加一
	int     GetFERIndicator();		//得到服务质量指示器的值
	void    SetFERIndicator(int);
//	void    IsUserOutage();			//判断用户是否中断函数,在用户通话结束或drop结束时由CMsManager调用
	//.................................//


	int   GetActiveSetSize();             //得到当前激活集的大小
	void  SetActiveSetSize(int);          //设置当前激活集的大小
	int   GetServiceLength();             //得到话音业务时长,以时隙为单位
	void  SetServiceLength(int);          //设置话音业务时长,以时隙为单位
	int   GetServiceTime();               //得到话音服务时长
	void  SetServiceTime(int);            //设置话音服务时长    
    int   GetSHOMsgNum();                 //得到软切换消息队列长度
	void  SetSHOMsgNum(int);              //设置软切换消息队列长度
	int   GetDropTimer();                 //得到掉化计时器
	void  SetDropTimer(int);              //设置掉化计时器
	int   GetUnsatisfiedTimer();          //得到不满意计时器
	void  SetUnsatisfiedTimer(int);       //设置不满意计时器
	float   GetVoiceActiveFactor();       //得到话音激活因子
    void    SetVoiceActiveFactor(float);  //设置话音激活因子
	float   GetC2I();                     //得到当前时隙的C/I
	void    SetC2I(float);                //设置当前时隙的C/I
//	bool   IsServiceActive();             //得到当前时隙的话音激活标志,TRUE激活
	bool   IsC2IEnough();                 //当前C/I是否超过门限值,TRUE为超过
};
#endif

⌨️ 快捷键说明

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