Ejemplo n.º 1
0
 def __init__(self, root, server):
     self._root = root
     self.server = server
     self.poller = Multiplexer.BestMultiplexer()
     self.socketmap = {}
     self.workers = []
     self.protocol = Protocol.Protocol(root, self)
     # legacy vars
     self.thread = thread.get_ident()
     self.num = 0
Ejemplo n.º 2
0
    def __init__(self, k=4.0, tchannel=1, voltage=0):
        gr.hier_block2.__init__(
            self,
            "channel",
            gr.io_signature(1, 1, gr.sizeof_float * 1),
            gr.io_signature(1, 1, gr.sizeof_float * 1),
        )

        ##################################################
        # Parameters
        ##################################################
        self.k = k
        self.tchannel = tchannel
        self.voltage = voltage

        ##################################################
        # Blocks
        ##################################################
        self.channels_fading_model_0_0 = channels.fading_model(
            8, 5 / 32000, False, 4.0, 0)
        self.channels_fading_model_0 = channels.fading_model(
            8, 5 / 32000, True, k, 0)
        self.blocks_float_to_complex_0_0 = blocks.float_to_complex(1)
        self.blocks_float_to_complex_0 = blocks.float_to_complex(1)
        self.blocks_complex_to_float_0_0_0 = blocks.complex_to_float(1)
        self.blocks_complex_to_float_0 = blocks.complex_to_float(1)
        self.blocks_add_xx_0 = blocks.add_vff(1)
        self.analog_noise_source_x_0 = analog.noise_source_f(
            analog.GR_GAUSSIAN, voltage, 0)
        self.Multiplexer_mux_0 = Multiplexer.mux(tchannel)

        ##################################################
        # Connections
        ##################################################
        self.connect((self.Multiplexer_mux_0, 0), (self, 0))
        self.connect((self.analog_noise_source_x_0, 0),
                     (self.blocks_add_xx_0, 0))
        self.connect((self.blocks_add_xx_0, 0), (self.Multiplexer_mux_0, 0))
        self.connect((self.blocks_complex_to_float_0, 0),
                     (self.Multiplexer_mux_0, 2))
        self.connect((self.blocks_complex_to_float_0_0_0, 0),
                     (self.Multiplexer_mux_0, 1))
        self.connect((self.blocks_float_to_complex_0, 0),
                     (self.channels_fading_model_0_0, 0))
        self.connect((self.blocks_float_to_complex_0_0, 0),
                     (self.channels_fading_model_0, 0))
        self.connect((self.channels_fading_model_0, 0),
                     (self.blocks_complex_to_float_0_0_0, 0))
        self.connect((self.channels_fading_model_0_0, 0),
                     (self.blocks_complex_to_float_0, 0))
        self.connect((self, 0), (self.blocks_add_xx_0, 1))
        self.connect((self, 0), (self.blocks_float_to_complex_0, 0))
        self.connect((self, 0), (self.blocks_float_to_complex_0_0, 0))
