Esempio n. 1
0
    def __call__(self, domain, field):
        """
        :param object domain: A Domain
        :param object field: Current field
        :return: Field after modification by Generator
        :rtype: Object
        """
        self.field = field

        for b, bit in enumerate(self.bit_stream):
            if bit["m"] > 0:
                self.shape = Gaussian(**bit())
            else:
                self.shape = Sech(**bit())

            if domain.channels > 1:
                self.field[self.channel] += self.shape.generate(domain.t)
            else:
                self.field += self.shape.generate(domain.t)

            # Alternative: Only affect field of the current bit,
            # not the entire field:
            #~spb = domain.samples_per_bit
            #~bit_range = (b * spb, (b + 1) * spb)

            #~if domain.channels > 1:
                #~self.field[self.channel][bit_range[0]:bit_range[1]] += \
                    #~self.shape.generate(domain.t)[bit_range[0]:bit_range[1]]
            #~else:
                #~self.field[bit_range[0]:bit_range[1]] += \
                    #~self.shape.generate(domain.t)[bit_range[0]:bit_range[1]]

        return self.field
Esempio n. 2
0
    def __call__(self, domain, field):
        """
        :param object domain: A Domain
        :param object field: Current field
        :return: Field after modification by Generator
        :rtype: Object
        """
        self.field = field

        for b, bit in enumerate(self.bit_stream):
            if bit["m"] > 0:
                self.shape = Gaussian(**bit())
            else:
                self.shape = Sech(**bit())

            if domain.channels > 1:
                self.field[self.channel] += self.shape.generate(domain.t)
            else:
                self.field += self.shape.generate(domain.t)

            # Alternative: Only affect field of the current bit,
            # not the entire field:
            #~spb = domain.samples_per_bit
            #~bit_range = (b * spb, (b + 1) * spb)

            #~if domain.channels > 1:
            #~self.field[self.channel][bit_range[0]:bit_range[1]] += \
            #~self.shape.generate(domain.t)[bit_range[0]:bit_range[1]]
            #~else:
            #~self.field[bit_range[0]:bit_range[1]] += \
            #~self.shape.generate(domain.t)[bit_range[0]:bit_range[1]]

        return self.field
Esempio n. 3
0
class Generator(object):
    """
    :param string name: Name of this module
    :param object bit_stream: An array of Bit objects
    :param Uint channel: Channel to modify

    Generate a pulse with Gaussian or hyperbolic secant shape.
    Add this pulse to appropriate field, determined by channel.
    """
    def __init__(self, name="generator", bit_stream=None, channel=0):
        self.name = name
        self.bit_stream = bit_stream
        self.channel = channel

        # Always make a single bit as default, if no bitstream is passed:
        if self.bit_stream is None:
            self.bit_stream = [Bit()]

        self.field = None
        self.shape = None

    def __call__(self, domain, field):
        """
        :param object domain: A Domain
        :param object field: Current field
        :return: Field after modification by Generator
        :rtype: Object
        """
        self.field = field

        for b, bit in enumerate(self.bit_stream):
            if bit["m"] > 0:
                self.shape = Gaussian(**bit())
            else:
                self.shape = Sech(**bit())

            if domain.channels > 1:
                self.field[self.channel] += self.shape.generate(domain.t)
            else:
                self.field += self.shape.generate(domain.t)

            # Alternative: Only affect field of the current bit,
            # not the entire field:
            #~spb = domain.samples_per_bit
            #~bit_range = (b * spb, (b + 1) * spb)

            #~if domain.channels > 1:
                #~self.field[self.channel][bit_range[0]:bit_range[1]] += \
                    #~self.shape.generate(domain.t)[bit_range[0]:bit_range[1]]
            #~else:
                #~self.field[bit_range[0]:bit_range[1]] += \
                    #~self.shape.generate(domain.t)[bit_range[0]:bit_range[1]]

        return self.field
Esempio n. 4
0
class Generator(object):
    """
    :param string name: Name of this module
    :param object bit_stream: An array of Bit objects
    :param Uint channel: Channel to modify

    Generate a pulse with Gaussian or hyperbolic secant shape.
    Add this pulse to appropriate field, determined by channel.
    """
    def __init__(self, name="generator", bit_stream=None, channel=0):
        self.name = name
        self.bit_stream = bit_stream
        self.channel = channel

        # Always make a single bit as default, if no bitstream is passed:
        if self.bit_stream is None:
            self.bit_stream = [Bit()]

        self.field = None
        self.shape = None

    def __call__(self, domain, field):
        """
        :param object domain: A Domain
        :param object field: Current field
        :return: Field after modification by Generator
        :rtype: Object
        """
        self.field = field

        for b, bit in enumerate(self.bit_stream):
            if bit["m"] > 0:
                self.shape = Gaussian(**bit())
            else:
                self.shape = Sech(**bit())

            if domain.channels > 1:
                self.field[self.channel] += self.shape.generate(domain.t)
            else:
                self.field += self.shape.generate(domain.t)

            # Alternative: Only affect field of the current bit,
            # not the entire field:
            #~spb = domain.samples_per_bit
            #~bit_range = (b * spb, (b + 1) * spb)

            #~if domain.channels > 1:
            #~self.field[self.channel][bit_range[0]:bit_range[1]] += \
            #~self.shape.generate(domain.t)[bit_range[0]:bit_range[1]]
            #~else:
            #~self.field[bit_range[0]:bit_range[1]] += \
            #~self.shape.generate(domain.t)[bit_range[0]:bit_range[1]]

        return self.field