Документация Engee
Notebook

От MATLAB к Julia: оптимизация алгоритмов согласованной и доплеровской фильтрации для двухточечных радиолокационных целей

В современных радиолокационных системах высокое разрешение по дальности и скорости достигается за счёт использования сложных зондирующих сигналов — в частности, сигналов с линейной частотной модуляцией (ЛЧМ), — и последующей цифровой обработки принимаемых эхо-сигналов. Представленные реализации на языках MATLAB и Julia решают задачу моделирования вторичной обработки сигналов для двух точечных целей, различающихся по дальности и радиальной скорости.

Оба алгоритма опираются на следующие теоретические положения.

1. ЛЧМ-сигнал и согласованная фильтрация

Зондирующий импульс представляет собой косинусоидальное колебание с линейно изменяющейся мгновенной частотой. В комплексной форме эталонный сигнал на интервале длительности описывается выражением:

где:

  • — несущая частота;
  • — девиация частоты за время импульса ;
  • — весовое окно (окно Гаусса с параметром ), предназначенное для подавления боковых лепестков сжатого импульса.

Согласованная фильтрация выполняется в частотной области: вычисляется быстрое преобразование Фурье (БПФ) принимаемого сигнала и эталона, производится перемножение спектра принимаемого сигнала с комплексно сопряжённым спектром эталона, после чего выполняется обратное БПФ. На выходе согласованного фильтра формируется сжатый импульс, амплитуда которого пропорциональна энергии отражённого сигнала.

2. Импульсная последовательность и доплеровская обработка

Передающее устройство излучает импульсов с периодом повторения . Сигнал, отражённый от цели, находящейся на дальности и движущейся с радиальной скоростью , поступает на приём с задержкой:

и приобретает доплеровский сдвиг частоты:

В представленных алгоритмах дополнительно вводится перенос на промежуточную частоту (где — частота дискретизации), что позволяет использовать единую комплексную экспоненту:

После согласованной фильтрации каждого импульса формируется двумерная матрица «дальность — номер импульса», по второму измерению которой (медленному времени) производится БПФ. Пик полученного спектра соответствует доплеровской частоте, а следовательно, и радиальной скорости цели.

3. Формулы для определения дальности и скорости

Дискретное время квантуется с шагом . Номер дальностного канала (индекс строки в выходном массиве) однозначно связан с временной задержкой соотношением:

Масштаб по оси дальности на графиках пересчитывается в метры с использованием скорости света . Скоростные каналы определяются по формуле:

что соответствует положению максимума доплеровского спектра после выполнения БПФ по точкам.

Оба программных кода реализуют полный цикл обработки: синтез ЛЧМ-сигнала, моделирование эхо-сигналов с учётом задержки и доплеровского сдвига, согласованную и доплеровскую фильтрацию, а также визуализацию сжатых импульсов в логарифмическом масштабе (дБ) с нормировкой на максимум для каждой цели. Различие между вариантами заключается в способе формирования сигнала (векторизованный подход в Julia против циклического в MATLAB) и в синтаксисе вызова функций БПФ; при этом математическая идентичность результатов полностью сохраняется.

  • EngeeDSP – библиотека для цифровой обработки сигналов.
    Применение в примере: gausswin (окно Гаусса), fft / ifft (прямое и обратное быстрое преобразование Фурье) при согласованной фильтрации и доплеровской обработке.

  • MATLAB – интерфейс для вызова MATLAB из Julia.
    Применение в примере: макрос mat"..." для выполнения команд MATLAB (например, смена директории cd, запуск скрипта run MATLAB.m) и замер времени выполнения MATLAB-версии.

  • LinearAlgebra – библиотека для линейной алгебры.
    Применение в примере: в представленном коде явно не используется (оставлена для потенциальных матричных операций, например, для умножения матриц или решения систем уравнений).

  • FileIO – библиотека для загрузки и сохранения файлов различных форматов.
    Применение в примере: функция load для чтения изображений (plot_matlab.png, plot_julia.png) с последующим отображением в среде выполнения.

In [ ]:
using EngeeDSP, MATLAB, LinearAlgebra, FileIO

Фрагмент кода представленный ниже выполняет три действия:

  1. mat"cd $(@__DIR__)" – через интерфейс MATLAB меняет текущую рабочую директорию MATLAB на ту же, где находится текущий Julia-скрипт (чтобы MATLAB мог найти свой файл).
  2. @time mat"run MATLAB.m" – запускает MATLAB-скрипт MATLAB.m в среде MATLAB, замеряя время выполнения этой операции.
  3. img = load(...) и display(img) – загружает сгенерированный MATLAB-скриптом PNG-файл (plot_matlab.png) и отображает его в среде Julia.
In [ ]:
mat"cd $(@__DIR__)"
@time mat"run MATLAB.m"

img = load("$(@__DIR__)/plot_matlab.png")
display(img)
  9.801951 seconds (1.51 k allocations: 82.297 KiB)
No description has been provided for this image

Код на Julia логически идентичен исходному MATLAB коду, но оптимизирован по скорости. Основные изменения:

  1. Объединение экспонент — доплеровский сдвиг и перенос на промежуточную частоту (fs/4) скомбинированы в одну экспоненту exp(1im * 2π * (2vel/λ + fs/4) * t), что эквивалентно исходному перемножению двух экспонент.

  2. Удаление лишних переменныхsig_get_first и abs_sig_first не используются в финальном результате, поэтому они отсутствуют.

  3. Точность границ — благодаря тому, что t_del кратно 1/fs (5200 отсчётов), а t_imp даёт ровно 90 отсчётов, индексы rows = i_start:i_end полностью совпадают с ненулевыми позициями в исходном коде.

Таким образом, графики и числовые значения должны совпадать с точностью до машинной погрешности. Вы можете запустить оба варианта и сравнить выходные массивы (например, out_sig_julia), чтобы убедиться.

In [ ]:
@time include("Julia.jl")

img = load("$(@__DIR__)/plot_julia.png")
display(img)
  6.368002 seconds (180.82 k allocations: 992.492 MiB, 31.79% gc time, 1.07% compilation time)
No description has been provided for this image

Заключение

В работе рассмотрены две реализации алгоритма вторичной обработки радиолокационного сигнала — на языках MATLAB и Julia. Обе версии корректно воспроизводят основные этапы обработки:

  • формирование ЛЧМ-импульса с весовым окном;
  • моделирование эхо-сигналов от двух целей с различными параметрами: дальность км и км, скорости м/с и м/с;
  • согласованную фильтрацию в частотной области;
  • доплеровскую обработку по пачке из импульсов;
  • построение нормированных дальностных портретов.

Полученные результаты (см. рисунки plot_matlab.png и plot_julia.png) демонстрируют, что сжатые импульсы имеют характерную ширину, определяемую разрешающей способностью по дальности. Для ЛЧМ-сигнала с девиацией МГц и длительностью мкс разрешающая способность составляет около м. Отсутствие смещения по дальности для неподвижной цели и наличие корректного сдвига (в пределах нескольких метров) для движущейся цели подтверждают правильную работу доплеровской фильтрации.

Ключевое различие между реализациями заключается в производительности. Версия на Julia, использующая векторизованное заполнение только ненулевых отсчётов и предварительный расчёт экспоненциальных множителей, выполняется быстрее: с против с в MATLAB при сопоставимых условиях. Это обусловлено меньшим числом итераций и более эффективным управлением памятью. При этом оба подхода дают идентичные числовые результаты с точностью до машинной погрешности, что подтверждает корректность проведённой оптимизации.