I have a PLUTO rev B with the latest firmware. I have tried a number of ways to achieve this but all have failed with the Pluto only managing transmit a very small RF burst. It appears that a block of some sort is happening in the Pluto (unlikely at the USB as the sample rate is only 1M). The following is the code sends two characters (RY) encoded as 5 bit Baudot code (45,45 baud) with one start bit and two stop bits giving 16 bits to transmit with the symbols being 22002 samples (at 1M) of the mark and space frequencies. I'm wondering if this is a limitation of the Python API?
import numpy as np
import adi
sample_rate = 1e6 # Hz
center_freq = 132e6 # Hz
N = int(sample_rate/45.45) #22002 number of samples to transmit at once
t = np.arange(N)/sample_rate
sdr = adi.Pluto("ip:192.168.2.1")
sdr.tx_rf_bandwidth = int(sample_rate) # filter cutoff, just set it to the same as sample rate
sdr.tx_lo = int(center_freq)
sdr.tx_hardwaregain_chan0 = 0 # Increase to increase tx power, valid range is -90 to 0 dB
sdr.tx_buffer_size = 10e6
spaceI = np.int16(np.sin(2.0*np.pi*2125*t) * 2**14)
spaceQ = np.int16(np.cos(2.0*np.pi*2125*t) * 2**14)
spaceIQ = spaceI + 1j*spaceQ
markI = np.int16(np.sin(2.0*np.pi*2295*t) * 2**14)
markQ = np.int16(np.cos(2.0*np.pi*2295*t) * 2**14)
markIQ = markI + 1j*markQ
bit_sequence = [0,0,1,0,1,0,1,1,0,1,0,1,0,1,1,1]
waveform = np.array([], dtype=spaceIQ.dtype)
for bit in bit_sequence:
wave = markIQ if bit else spaceIQ
waveform = np.concatenate((waveform, wave))
sdr.tx(waveform)