def bits_to_samples(bits,samples_per_bit,
             npreamble=0,
             npostamble=0,
             v0 = 0.0,
             v1 = 1.0,
             repeat = 1):
    """ generate sequence of voltage samples:
          bits: binary message sequence
          npreamble: number of leading v0 samples
          npostamble: number of trailing v0 samples
          samples_per_bit: number of samples for each message bit
          v0: voltage to output for 0 bits
          v1: voltage to output for 1 bits
          repeat: how many times to repeat whole shebang
    """
    # Default to all v0's
    samples = [v0]*(npreamble +
                    len(bits)*samples_per_bit +
                    npostamble)
    index = npreamble
    one_bit_samples = [v1]*samples_per_bit
    for i in range(len(bits)):
        next_index = index + samples_per_bit
        if bits[i] == 1:
            samples[index:next_index] = one_bit_samples
        index = next_index

    return samples*repeat