РИТМ SDR USRP передача и приём сигналов через РЧ-тракт
РИТМ SDR USRP передача и приём сигналов через РЧ-тракт
Этот пример иллюстрирует применение РИТМ SDR USRP в среде Engee. Материал является вторым в серии, с первым примером, в котором рассматривались принципы базового взаимодействия с указанным комплексом, можно ознакомиться по ссылке: «Начало работы с РИТМ SDR USRP». Здесь приведены два варианта экспериментальной проверки приёма и передачи радиосигналов по радиочастотному (РЧ) тракту.
- Проверка 1. Передача и приём пользовательских радиосигналов через РЧ-тракт
Демонстрируется совместное функционирование среды Engee и РИТМ SDR USRP. При этом Engee используется для формирования, отображения и анализа сигнала, а РИТМ SDR USRP обеспечивает приём и передачу сформированного в Engee сигнала. Реализовано два типа испытательных воздействий, передаваемых по РЧ-тракту: гармонический (синусоидальный) и многочастотный. - Проверка 2. Приём сигнала беспроводной сети стандарта IEEE 802.11 (Wi‑Fi)
Показывается практическое применение РИТМ SDR USRP в качестве широкополосного приёмного устройства для мониторинга радиоэфира. Проверка включает запись и отображение сигнала в частотном диапазоне, занимаемом сетями стандарта IEEE 802.11 (Wi‑Fi).
Указанные экспериментальные проверки демонстрируют порядок использования модуля Targets.RITM_SDR_API в среде Engee. Для работы с РИТМ SDR USRP необходимо подключить файл ritm_sdr_utils.jl, содержащий вспомогательные функции. Этот файл автоматически загружает модуль, в котором представлены функции управления РИТМ SDR USRP.
include("ritm_sdr_utils.jl")
Приём и передача радиосигналов с использованием РИТМ SDR USRP
Фрагмент кода представленый ниже демонстрирует порядок взаимодействия РИТМ SDR USRP со средой Engee в части формирования, передачи и приёма сигналов, а также иллюстрирует возможности обработки пользовательских сигналов средствами библиотеки EngeeDSP.
В коде выполняется формирование, передача, приём и анализ гармонического (синусоидального) сигнала. Предварительно устанавливается соединение с РИТМ SDR USRP по IP-адресу: 192.168.2.70.
RITM_SDR_API.@log_on
client = RITM_SDR_API.RITMClient("192.168.2.70")
RITM_SDR_API.connect(client) || (exit(1));
Ниже конфигурирование программируемых логических блоков посредством вызова функции configure_sdr, осуществляющей настройку регистров указанных блоков в составе РИТМ SDR USRP.
configure_sdr(client);
С помощью функции agc_set_mode включается автоматическая регулировка усиления (АРУ).
RITM_SDR_API.agc_set_mode(client, 1);
Далее выполняется формирование гармонического сигнала с частотой 10 МГц.
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 и запуск его циклического воспроизведения из оперативного запоминающего устройства (ОЗУ). В РИТМ SDR USRP предусмотрен режим, при котором сигнал непрерывно транслируется в эфир в циклическом режиме.
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
Приём квадратурных составляющих осуществляется функцией receive_iq().
rx_iq = receive_iq(client, n_samples);
Анализ принятого сигнала осуществляется функцией plot_signal(), которая выполняет построение графиков во временной и частотной областях. Данная функция использует инструменты, предоставляемые библиотекой EngeeDSP.
if rx_iq !== nothing && length(rx_iq) > 0
RITM_SDR_API.@logmsg "Принято $(length(rx_iq)) отсчетов"
plot_signal(rx_iq[1:min(end, 5000)], fs_hz, "Аналоговая петля: $(round(tone_freq_hz/1e6, digits=2)) МГц, Fs=$(round(fs_hz/1e6, digits=2)) МГц");
end
Далее выполняется запуск многочастотного сигнала. По алгоритму данная проверка полностью повторяет предыдущую, однако вместо гармонического сигнала используется функция generate_signal(), предназначенная для создания специализированных испытательных воздействий: многочастотных, линейно-частотно-модулированных (ЛЧМ) или двухчастотных сигналов. В настоящем примере формируется многочастотный сигнал, состоящий из 15 гармонических составляющих, распределённых в диапазоне частот от 10 МГц до 100 МГц.
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 "Принято $(length(rx_iq)) отсчетов"
plot_signal(rx_iq[1:min(end, 5000)], fs_hz, "Аналоговая петля, многочастотный сигнал");
end
В завершения выполняется остановка передачи и очистка памяти РИТМ SDR USRP.
RITM_SDR_API.disconnect(client)
RITM_SDR_API.close_log();
Данные примеры наглядно показывают совместное функционирование Engee и РИТМ SDR USRP, кроме того, второй пример позволяет оценить качество обработки многочастотных сигналов.
Приём сигнала беспроводной сети стандарта IEEE 802.11 (Wi‑Fi)
Следующая проверка демонстрирует практическое применение РИТМ SDR USRP для мониторинга радиоэфира, а именно для записи и анализа сигналов в диапазоне, занимаемом сетями стандарта IEEE 802.11 (Wi‑Fi). Проверка показывает возможность РИТМ SDR USRP функционировать в качестве обзорного широкополосного приёмного устройства для задач мониторинга эфира. В ходе проверки оцениваются корректность подключения, приём данных и возможность визуального анализа спектральной обстановки на заданном канале. Результаты могут служить основой для отладки и последующей разработки более сложных алгоритмов демодуляции и декодирования трафика сетей IEEE 802.11.
Стандарт IEEE 802.11 (Wireless Fidelity, Wi‑Fi) определяет технологию беспроводной передачи данных, позволяющую устройствам подключаться к локальной сети и выходить в интернет без использования проводного соединения посредством радиоволн. Частотные диапазоны, используемые в сетях IEEE 802.11:
- 2,4 ГГц (2400–2483,5 МГц) — наиболее распространённый диапазон, обеспечивающий хорошее проникновение сигнала сквозь препятствия, но подверженный помехам от других устройств (микроволновые печи, оборудование Bluetooth).
- 5 ГГц (5150–5850 МГц, разбит на несколько поддиапазонов) — обеспечивает более высокие скорости передачи данных и меньшую загруженность, однако хуже проникает через препятствия.
- 6 ГГц (5925–7125 МГц) — новый диапазон, применяемый в стандартах Wi‑Fi 6E и Wi‑Fi 7; предназначен для сверхвысоких скоростей и малых задержек, работает преимущественно на коротких расстояниях в пределах прямой видимости.
Рассмотрим структуру проверки по этапам. Определение частоты канала. Проверка начинается с вычисления центральной частоты целевого канала Wi‑Fi с помощью функции wifi_channel_frequency. Для выбора канала может использоваться информация о доступных сетях, например, команда netsh wlan show interfaces в среде Windows, отображающая текущий канал и частотный диапазон (2,4 ГГц или 5 ГГц) для беспроводных адаптеров.
RITM_SDR_API.@log_on
wifi_freq_mhz = wifi_channel_frequency("2.4GHz", 2)
RITM_SDR_API.@logmsg "Частота Wi-Fi: $wifi_freq_mhz МГц";
Алгоритм выполняет запись 600 000 отсчётов квадратурных составляющих (I/Q-данных) с помощью функции receive_iq. Данный объём соответствует отрезку сигнала длительностью приблизительно 19,5 мс при частоте дискретизации 30,72 МГц.
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 "записано $(length(iq_data)) отсчетов";
end
Отображение записанного сигнала. Если данные получены, они передаются функции plot_signal с параметром signal_type="wi-fi". Функция строит двухпанельный график: во временной и в частотной области (спектральная плотность мощности в децибелах относительно полной шкалы, сосредоточенная относительно заданной частоты канала Wi-Fi). График автоматически сохраняется в файл данных.
plot_signal(iq_data, 30.72e6, "Wi-Fi: $(wifi_freq_mhz) МГц", center_freq_hz=wifi_freq_mhz * 1e6, signal_type="wi-fi")
Разрыв соединения. После завершения работы с РИТМ SDR USRP соединение разрывается.
RITM_SDR_API.disconnect(client)
RITM_SDR_API.close_log();
Вывод
На примере двух экспериментальных проверок — работы в режиме аналоговой петли и приёма сигналов Wi-Fi в эфире — показана поддержка РИТМ SDR USRP в среде Engee.
В ходе измерений в захваченных данных уверенно наблюдался синусоидальный сигнал на заданной частоте 10 МГц. Аналогично, при передаче многочастотного сигнала в спектре были зафиксированы его основные составляющие, что подтверждает корректность формирования, передачи и приёма тестовых радиосигналов.
Эксперимент по приёму Wi-Fi сигнала продемонстрировал возможность использования РИТМ SDR USRP в качестве широкополосного приёмного устройства для анализа реальных радиосигналов. На полученном спектре отчётливо прослеживается характерная для сигналов Wi-Fi с OFDM-модуляцией форма спектральной огибающей. Это свидетельствует о правильной настройке приёмного тракта, достаточной полосе приёма и возможности захвата сложных широкополосных модулированных сигналов средствами РИТМ SDR USRP в среде Engee.