AnyMath 文档
Notebook

从......到......

在现代雷达系统中,通过使用复杂的传感信号—特别是线性频率调制(频)的信号—以及对接收到的回波信号的后续数字处理来实现高范围和速度分辨率。 在MATLAB和Julia中给出的实现解决了两个不同范围和径向速度的点目标的二次信号处理建模问题。

这两种算法都基于以下理论原理。

1. LFM健美操!

探测脉冲是具有线性变化的瞬时频率的余弦波。 在复杂的形式中,参考信号在一个持续时间间隔内 由表达式描述:

哪里:

  • -载波频率;
  • -脉冲期间的频率偏差 ;
  • -权重窗口(带参数的高斯窗口 ),旨在抑制压缩脉冲的旁瓣。

在频域中执行匹配滤波:计算接收信号和参考的快速傅立叶变换(FFT),将接收信号的频谱与参考的复共轭频谱相乘,之后执行逆FFT。 在匹配滤波器的输出处形成压缩脉冲,其幅度与反射信号的能量成比例。

2. 脉冲序列和多普勒处理

发射装置发射 具有重复周期的脉冲 . 范围内从目标反射的信号 以径向速度移动 ,延迟接受预约:

并获得多普勒频移:

在所提出的算法中,引入了到中频的额外传输。 (哪里 -采样率),它允许使用单个复数指数:

在对每个脉冲进行一致滤波之后,形成二维"范围-脉冲数"。中根据其中的第二次测量(慢时间)执行FFT。 获得的频谱的峰值对应于多普勒频率,因此对应于目标的径向速度。

3. 确定范围和速度的公式

离散时间以增量量化 . 范围通道号(输出数组中的行索引)与时间延迟按比率唯一相关:

图中沿范围轴的刻度使用光速转换为米。 . 速度通道由公式确定:

最重要的是. 分。

这两个软件代码都实现了一个完整的处理周期:lfm信号的合成,考虑到延迟和多普勒频移的回波信号的建模,匹配和多普勒滤波,以及对数尺度(dB)压缩脉冲的可视化,每个目标的最大归一化。 变体之间的区别在于信号的生成方式(Julia中的矢量化方法与MATLAB中的循环方法)以及调用FFT函数的语法;的结果的数学身份被完全保留。

-AnyMathDSP是一个供男孩子使用的。
例中的应用: gausswin (高斯窗), fft / ifft (正向和反向快速傅立叶变换)具有一致的滤波和多普勒处理。

-MATLAB是。..
示例中的应用:宏 mat"..." 例如,更多字幕登记 cd,运行脚本 run MATLAB.m)并检测数量。

-线性代数
在示例中的应用:它在所呈现的代码中没有明确使用(它留给潜在的矩阵运算,例如,用于矩阵乘法或求解方程组)。

-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, использующая векторизованное заполнение только ненулевых отсчётов и предварительный расчёт экспоненциальных множителей, выполняется быстрее: с против $9{,}80S S在MATLAB中在可下载。 这是由于更少的迭代和更有效的内存管理。 与此同时,这两种方法都给出了相同的数值结果,精度高达机器误差,这证实了优化的正确性。