Exemple #1
0
    def hard_decode(cls, uber, dfree):
        """Calculate bit-error probability for hard decision decoded RCPC.

        :param uber:  Probability of bit-error for uncoded system.
        :param dfree: Free distance of convolutional code.
        :return: BER for hard decision decoded RCPC coded system.
        """
        pd, p = 0, uber
        dmin = int(ceil((dfree+1.0)/2) )
        q = 1 - p
        for k in range(dmin, dfree+1):
            pd += nchoosek(dfree,k)*(p**k)*(q**(dfree-k) )
        if (int(dfree)%2<1):
            pd += 0.5*nchoosek(dfree,int(dfree/2))*(p**(dfree/2))*(q**(dfree/2))
        return pd
Exemple #2
0
    def per(self, p, ber):
        """Calculate packet-error rate (PER).

        :param p: Packet (packet length in bytes) to compute PER for.
        :param ber: BER of uncoded system.
        :return: Packet-error rate (PER) in [0,1].

        :note: If `ber` is a `numpy` array, this method will return an array of
               values corresponding to the specified parameters.
        """
        n, k = self.blocklength, self.messagelength
        m, t = self.bitspersymbol, self.ncorrectable
        plen = p
        if isinstance(p, Packet): plen = len(p)
        # calculate uncorrectable error rate for symbols
        ser = 1 - (1 - ber)**m
        # calculate uncorrectable error rate
        s = 0
        for b in range(t+1):
            s +=nchoosek(n,b)*(ser**b)*((1-ser)**(n-b))
        uer = 1 - s
        # calculate PER
        nblocks = int(ceil(plen/k) )
        per = 1 - (1-uer)**nblocks
        return per