[Ns-developers] [ns-2.33] bug in WirelessPhyExt::sendUp()

antoine.trux@nokia.com antoine.trux at nokia.com
Tue Jun 24 05:48:03 PDT 2008


Hi Lajos,

Thank you for your message.

The following two concepts should not be mixed here:


1) Receiver sensitivity
   --------------------
   This is the minimum level at which a receiver must be able to detect a signal. The Standard(*) defines minimum requirements for these values. Excerpt from the Standard:

	"17.3.10.1 Receiver minimum input sensitivity
	The packet error rate (PER) shall be less than 10% at a PSDU length of 1000 octets for rate-dependent input levels shall be the numbers listed in Table 17-13 or less. The minimum input levels are measured at the antenna connector (noise factor of 10 dB and 5 dB implementation margins are assumed)."

   For example, for 802.11a, 20 MHz channel spacing, and BPSK modulation with 1/2 coding rate, the Standard mandates that the receiver sensitivity must be no worse that -82 dBm (see Table 17-13).

   It should be stressed that this is only a minimal requirement. The receiver may well be able to decode an incoming signal even if the signal is weaker, even considerably weaker, than the specified minimum level.


2) Carrier-Sense Threshold
   -----------------------
   This is the reception level at which the channel is to be considered busy. Excerpt from the Standard:

	"17.3.10.5 CCA sensitivity
	The start of a valid OFDM transmission at a receive level equal to or greater than the minimum modulation and coding rate sensitivity (-82 dBm for 20 MHz channel spacing, -85 dBm for 10 MHz channel spacing, and -88 dBm for 5 MHz channel spacing) shall cause CCA to indicate busy with a probability > 90% within 4 μs for 20 MHz channel spacing, 8 μs for 10 MHz channel spacing, and 16 μs for 5 MHz channel spacing."

   For example, for 802.11a and 20 MHz channel spacing, the Standard states that the Carrier-Sense Threshold is -82 dBm (see Table 17-13).


Now, it is true that the minimum receiver sensitivity and the carrier-sense threshold can happen to have equal values for a certain modulation, but that is not necessarily the case in general. For example, in the case of 2.4 GHz, the receiver's minimum sensitivity is -82 dBm, whereas the carrier-sense threshold is -76 dBm (see the Standard, clauses 19.4.6 and 19.5.1).


Antoine

(*) IEEE Std 802.11(tm)-2007 (Revision of IEEE Std 802.11-1999)  

> -----Original Message-----
> From: ns-developers-bounces at ISI.EDU 
> [mailto:ns-developers-bounces at ISI.EDU] On Behalf Of ext Lajos
> Sent: 18 June, 2008 23:53
> To: ns-developers at ISI.EDU
> Subject: [Ns-developers] [ns-2.33] bug in WirelessPhyExt::sendUp()
> 
> Hi,
> 
> I think this code is ok. I haven't read the standard for a while, but
> I think what this code is doing is implementing a simplified form of
> the energy detect threshold i.e the received signal must be above a
> certain power to trigger the start of the packet receipt. It is not
> enough to have a good enough SINR, the absolute signal power must also
> be above a threshold. In this case I think the authors are just using
> the same threshold for energy detect as for carrier sense, this could
> in fact be how it was intended, but I'd need to read the standard
> carefully.
> 
> In the original wireless phy a receive threshold was used I believe,
> which is missing here, hence it is only ensured that the rx power is
> above the cs-thresh.
> 
> Lajos
> 
> 
> 
> original message below:
> ------------------------------
> 
> 
> Hi,
> 
> My colleagues and I have found a weird behaviour in 
> wireless-phyExt.cc.
> 
> Lines 219 to 233 of that file (function 
> WirelessPhyExt::sendUp()) read:
> 
> 		case SEARCHING:
> 			if ((Pr >= CSThresh_) && (powerMonitor->SINR(Pr)
> 					>=
> modulation_table[BasicModulationScheme_].SINR_ratio)) {
> 				power_RX = Pr;
> 				pkt_RX=p->copy();
> 				setState(PreRXing);
> 				preRX_Timer.sched(HeaderDuration_); //
> preamble and PCLP header
> 				break;
> 			} else {
> 				//case 1
> 				//pkt_recvd =discard(p,Pr,"");
> 				pkt_recvd =discard(p, Pr, "SXB");
> 				setState(SEARCHING);
> 				break;
> 			}
> 
> Why are received packets discarded if `Pr' is smaller than 
> `CSThresh_'?
> That is, why does this code not read instead:
> 
> 		case SEARCHING:
> 			if (powerMonitor->SINR(Pr) >=
> modulation_table[BasicModulationScheme_].SINR_ratio) {
> 		[otherwise same as above]
> 
> ?
> 
> As far as we know, the carrier-sense threshold is used when 
> sending (the
> medium should be idle before a node can transmit a frame), not for
> deciding the success or failure of the reception of a frame.
> 
> Also, I am not sure why the state is set to `SEARCHING' in the else
> branch of the above code, since the state is already `SEARCHING'.
> 
> Antoine Trux
> Nokia Research Center
> 



More information about the Ns-developers mailing list