[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