class Digiproc::Probability::RandomBitGenerator

Create random bit for testing purposes

Attributes

bits_per_symbol[RW]
p_0[RW]
p_1[RW]
random_generator[RW]

Public Class Methods

bitstream(size: , p_0: 0.5, p_1: 0.5, random_generator: Random.new) click to toggle source

Returns a string representing a bitstream

Arguments

size
Integer

number of desired bits

p_0
Float

(between 0 and 1) probability of a bit 0 occurring (default value: 0.5)

p_1
Float

(between 0 and 1) probability of a bit 1 occurring (default value: 0.5)

random_generator

Any random generator that follows the prototype of ruby's `Random` class. Defaults to `Random.new`

bitgen = Digiproc::Probability::RandomBitGenerator
bitgen.bitstream(size: 10) # => "1000010010"
# File lib/probability/bit_generator.rb, line 16
def self.bitstream(size: , p_0: 0.5, p_1: 0.5, random_generator: Random.new)
    stream = ''
    size.times do 
        stream += get_bit(p_0: p_0, p_1: p_1, random_generator: random_generator).to_s
    end
    stream
end
get_bit(p_0: 0.5, p_1: 0.5, random_generator: Random.new) click to toggle source

Returns an Integer

Arguments

p_0
Float

(between 0 and 1) probability of a bit 0 occurring (default value: 0.5)

p_1
Float

(between 0 and 1) probability of a bit 1 occurring (default value: 0.5)

random_generator

Any random generator that follows the prototype of ruby's `Random` class. Defaults to `Random.new`

bitgen.bitstream # => 1
# File lib/probability/bit_generator.rb, line 32
def self.get_bit(p_0: 0.5, p_1: 0.5, random_generator: Random.new)
    raise ArgumentError.new("Probabilities must add up to 1") if p_0 + p_1 != 1
    rnum = 1 - random_generator.rand
    return 0 if rnum <= p_0 
    return 1
end
new(bits_per_symbol: , p_0: 0.5, p_1: 0.5 ) click to toggle source

Arguments

# bits_per_symbol
Integer

set the number of bits for each symbol

p_0
Float

between 0 and 1: probability of a 0 bit (defaults to 0.5)

p_1
Float

between 0 and 1: probability of a 1 bit (defaults to 0.5)

bitstream = bitgen.new(bits_per_symbol: 1) => same as bitgen.new_bitstream
# File lib/probability/bit_generator.rb, line 69
def initialize(bits_per_symbol: , p_0: 0.5, p_1: 0.5 )
    raise ArgumentError.new("Probabilities of bits must add up to 1") if p_0 + p_1 != 1
    @bits_per_symbol, @p_0, @p_1, @random_generator = bits_per_symbol, p_0, p_1, Random.new
end
new_bitstream(p_0: 0.5 , p_1: 0.5) click to toggle source

Constructor for bitstream

Arguments

p_0
Float

between 0 and 1: probability of a 0 bit (defaults to 0.5)

p_1
Float

between 0 and 1: probability of a 1 bit (defaults to 0.5)

bitstream = bitgen.new_bitstream
# File lib/probability/bit_generator.rb, line 45
def self.new_bitstream(p_0: 0.5 , p_1: 0.5)
    self.new(bits_per_symbol: 1, p_0: p_0, p_1: p_1)
end
new_symbol_stream(bits_per_symbol: , p_0: 0.5, p_1: 0.5) click to toggle source

Constructor for symbol_stream

Arguments

bits_per_symbol
Integer

set the number of bits for each symbol

p_0
Float

between 0 and 1: probability of a 0 bit (defaults to 0.5)

p_1
Float

between 0 and 1: probability of a 1 bit (defaults to 0.5)

bitstream = bitgen.new_bitstream
# File lib/probability/bit_generator.rb, line 56
def self.new_symbol_stream(bits_per_symbol: , p_0: 0.5, p_1: 0.5)
    self.new(bits_per_symbol: bits_per_symbol, p_0: p_0, p_1: p_1) 
end

Public Instance Methods

generate(size) click to toggle source

Arguments

size
Integer

number of symbols to be generated (or bits if self.bits_per_symbol is 1)

bistream = Digiproc::Probability::RandomBitGenerator.new_bitstream
symstream = Digiproc::Probability::RandomBitGenerator.new_symbol_stream(bits_per_symbol: 8)
bitstream.generate(10) # => "0001110010"
symstream.generate(4) # => ["10100111", "00111100", "00111010", "10000100"]
# File lib/probability/bit_generator.rb, line 81
def generate(size)
    if self.bits_per_symbol == 1
        return self.class.bitstream(size: size, p_0: @p_0, p_1: @p_1, random_generator: @random_generator)
    else
        signal = []
        size.times do 
            signal << self.class.bitstream(size: @bits_per_symbol, p_0: @p_0, p_1: @p_1, random_generator: @random_generator)
        end
        return signal
    end
end