?? cvoicems.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 + -