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

📄 phy-umts.h

📁 对ns2软件进行UMTS扩展
💻 H
字号:
/* -*-	Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- *//* By Pablo Martin and Paula Ballester, * Strathclyde University, Glasgow. * June, 2003.*//* Copyright (c) 2003 Strathclyde University of Glasgow, Scotland. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code and binary code must contain * the above copyright notice, this list of conditions and the following * disclaimer. * * 2. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed at Strathclyde University of * Glasgow, Scotland. * * 3. The name of the University may not be used to endorse or promote * products derived from this software without specific prior written * permission. * STRATHCLYDE UNIVERSITY OF GLASGOW, MAKES NO REPRESENTATIONS * CONCERNING EITHER THE MERCHANTABILITY OF THIS SOFTWARE OR THE * SUITABILITY OF THIS SOFTWARE FOR ANY PARTICULAR PURPOSE.  The software * is provided "as is" without express or implied warranty of any kind.*/#ifndef ns_phy_umts_h#define ns_phy_umts_h#include "marshall.h"#include <delay.h>#include <connector.h>#include <packet.h>#include <random.h>#include <arp.h>#include <mac.h>#include <phy.h>#include <phy-timers.h>#include "mac-umts.h"#define UMTS_FrameTime		0.010			// 10 ms#define UMTS_TBLength		2560			// 2560 chips#define UMTS_SlotTime		0.0006666667	// 0.667 ms#define CHIP_RATE			3840000		// 3.84 Mcps#define Pn				6.1e-14		// Noise Power (Thermal and Equipment)								// Nrf*ChipRate								// Nrf = k*T + NF (NF aprox 6dB)#define BROADCAST	-1#define PHY_BROADCAST -2#define MAX_NUM_FREQ 12  //maximum number of frequencies permissiblein the cell#define MAX_NUM_UE 50    //maximum number of UE's permissible in the cell#define MAX_NUM_BS 10    //maximum number of NodeB's permissible in the simulation#define MAX_NUM_NODES (MAX_NUM_UE * MAX_NUM_BS) // maximum number of Nodes permissible in the simulation#define SLOTS_PER_FRAME 15 // number of slots in evry WCDMA frame#define MAX_NUM_DPDCH 6  // maximum number of DPDCH#define MAX_NUM_SCRAM 16  // maximum number of scrambling codes in a group/cell#define MAX_NUM_RACH 16  // maximum number of RACH in a group/cell#define MAX_NUM_SIG 16  // maximum number of signatures#define MAX_NUM_PREAMBLE 8 // maximum number of preamble tx.#define MAX_NUM_FLOWS 5 // maximum number of flows.#define MAX_NUM_BYTES_PER_SLOT 80 // maximum number of bytes per slot.#define MAX_NUM_BYTES_PER_SLOT_DL 160 // maximum number of bytes per slot in dl.#define PHY_HDR_SZ 2 // physical header size in bytes.// To indicate whether the radio's ON or OFF#define ON                       1#define OFF                      0struct dpcch_contr {	int n_dpdch_;  		// number of DPDCHs multiplexed with DPCCH  	double dpdch_rate_; 	// rate tx in DPDCHs};enum Chan_Coding {	TURBO,	// Turbo Coding 1/3 rate	CONV_HALF,	// Convolutional Coding 1/2 rate	CONV_THIRD	// Convolutional Coding 1/3 rate};struct hdr_phy {	// physical addressing	int sa_;		// source address	int da_;		// destination address	double data_size_;	// user data size	int first_access_;	// for initial access to a cell	// codification information	Chan_Coding c_coding_;	// channel coding	int scrambling_c_;	// scrambling code	int sf_;			// spreading factor	int k_;			// k for the channelisation code	int f_;			// freq	// information in the packet	double rx_power_;		// tx power	int signature_;		// signature	int p_scrambling_c_;	// primary scrambling code (only SCH)	int pi_;			// paging indicator	int used_rach_;		// rach used	int ue_sf_;			// SF given to the UE	int freq_;			// freq given to the UE	int bofsec_;		// begin of sequence	int seqno_;			// sequence number	int eofsec_;		// end of sequence	int paging_group_;		// for paging procedure	// Used in the Handover Procedure to inform the new NodeB about the current aplications	int* flows_[MAX_NUM_FLOWS][3];		// for broadcast		int free_resources_[MAX_NUM_SCRAM][MAX_NUM_SIG + 1];   // array with the available ul scrambling codes									// and signatures//		int used_dl_scramb_[MAX_NUM_SCRAM - 1];   // array with the used dl secondary scrambling codes		int rach_[MAX_NUM_RACH];	   // available RACH	// for DPCCH	dpcch_contr dpcch_control_;	// control information in DPCCH	// for DPDCH	PacketQueue* dpdch_control_; // control information in DPDCH;	int n_dpdch_;		// number id of DPDCH	inline int& sa() { return sa_; }	inline int& da() { return da_; }	inline double& size() { return data_size_; }	inline double& rx_power() { return rx_power_; }	inline int& scrambling_c() { return scrambling_c_; }	inline int& p_scrambling_c() { return p_scrambling_c_; }	inline int& sf() { return sf_; }	inline int& f() { return f_; }	inline int& freq() { return freq_; }	inline int& ue_sf() { return ue_sf_; }	inline int& k() { return k_; }	inline int& signature() { return signature_; }	inline int& pi() { return pi_; }	inline int& used_rach() { return used_rach_; }	inline dpcch_contr& dpcch_control() { return dpcch_control_; }	inline Chan_Coding& c_coding() { return c_coding_; }	// Header access methods	static int offset_;	inline static int& offset() { return offset_; }	inline static hdr_phy* access(const Packet* p) {		return (hdr_phy*) p->access(offset_);	}};/* ======================================================================   Frame Formats   ====================================================================== */struct wcdma_control {	int p_scrambling_; // primary scrambling code  	int signature_; // signature used in the last RACH access	int scram_tx_;  // scrambling code used in the las RACH access	int rach_tx_;	// rach used	int free_res_[MAX_NUM_SCRAM][MAX_NUM_SIG + 1];  // array with the available ul scrambling codes (0 available)							// and signatures//	int dl_scramb_[MAX_NUM_SCRAM-1];  // array with the used dl secondary scrambling codes	int free_rach_[MAX_NUM_RACH];	// available RACHs};// flows and their SF and Ratesstruct flow_rate {	int flow_id_; 	// flow id	int sf_;	// Spreading Factor	double rate_;	// Rate};// definition of bler Table ///////////////////////////////////class BlerTable {public:	BlerTable();	double getbler(double ebno);	static double table[2][8];	// 1 row: Eb/No						// 2 row: BLER};////////////////////////////////////* Umts Phy layer. */class PhyUmts : public LinkDelay {  friend class PreambleTimer;  friend class UpSlotUmtsTimer;  friend class RachUpSlotUmtsTimer;  friend class TxPktUmtsTimer;  friend class RxPktUmtsTimer;  friend class BlerTimer;  friend class CellTimer;public:  PhyUmts();  void recv(Packet *p, Handler *h);  // Timer handlers  void PreambleHandler (void);  void upslotHandler(Event *e);  void rachupslotHandler(Event *e);  void recvHandler(Event *e);  void sendHandler(Event *e);  void cellHandler(void);  void blerHandler(Event *e);  int ue_address_;  int nodeb_address_;  nsaddr_t ip_nodeb_;  nsaddr_t ip_ue_;  int ue_state_; 		// UE state, 0 OFF, 1 waiting to turn on, 2 ON  int paging_group_;  int handover_;			// 1 if is in the handover procedure, else 0  int dlfreq;				// DownLink frequence  int ulfreq;				// UpLink frequence  Phy *netif_;            // network interface  inline double& tti() { return tti_;}  double bytes_slot; protected:  LL* ll_;		// ll  Mac* mac_;  NsObject* downtarget_;		// for outgoing packet  NsObject* uptarget_;		// for incoming packet  PacketQueue* prach_temp_; //temporary storage for a PRACH pkt while waiting for AICH  int num_preambles_;   // number of RACH tx. retries  int wait_;		// wait to tx the next preamble  // user defined variables  static int max_num_freq_;    // num of frequencies to be permitted inthe cell  wcdma_control w_control;	// control parameters for wcdma coding  int listen_sccpch_;		// for detecting if a paging procedure has started  int listen_sch_; 		// for cell selection (handover & initial access)  int selected_sc_;			// primary scrambling code selected  int selected_p_;			// physical address of new NodeB selected  // for monitoring the transmission/reception power  int tx_power_;		// power to tx  double rx_power_;	// power in rx  double threshold_;	// for power reception (for set-up and handover procedure)  double power_sch_;  dpcch_contr d_control;	// control parameters for DPDCH multiplexing  static int verbose_;   // to include a verbose output ..  PacketQueue* pkttoTx_;	// packets to tx in the current slot  PacketQueue* rachtoTx_; 	// rach to tx  Packet * rach_recv_;		// packet rach received from RRC  PacketQueue* data_temp_;	// packet received in the current tti from MAC  Packet * rx_dpdch[MAX_NUM_DPDCH];	  // dpdch packets in a slot  double tti_;  int tx_rate;  int d_sc_;			// ul scrambling code used in dedicated channels during a frame  flow_rate flow_rates_[MAX_NUM_FLOWS];  	// flows and their sf's and rates  // Interference Model  unsigned long dl_ErrorRate;		// 1 / BLER per frequence  double lastRate;			// last rate arrived  double Prx;				// Power received from NodeB  double Ioth;				// Interference power receceived from other NodeB  int noIoth;				// Number of samples of Ioth  BlerTable* BTable;  Event intr_;  Event intr1_; //  Event intr; //  Event intrb;  int up_slot_;  int count;			// counter for multiplexing  int in_seq_;			// counter for decoding  int hin_seq_;			// counter for decoding during handover procedure  int hnodeb_;			// last nodeb before handover private:  int command(int argc, const char*const* argv);  void radioSwitch(int i);  // Packet Transmission Functions.//  int detect_sc(int scode);  void recv_from_phy(Packet* p, Handler *h);  void tx_preamble(void);  void c_coding(Packet* p);  void c_decoding(Packet* p);  void ul_mux(Packet* p);  void dl_demux(Packet* p);  void mk_dpxch(void);  void decode(void);  void send_msg(Packet* p, int scram_c, int sf, int k);  void mk_msg_rach(void);  void mk_msg_rach(Packet* p);  void send_to_rrc(Packet* p);  int scrambling_allot(void);  int n_rx_dpdch(void);  void tx_to_nodeb(Packet* p);  void cell_selection(Packet* p);  // to calculate tx time for a packet  double TX_Time(Packet *p);  static double start_time_; // The start time for whole WCDMA scheduling.  static double slot_time_;  // The duration of each WCDMA slot  static double rach_slot_time_;  // The duration of each RACH slot  // indicates whether the radio is active or not. Each MS has a seperate radio  int radio_active_;  int error_rate_;			// Error rate = 1/BLER  // Timers  PreambleTimer pPreamble_;  UpSlotUmtsTimer pUpSlot_;  RachUpSlotUmtsTimer pRachUpSlot_;  TxPktUmtsTimer pTxPkt_;  RxPktUmtsTimer pRxPkt_;  CellTimer pCell_;  BlerTimer pBler_;  NsObject*	logtarget_;};#endif /* __phy_Umts_h__ */

⌨️ 快捷键说明

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