Search code examples
groovyunetstackforwarderrorcorrection

How to examine the working of FEC(Forward Error Correction) in the Unetstack simulator?


What is the procedure for understanding how the FEC mechanism in the Unetstack works, and what algorithm it uses to detect and correct the errors?

To understand, how FEC(Forward Error Correction) is working in the Unetstack, Firstly I tried to introduce errors while transmitting data from sender to receiver. The method being, altering the parameters of modem/channel such as noise levels, depth, powerlevels etc; thinking that these changes would introduce some errors and send erroneous data to the receiver, but it was noted that if we change the parameters after a certain limit, there is no data received on the receiver side instead just a BadFrameNtf was thrown. So, I wasn't able to analyze the FEC mechanism here as no data was received.

It would be really helpful if you could provide recommendations for improving the current technique followed or in offering new ways to introduce errors and analyse the FEC mechanism during data transmission in the Unetstack.


Solution

  • The community version of UnetStack is primarily a network simulator, and abstracts out the physical layer with a modem model that computes the probability of packet loss. In this model, there is no need for any FEC to be implemented per se, although the packet loss probability may include a notional FEC.

    The community version of UnetStack audio implements a ½-rate interleaved convolution code as the only available FEC. You can see that by typing phy[1].fecList or phy[2].fecList on the modem shell:

    > phy[1].fecList
    [iconv-1/2]
    

    The commercial versions of UnetStack use more performant FECs including LDPC, BCH, etc, for various code rates (differing correction capability). If you own a modem with UnetStack, you will have access to those. Example:

    > phy[1].fecList
    [ldpcv3-1/1, ldpc-1/1, ldpc-2/3, iconv-1/2, janus-spec, janus-ref, ldpc-1/2, bch-1/3, ldpcv3-1/3, ldpc-1/3, bch-1/4, ldpcv3-1/4, ldpc-1/4, bch-1/5, ldpcv3-1/5, ldpc-1/5, ldpcv3-1/6, ldpc-1/6]