AnyMath 文档
Notebook

RHYTHM SDR USRP通过RF路径发送和接收信号

本例说明[RHYTHM SDR USRP]的应用(https://dev.lk.onprem.kpm-ritm.ru/helpcenter/stable/ru/drafts/dokumentacija-ritm-sdr-usrp.html )在Engee环境中。 该材料是系列中的第二种。 第一个例子,它检查了与指定复合体的基本相互作用的原则,可以在链接中找到:"[节奏SDR USRP入门](https://engee.com/community/ru/catalogs/projects/nachalo-raboty-s-ritm-sdr-usrp )"。 这里有两个选项用于在射频(RF)路径上对无线电信号的接收和发送进行实验验证。

***检查1。**通过RF路径发送和接收用户无线电信号
展示了Engee环境和SDR USRP节奏的联合功能。 在这种情况下,Engee用于产生、显示和分析信号,SDR USRP节奏提供在Engee中产生的信号的接收和发送。 已经实现了两种类型的RF发射测试效果:谐波(正弦)和多频。
***检查2。**接收IEEE802.11(Wi-Fi)标准的无线网络信号
示出了节奏SDR USRP作为用于监测无线电电波的宽带接收设备的实际应用。 该验证包括在IEEE802.11(Wi‑Fi)标准网络所占用的频率范围内记录和显示信号。

这些实验检查证明了模块的使用[Targets.RITM_SDR_API](https://dev.lk.onprem.kpm-ritm.ru/helpcenter/stable/ru/engee-hardware/ritm-sdr-usrp-hardware.html )在Engee环境中。 要使用RHYTHM SDR USRP,您需要连接文件 ritm_sdr_utils.jl,包含辅助功能。 此文件自动下载提供SDR USRP节奏管理功能的模块。

In [ ]:
include("ritm_sdr_utils.jl")
Пакет поддержки 'Engee-Device-Manager' версии 'v1.54' успешно установлен.
✓RITM SDR USRP辅助功能库已准备就绪

使用RHYTHM SDR USRP接收和发送无线电信号

下面的代码片段演示了SDR USRP节奏与Engee环境在信号生成,发送和接收方面的交互顺序,并且还说明了使用库处理用户信号的可能性[EngeeDSP](https://engee.com/helpcenter/stable/cn/engee-dsp.html)。

代码生成、发送、接收和分析谐波(正弦)信号。 与SDR USRP服务器的连接在IP地址预先建立: 192.168.2.70.

In [ ]:
RITM_SDR_API.@log_on
client = RITM_SDR_API.RITMClient("192.168.2.70")
RITM_SDR_API.connect(client) || (exit(1));
已启用日志记录
✓连接到192.168.2.70:12345

下面是通过调用函数对可编程逻辑块的配置 configure_sdr,其中调整指定块的寄存器作为节奏SDR USRP的一部分。

In [ ]:
configure_sdr(client);

使用函数 agc_set_mode 自动增益控制(AGC)被激活。

In [ ]:
RITM_SDR_API.agc_set_mode(client, 1);

接下来,产生频率为10MHz的谐波信号。

In [ ]:
fs_hz = 245.76e6 
tone_freq_hz = 10e6  
n_samples = 600000
t = (0:n_samples-1) / fs_hz
signal = exp.(2π * im * tone_freq_hz * t);

之后,将生成的信号加载到SDR USRP的内部存储装置中,并从随机存取存储器(RAM)开始其循环播放。 SDR USRP节奏提供了一种模式,其中信号以循环模式连续广播。

In [ ]:
tx_data = RITM_SDR_API.prepare_tx_data(signal)
if RITM_SDR_API._put_data(client, tx_data)
    sleep(5.0)  
    RITM_SDR_API.send_to_ram(client)
    sleep(10.0)
else
    RITM_SDR_API.@logmsg "发送数据时出错"
end
发送数据(2400000字节)
数据已发送(等待确认。..)

正交分量的接收由函数进行 receive_iq().

In [ ]:
rx_iq = receive_iq(client, n_samples);
接收开始(600,000计数)
 缓冲区复位
等待RAM。..
获取数据
✓接收的数据(4800000字节)

接收信号的分析由函数执行 plot_signal(),其在时域和频域中执行绘图。 此功能使用库提供的工具。 EngeeDSP.

In [ ]:
if rx_iq !== nothing && length(rx_iq) > 0
    RITM_SDR_API.@logmsg "接受$(长度(rx_iq))计数"
    plot_signal(rx_iq[1:min(end, 5000)], fs_hz, "模拟环路:∞(round(fs_hz/1e6,digits=2))MHz,Fs=∞(round(fs_hz/1e6,digits=2))MHz");
end
600,000计数已被采取
✓保存:signal_2026-05-20_11-49-10 ...巴布亚新几内亚
Out[0]:

下,触发多频信号。 根据算法,该检查完全重复前一个,但是,代替谐波信号,使用函数 generate_signal(),旨在创造专门的测试效果:多频,线性频率调制(LFM)或双频信号。 在这个例子中,产生由分布在从10MHz到100MHz的频率范围内的15个谐波分量组成的多频率信号。

In [ ]:
signal = generate_signal(fs_hz, n_samples; signal_type="multitone", f_low=10e6, f_high=100e6, num_tones=15)
sleep(10.0)
tx_data = RITM_SDR_API.prepare_tx_data(signal)
if RITM_SDR_API._put_data(client, tx_data)
    sleep(5.0)  
    RITM_SDR_API.send_to_ram(client)
    sleep(10.0)
else
    RITM_SDR_API.@logmsg "发送数据时出错"
end
rx_iq = receive_iq(client, n_samples)
if rx_iq !== nothing && length(rx_iq) > 0
    RITM_SDR_API.@logmsg "接受$(长度(rx_iq))计数"
    plot_signal(rx_iq[1:min(end, 5000)], fs_hz, "模拟回路,多频信号");
end
✓产生的多频信号:15音调±[10.0-100.0]MHz
发送数据(2400000字节)
数据已发送(等待确认。..)
接收开始(600,000计数)
 缓冲区复位
等待RAM。..
获取数据
✓接收的数据(4800000字节)
600,000计数已被采取
✓保存:signal_2026-05-20_11-50-17 ...巴布亚新几内亚
Out[0]:

在结束时,传输停止,SDR USRP内存被清除。

In [ ]:
RITM_SDR_API.disconnect(client)
RITM_SDR_API.close_log();
 连接已关闭

日志文件已关闭:logs/log_2026-05-20_11-44-29 ...日志

这些示例清楚地显示了Engee和SDR USRP节奏的联合功能,此外,第二个示例允许您评估处理多频信号的质量。

IEEE802.11无线网络信号接收(Wi-Fi)

以下测试演示了SDR USRP节奏用于监控无线电广播的实际应用,即用于记录和分析IEEE802.11(Wi‑Fi)网络占用范围内的信号。 验证显示了RHYTHM SDR USRP作为广播监控任务的概述宽带接收器的功能。 在检查期间,评估连接的正确性,数据接收以及对给定信道上的频谱情况进行视觉分析的可能性。 结果可以作为调试和后续开发用于解调和解码IEEE802.11网络流量的更复杂算法的基础。

IEEE802.11(无线保真,Wi‑Fi)标准定义了一种无线数据传输技术,允许设备连接到本地网络并通过无线电波访问Internet,而无需使用有线连接。 IEEE802.11网络中使用的频率范围:

-2.4GHz(2400-2483.5MHz)是最常见的频段,通过障碍物提供良好的信号穿透,但受到其他设备(微波炉,蓝牙设备)的干扰。
-5GHz(5150-5850MHz,分为几个子带)-提供更高的数据传输速度和更低的拥塞,但穿透障碍物更差。
-6GHz(5925-7125MHz)是Wi‑Fi6E和Wi‑Fi7标准中使用的新频段;专为超高速和低延迟而设计,主要在视线范围内的短距离内运行。

让我们分阶段来看看验证的结构。 确定信道频率。 验证通过使用函数计算目标Wi‑Fi信道的中心频率开始 wifi_channel_frequency. 有关可用网络的信息可用于选择信道,例如,命令 netsh wlan show interfaces 在Windows环境中,显示无线适配器的当前信道和频率范围(2.4GHz或5GHz)。

In [ ]:
RITM_SDR_API.@log_on
wifi_freq_mhz = wifi_channel_frequency("2.4GHz", 2)
RITM_SDR_API.@logmsg "Wi-Fi频率:$wifi_freq_mhz MHz";
已启用日志记录
Wi-Fi频率:2417MHz
自动创建了一个日志文件:logs/log_2026-05-20_12-36-51 ...日志

该算法使用该函数记录正交分量(I/Q数据)的600,000个样本 receive_iq. 该体积对应于在30.72mhz的采样频率下持续时间约为19.5ms的信号段。

In [ ]:
client = RITM_SDR_API.RITMClient("192.168.2.70")
RITM_SDR_API.connect(client) || (exit(1))
configure_sdr(client, Int(wifi_freq_mhz * 1e6))
RITM_SDR_API.agc_set_mode(client, 1)  
sleep(0.5)
iq_data = receive_iq(client, 600000)
if iq_data !== nothing
    RITM_SDR_API.@logmsg "写入$(长度(iq_data))计数";
end
✓连接到192.168.2.70:12345
发送命令:COMMAND:SET_TX_CARR_FREQ_HZ=2417000000
✓设定频率:2417000000Hz
接收开始(600,000计数)
 缓冲区复位
等待RAM。..
获取数据
✓接收的数据(4800000字节)
记录的600,000个计数

记录的信号的显示。 如果接收到数据,则将其传递给函数 plot_signal 与参数 signal_type="wi-fi". 该函数构建了一个双面板图:在时域和频域(以分贝为单位的频谱功率密度相对于满量程,相对于Wi-Fi信道的设定频率居中)。 图形会自动保存到数据文件中。

In [ ]:
plot_signal(iq_data, 30.72e6, "Wi-Fi:$(wifi_freq_mhz)MHz", center_freq_hz=wifi_freq_mhz * 1e6, signal_type="wi-fi")
✓保存:signal_2026-05-20_12-39-18 ...巴布亚新几内亚
Out[0]:

断开连接。 用RHYTHM SDR USRP完成工作后,连接终止。

In [ ]:
RITM_SDR_API.disconnect(client)
RITM_SDR_API.close_log();
 连接已关闭

日志文件已关闭:logs/log_2026-05-20_12-36-51 ...日志

结论

使用两个实验测试的例子—在模拟环路模式下操作和在空中接收Wi-Fi信号-在Engee环境中支持SDR USRP节奏。

在测量期间,在捕获的数据中自信地观察到预设频率为10MHz的正弦信号。 同样,在发射多频信号时,其主要成分被记录在频谱中,这证实了测试无线电信号的形成,发射和接收的正确性。

接收Wi-Fi信号的实验证明了使用RHYTHM SDR USRP作为宽带接收器设备用于分析真实无线电信号的可能性。 所得频谱清楚地显示了具有OFDM调制的Wi-Fi信号的频谱包络特征的形状。 这表明接收路径的正确配置,足够的接收带宽以及在Engee环境中使用SDR USRP捕获复杂宽带调制信号的能力。