AnyMath 文档

Python UHD API

AnyMath 支持Python(有关详细信息,请参阅 使用Python). 要在Python环境中管理SDR USRP节奏,使用库 uhd. 在Python中使用节奏SDR USRP时的主要问题是信号同时传输和接收的延迟。 它可以通过将任务分成两个独立的进程来解决。:

*数据传输; *数据接收,处理和可视化(使用 [医]马特洛利布).

在工作开始时,您需要创建SDR管理对象。 在Python中,这是通过一个类完成的 uhd。usrp。MultiUSRP臓. 设备的IP地址在初始化期间指定。:

usrp = uhd.usrp.MultiUSRP("addr=192.168.2.100")

接下来,您需要调整采样频率、载波中心频率以及接收(RX)和发送(TX)路径的增益:

usrp.set_tx_rate(SAMP_RATE)
usrp.set_rx_rate(SAMP_RATE)
usrp.set_tx_freq(uhd.types.TuneRequest(CENTER_FREQ))
usrp.set_rx_freq(uhd.types.TuneRequest(CENTER_FREQ))
usrp.set_tx_gain(TX_GAIN)
usrp.set_rx_gain(RX_GAIN)

Streamer对象是为直接发送和接收样本而创建的。 它们指定数据格式。 此示例演示格式的使用 fc32 (复杂浮点数)用于Python和 sc16 (16位整数)进行网络传输。

st_args = uhd.usrp.StreamArgs("fc32", "sc16")
tx_streamer = usrp.get_tx_stream(st_args)
rx_streamer = usrp.get_rx_stream(st_args)

我们正在生成一个测试单音正弦信号。 库用于此。 n.麻木,麻木. 我们创建了一个给定移位相对于载波频率偏移的复数数组。

t = np.arange(BUFFER_SIZE) / actual_rate
tx_data = (AMPLITUDE * np.exp(1j * 2 * np.pi * TONE_OFFSET * t)).astype(np.complex64)

确保不间断运行 特别提款权 在没有接口延迟的情况下,控制逻辑被转移到一个单独的过程中. 议员。过程. 通过以下方式与图形shell进行数据交换 共享内存 (共享内存)。 这允许GUI进程立即访问接受的选择。

existing_shm = shared_memory.SharedMemory(name=shm_name)
shared_array = np.ndarray((BUFFER_SIZE,), dtype=np.complex64, buffer=existing_shm.buf)

两个并行线程正在运行:

*发射器:使用函数无限地将生成的正弦阵列发送到发射器路径 tx_streamer。发送. *接收器:用命令连续轮询接收器的缓冲区 rx_streamer。recv的 并将接收到的数据写入共享存储器。

应用程序的主要过程是从共享内存中读取数据并将其可视化。 快速傅立叶变换(FFT)用于使用布莱克曼窗函数进行频谱分析,以消除频谱泄漏。

spec = np.fft.fftshift(np.fft.fft(local_snap * np.blackman(BUFFER_SIZE)))
pwr = 20 * np.log10(np.abs(spec) / BUFFER_SIZE + 1e-12)

工作的结果是两个图形:信号的波形及其频谱表示,实时更新。

image.png