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

📄 opnetwork_capture_mode_inoise.ps.c

📁 基于OPNET的无线电网络仿真
💻 C
字号:
/* opnetwork_capture_mode_inoise.ps.c */                                                       
/*
/****************************************/
/*		  Copyright (c) 1993			*/
/*			by MIL 3, Inc.				*/
/*		(A Delaware Corporation)		*/
/*	3400 International Drive,  N.W.		*/
/*		Washington, D.C., U.S.A.		*/
/*			All Rights Reserved.		*/
/****************************************/

#include <opnet.h>


void
opnetwork_capture_mode_inoise (pkptr_prev, pkptr_arriv)
	Packet*		pkptr_prev;
	Packet*		pkptr_arriv;
	{
	int			arriv_match, prev_match;
	double		prev_rcvd_power, arriv_rcvd_power;
	double		arriv_noise_accum, prev_noise_accum;

	/** Evaluate a collision due to arrival of 'pkptr_arriv'	**/
	/** at site where 'pkptr_prev' was already arriving.		**/
	FIN (opnetwork_capture_mode_inoise (pkptr_prev, pkptr_arriv))

	/* If the previous packet ends just as the new one begins, this is not	*/
	/* a collision (just a near miss, or perhaps back-to-back packets).		*/ 
	if (op_td_get_dbl (pkptr_prev, OPC_TDA_RA_END_RX) != op_sim_time ())
		{
		/* Increment the number of collisions in previous packet. */
		op_td_set_int (pkptr_prev, OPC_TDA_RA_NUM_COLLS, 
				op_td_get_int (pkptr_prev, OPC_TDA_RA_NUM_COLLS) + 1);

		/* Increment number of collisions in arriving packet. */
		op_td_set_int (pkptr_arriv, OPC_TDA_RA_NUM_COLLS, 
				op_td_get_int (pkptr_arriv, OPC_TDA_RA_NUM_COLLS) + 1);

		/* Determine if previous packet is valid or noise. */
		prev_match = op_td_get_int (pkptr_prev, OPC_TDA_RA_MATCH_STATUS);

		/* Determine if arriving packet is valid or noise. */
		arriv_match = op_td_get_int (pkptr_arriv, OPC_TDA_RA_MATCH_STATUS);
		
		/* Get received power levels for both packets. */
		prev_rcvd_power = op_td_get_dbl (pkptr_prev, OPC_TDA_RA_RCVD_POWER);
		arriv_rcvd_power = op_td_get_dbl (pkptr_arriv, OPC_TDA_RA_RCVD_POWER);

		/* If the arriving packet is valid, calculate		*/
		/* interference of previous packet on arriving one.	*/
		if (arriv_match == OPC_TDA_RA_MATCH_VALID)
			{
			arriv_noise_accum = op_td_get_dbl (pkptr_arriv, OPC_TDA_RA_NOISE_ACCUM);
			op_td_set_dbl (pkptr_arriv, OPC_TDA_RA_NOISE_ACCUM,
				arriv_noise_accum + prev_rcvd_power);
			}

		/* And vice-versa. */
		if (prev_match == OPC_TDA_RA_MATCH_VALID)
			{
			prev_noise_accum = op_td_get_dbl (pkptr_prev, OPC_TDA_RA_NOISE_ACCUM);
			op_td_set_dbl (pkptr_prev, OPC_TDA_RA_NOISE_ACCUM,
				prev_noise_accum + arriv_rcvd_power);
			}

		/* Place flag indicating reject in transmission data block */
		/* for the packet with lower received power */
		if (prev_rcvd_power <= arriv_rcvd_power) 
			{
			op_td_set_int (pkptr_prev, OPC_TDA_RA_PK_ACCEPT, OPC_FALSE);
			}
		else
			{
			op_td_set_int (pkptr_arriv, OPC_TDA_RA_PK_ACCEPT, OPC_FALSE);
			}
		}
	
	FOUT
	}                

⌨️ 快捷键说明

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