コード例 #1
0
class wireless_system:
    def __init__(self, numOfInputs):
        self.transmitter = Transmitter()
        self.receiver = Receiver()
        self.wirelessChannel = wireless_channel(0.1)
        self.numOfInputs = numOfInputs
        self.sigmaValues = [10, 1, 0.1]
        self.generated_Points = []
        self.colors = ['purple', 'yellow', 'orange']

    def runForLinePlot16(self):
        d= generate_data() 
        probabilities = []
        for i in range(1, 100, 1):
            input = open("input.txt", "r")
            numOfCorrectOutputs = 0
            SNR = i 
            self.wirelessChannel.setSigma(1/SNR)
            cntr = 0
            for line in input:
                if(cntr == 0):
                    data = line.rstrip()
                    cntr += 1
                    continue
                else :
                    cntr = 0
                    data += line.rstrip()
                    point = self.transmitter.modulate16QAM(data)
                    (hI, hQ) = self.wirelessChannel.applyChannelGain(point)
                    self.wirelessChannel.applyAWGN(point)
                    self.receiver.removeChannelImpact(point, hI*0.707, hQ*0.707)
                    receiverOut = self.receiver.demodulate16(point)
                    if(data == receiverOut):
                        numOfCorrectOutputs += 1
            probabilities.append(1 - (numOfCorrectOutputs/(self.numOfInputs/2)))
            input.close()

        d.probVsSNR([i for i in range(1, 100, 1)], probabilities)


    def encodeAllWithHamming(self):
        input = open("input.txt", "r") 
        output = open("encoded.txt", "w")
        cntr = 0
        for line in input: 
            if(cntr == 0):
                data = line.rstrip()
                cntr +=1
                continue
            else:
                data += line.rstrip()
                cntr = 0
                new_data=" ".join(data)
                data_matrix= np.matrix(new_data)
                encoded = self.transmitter.encodeHamming(data_matrix)
                mystring1= "".join("".join(map(str,sub)) for sub in encoded)
                mystring1 = mystring1.replace('[' , '')
                mystring1 = mystring1.replace(']' , '')
                mystring2="".join(mystring1)
                mystring2 = mystring2.replace(' ' , '')
                output.write((mystring2))

        input.close()
        output.close()


    def runWithHammingCode(self):
        d3 = generate_data() 
        probabilities = []
        self.encodeAllWithHamming()
        for i in range(1, 100, 1):
            allDemodulated = open('demodulated.txt', 'w')
            SNR = i 
            self.wirelessChannel.setSigma(1/SNR)
            content_file = open('encoded.txt', 'r')
            content = content_file.read()
            for data in [content[i:i+4] for i in range(0, len(content), 4)] :
                point = self.transmitter.modulate16QAM(data)
                (hI, hQ) = self.wirelessChannel.applyChannelGain(point)
                self.wirelessChannel.applyAWGN(point)
                self.receiver.removeChannelImpact(point, hI*0.707, hQ*0.707)
                receiverOut = self.receiver.demodulate16(point)
                allDemodulated.write(receiverOut)

            allDemodulated.close()

            self.decodeAll()
            numOfCorrectOutputs = self.reconstructAndCalcCorrectOutputs()
            probabilities.append(1 - (numOfCorrectOutputs/(self.numOfInputs)))

        d3.probVsSNR([i for i in range(1, 100, 1)], probabilities)


    def reconstructAndCalcCorrectOutputs(self):
        numOfCorrects = 0
        counter = 0
        decodedFile = open('decoded.txt', 'r')
        lines = tuple(open('input.txt', 'r'))
        content = decodedFile.read()
        for line in [content[i:i+7] for i in range(0, len(content), 7)] :
            actualData = line[0 : 4]
            parity = line[4:7]
            inputLine1 =str(lines[counter].rstrip())
            inputLine2 = str(lines[counter + 1].rstrip())
            correctedOutput = self.receiver.findAndCorrectError(parity, actualData)
            if(str(correctedOutput[0 : 2]) == inputLine1):
                numOfCorrects += 1
            if(str(correctedOutput[2 : 4] == inputLine2)):
                numOfCorrects += 1
            counter += 2

        return numOfCorrects

    def decodeAll(self):
        demod = open('demodulated.txt', 'r')
        decodedFile = open("decoded.txt", "w")
        lines = demod.read()
        for data in [lines[i:i+7] for i in range(0, len(lines), 7)] :
            new_data=" ".join(data)
            data_matrix= np.matrix(new_data)
            decoded = self.receiver.decodeHamming(data_matrix)
            actualData = data[0:4]
            mystring= "".join("".join(map(str,sub)) for sub in decoded)
            mystring1=str(mystring)
            decodedFile.write(actualData + mystring1)

        demod.close()
        decodedFile.close()