Ejemplo n.º 3
0
    def Run2by1(self,
                binInput,
                modulationScheme,
                noiseDeviation=0.05,
                transmitPower=1,
                estimationMethod=None,
                decoderType=DecoderType.ML):
        binOutput = ''
        binInput = self.PadBinary(binInput, modulationScheme)
        rec = Receiver()
        al = AlamoutiScheme(transmitPower)
        numTransmissions = 0
        hData = []
        inputStrings = self.SplitInput(binInput)
        progress = 0.0
        self.progressInt = 0

        for binString in inputStrings:
            transmissions = al.CreateTransmissions(binString, modulationScheme)

            for n in range(len(transmissions[0]) / 2):

                ch0 = FadingChannel(noiseDeviation)
                ch1 = FadingChannel(noiseDeviation)

                hData.append(abs(ch0.h))

                if (estimationMethod == None):
                    transmissionEx = deepcopy(transmissions[0][0]).wave
                    #Timeslot1
                    ch0.ApplyFadingToTransmission(transmissions[0][2 * n])
                    ch1.ApplyFadingToTransmission(transmissions[1][2 * n])
                    r0 = rec.CombineReceivedTransmissions(
                        transmissions[0][2 * n], transmissions[1][2 * n])

                    #Timeslot2
                    ch0.ApplyFadingToTransmission(transmissions[0][(2 * n) +
                                                                   1])
                    ch1.ApplyFadingToTransmission(transmissions[1][(2 * n) +
                                                                   1])
                    r1 = rec.CombineReceivedTransmissions(
                        transmissions[0][(2 * n) + 1],
                        transmissions[1][(2 * n) + 1])

                    #Channel Estimation
                    h0 = ch0.h
                    h1 = ch1.h

                else:
                    #Timeslot1
                    Mux10 = Multiplexer.Multiplexer(estimationMethod,
                                                    transmissions[0][2 * n])
                    Mux11 = Multiplexer.Multiplexer(estimationMethod,
                                                    transmissions[1][2 * n])
                    transmissions[0][2 * n].OverideWave(Mux10.wave)
                    transmissions[1][2 * n].OverideWave(Mux11.wave)
                    if n == 0:
                        transmissionEx = deepcopy(transmissions[0][0]).wave
                    ch0.ApplyFadingToTransmission(transmissions[0][2 * n])
                    ch1.ApplyFadingToTransmission(transmissions[1][2 * n])
                    Demux1 = Demultiplexer.Demultiplexer(
                        estimationMethod, transmissions[0][2 * n].wave,
                        transmissions[1][2 * n].wave)
                    transmissions[0][2 * n].OverideWave(Demux1.s0)
                    transmissions[1][2 * n].OverideWave(Demux1.s1)
                    r0 = rec.CombineReceivedTransmissions(
                        transmissions[0][2 * n], transmissions[1][2 * n])
                    #Timeslot2
                    Mux20 = Multiplexer.Multiplexer(
                        estimationMethod, transmissions[0][(2 * n) + 1])
                    Mux21 = Multiplexer.Multiplexer(
                        estimationMethod, transmissions[1][(2 * n) + 1])
                    transmissions[0][(2 * n) + 1].OverideWave(Mux20.wave)
                    transmissions[1][(2 * n) + 1].OverideWave(Mux21.wave)
                    ch0.ApplyFadingToTransmission(transmissions[0][(2 * n) +
                                                                   1])
                    ch1.ApplyFadingToTransmission(transmissions[1][(2 * n) +
                                                                   1])
                    Demux2 = Demultiplexer.Demultiplexer(
                        estimationMethod, transmissions[0][(2 * n) + 1].wave,
                        transmissions[1][(2 * n) + 1].wave)
                    transmissions[0][(2 * n) + 1].OverideWave(Demux2.s0)
                    transmissions[1][(2 * n) + 1].OverideWave(Demux2.s1)
                    r1 = rec.CombineReceivedTransmissions(
                        transmissions[0][(2 * n) + 1],
                        transmissions[1][(2 * n) + 1])
                    #Channel Estimation
                    h0 = Demux1.h0
                    h1 = Demux1.h1

                #Combining

                output = rec.AlamoutiCombine2by1(h0, h1, r0, r1)

                #Detection/Demodulation
                if decoderType == DecoderType.ML:
                    binOutput += rec.MLDSymbolToBinary(output[0],
                                                       modulationScheme,
                                                       transmitPower)
                    binOutput += rec.MLDSymbolToBinary(output[1],
                                                       modulationScheme,
                                                       transmitPower)
                # else use sphere detection

                numTransmissions += 4

                progress = float(len(binOutput)) / float(len(binInput))
                self.progressInt = int(progress * 1000)

        numErrors = 0

        for n in range(len(binInput)):
            if binInput[n] != binOutput[n]:
                numErrors += 1

        self.BinaryToImage(binOutput)

        BER = float(numErrors) / float(len(binInput))
        res = SimulationResults(binOutput, BER, len(binInput), numErrors,
                                numTransmissions, hData, transmissionEx)
        return res
Ejemplo n.º 4
0
def stop():
    return Multiplexer.shared().stop()
Ejemplo n.º 5
0
def run():
    return Multiplexer.shared().run()