Bugzilla – Bug 1758
Missing Yans and Nist error rate models for 5/6 code rate of 802.11n HT
Last modified: 2014-11-29 13:30:42 EST
Created attachment 1667 [details]
Proposed patch, validation script and results
The 802.11n HT model (implemented in the simulator since ns-3.18) suffers from the lack of an accurate error rate model for 5/6 code rates, which is a new code rate allowed in 802.11n standard in order to obtain higher throughputs.
In order to show this bug, I ran the ofdm-validation script with the newest rate introduced by wi-fi ht (see script in attachment).
We can observe that:
1. The Nist error rate model is not correct for 65 Mbit/s rates, since it uses a 5/6 code rate whereas other rates use the same code rates as older wi-fi versions. Indeed, we can observe (see pictures in attachment) that the FSR (Frame Success Rate) vs SNR curves are the same for both 58,5 Mbit/s and 65 Mbit/s rates, which is not correct. Indeed, we should expect instead a higher SNR for 65 Mbit/s rates to perform the same FSR than 58,5 Mbit/s rates.
2. The Yans error rate model gives the same output for all ht rates (see attachment), since it never computes the FSR due to a test condition which is not fulfilled. Note that even if we change this condition, we need to adapt the model for the 5/6 code rate as previously (see pictures in attachment).
Based on "Multi-rate Convolutional Codes" written by Pal Frenger et al. which had been used to implement those models for 802.11a/b/g, I brought some modifications to YansErrorRateModel and NistErrorRateModel classes (see patch in attachment) in order to be able to use those models with wi-fi ht. I provide also the ofdm-validation results in this case. We observe that the expected behaviour is now well obtained.
Could you give me your feedback about those proposed modifications?
Would it be correct to include more fields in the pe calculation, in nist-error-rate-model.cc?
What I have is:
if (bValue == 5)
pe = 1.0 / (2.0 * bValue) *
( 92.0 * std::pow (D, 4.0)
+ 528.0 * std::pow (D, 5.0)
+ 8694.0 * std::pow (D, 6.0)
+ 79453.0 * std::pow (D, 7.0)
+ 792114.0 * std::pow (D, 8.0)
+ 7375573.0 * std::pow (D, 9.0)
+ 67884974.0 * std::pow (D, 10.0)
+ 610875423.0 * std::pow (D, 11.0)
+ 5427275376.0 * std::pow (D, 12.0)
+ 47664215639.0 * std::pow (D, 13.0)
(In reply to comment #1)
> Would it be correct to include more fields in the pe calculation, in
> What I have is:
> if (bValue == 5)
> pe = 1.0 / (2.0 * bValue) *
> ( 92.0 * std::pow (D, 4.0)
> + 528.0 * std::pow (D, 5.0)
> + 8694.0 * std::pow (D, 6.0)
> + 79453.0 * std::pow (D, 7.0)
> + 792114.0 * std::pow (D, 8.0)
> + 7375573.0 * std::pow (D, 9.0)
> + 67884974.0 * std::pow (D, 10.0)
> + 610875423.0 * std::pow (D, 11.0)
> + 5427275376.0 * std::pow (D, 12.0)
> + 47664215639.0 * std::pow (D, 13.0)
Maybe we could, but I kept the same number of fields as it was done for other modulation formats.
Created attachment 1703 [details]
New patch which includes more fields in the pe calculation in nist-error-rate-model.cc
Could we merge the patch in ns-3-dev and close the bug?
The patch looks good. Please add the exact table reference from work "Multi-rate Convolutional Codes" written by Pal Frenger et al. Any validation results from real hardware as in Appendix B of http://www.nsnam.org/~pei/80211ofdm.pdf ?
I based the numbers in patch 1 from Table B.32 in "Multi-rate Convolutional Codes" written by Pal Frenger et al.
However, I realized that the numbers in patch 2, which are based on the values proposed by L. Salame, are slightly different that those in that table (the first values in common with patch 1 are the same).
Should we correct patch 2 according to Table B.32?
From where comes the values provided by L. Salame?
For real measurements, I had a setup we could have used for such purpose but unfortunately I don't have it anymore. Nevertheless, I'm pretty sure we could compare the obtain results with some experimental results provided in the literature (I can quickly have a look at that in the coming days).
I found the values in the following paper, table IV:
Haccoun and Begin, "High Rate Punctured Convolutional Codes for Viterbi Sequential Decoding".
Thanks for your comment Lynne.
Any idea which paper/values should be trusted?
I honestly don't know. I can investigate a bit and get back to you. My intuition would be to trust your source since it seems to be about 10 years newer.
I think work done by Haccoun and Begin, "High Rate Punctured Convolutional Codes for Viterbi Sequential Decoding" is solid. That was NIST model based on. Table IV of the above reference should be used, namely, Entry (M,G1,G2) = (6,133,171)
Thanks for your good comment Gary.
Maybe some last opinions so that we can choose if we keep patch 2 so far?
If they are no additional comment, I propose to keep patch v2.
Sounds good to me. I suggest that reference to the coefficients should be added in the documentation.
Sebastien, can you please prepare a 'v3' patch that:
- strips all comments such as:
//802.11n support by S. Deronne
from the body of the code
- wherever the source code has coefficients drawn from a reference, include a very brief citation comment in the code, such as:
// 5/6 code rate coefficients drawn from Haccoun and Begin, "High Rate
// Punctured Convolutional Codes for Viterbi Sequential Decoding", Table IV
- perhaps at this location in the .rst file:
add the additional reference also
Taking your remarks into consideration, here is a "v3" patch.
Created attachment 1924 [details]
Created attachment 1925 [details]
New version of the patch to include an ofdm-ht-validation example.
thanks, I will schedule to apply v4 of the patch next week if there are no other comments.