added docs
This commit is contained in:
@@ -0,0 +1,475 @@
|
||||
# Режимы обработки
|
||||
|
||||
Процессор (`data_processor`) превращает предобработанные коллекции в результат
|
||||
выбранного режима. Режимов четыре: pass-through, B-scan, GPR и 3D SAR; в списке
|
||||
**Mode** под кнопками управления они называются `pass_through`, `bscan`, `gpr` и `sar3d`.
|
||||
Режим и его настройки меняются
|
||||
на ходу, сбор при этом не перезапускается. Физический смысл обработки объяснён в
|
||||
главе [Как работает радар](principles.md), здесь — что делает каждый режим и каждая
|
||||
его настройка.
|
||||
|
||||
## Когда применяются настройки
|
||||
|
||||
Изменённая настройка обработки сразу уходит процессору. Программа записывает живые
|
||||
настройки в `python_app/runtime/processing_live.json` с новым номером ревизии.
|
||||
Процессор перечитывает файл примерно раз в 100 мс и пересчитывает новейшую
|
||||
сохранённую коллекцию, а в режиме B-scan — все сохранённые.
|
||||
|
||||
Если программа не смогла проверить или записать настройки, поля возвращаются к
|
||||
последним опубликованным значениям и появляется сообщение
|
||||
`Failed to update live processing settings: …` (в веб-интерфейсе —
|
||||
`Failed to apply web live settings: …`). Неверную правку таблицы антенн окно
|
||||
отклоняет сразу, сообщением **Invalid Antenna Geometry**. Если файл не принял сам процессор,
|
||||
он продолжает работать с последними принятыми настройками и пишет предупреждение в
|
||||
свой журнал `python_app/runtime/logs/data_processor.err.log`.
|
||||
|
||||
GPR и 3D SAR рисуют только результаты текущей ревизии. После изменения программа до
|
||||
0,8 с ждёт пересчитанный результат, поэтому старая картинка на экране не мелькает.
|
||||
Если процессор не работает, вид остаётся пустым до следующего результата.
|
||||
|
||||
Часть настроек только перерисовывает готовый результат: параметры вида pass-through,
|
||||
**Subtract mean A-scan** и **Scans to show (stopped)** в B-scan, **Render mode** в GPR,
|
||||
**SAR_CLOUD_THRESHOLD**, **Zoom (%)** и **SAR_MARK_ENABLE** в 3D SAR. Они сохраняются в
|
||||
профиль, но процессору не передаются.
|
||||
|
||||
У страниц GPR и 3D SAR свои поля для одинаковых по смыслу настроек: номера антенн,
|
||||
границы дальности, полоса частот, скорость, угол обзора, вычитание среднего,
|
||||
выравнивание пар. Процессор получает значения со страницы выбранного режима, а в
|
||||
pass-through и B-scan — со страницы GPR. Поэтому переключение между GPR и 3D SAR
|
||||
меняет и эти значения: угол обзора по умолчанию — 0° в GPR и 19,5° в 3D SAR.
|
||||
|
||||
Границы полосы частот (**Start (MHz)**, **Stop (MHz)**, **F_START MHz**,
|
||||
**F_STOP MHz**) не выходят за развёртку прибора, а у радиофотонного радара — за его
|
||||
выходную полосу. Значения за пределами программа подрезает к границе; если это
|
||||
случилось после изменения развёртки, в журнале появляется
|
||||
`Processing frequency limits were clamped to the active radar sweep.`
|
||||
|
||||
## Pass-through
|
||||
|
||||
Показывает предобработанный S21 каждой пары по частоте: модуль в дБ (20·lg|S21|) и
|
||||
фазу в градусах. Обработки нет; режим нужен, чтобы проверить сигнал, калибровку и
|
||||
референс. Подпись кривой — `in<вход>/out<выход>`. У одиночного LibreVNA и
|
||||
радиофотонного радара в режимах pass-through и B-scan снимается только пара `0:0`,
|
||||
если оба ВЧ-ключа в `mock` или у обоих одно положение. Результаты других режимов здесь не
|
||||
рисуются: после переключения на pass-through экран ждёт первого результата этого
|
||||
режима.
|
||||
|
||||
Все параметры этого режима только перерисовывают график.
|
||||
|
||||
| Параметр | По умолчанию | Что делает |
|
||||
| --- | --- | --- |
|
||||
| **Show magnitude** | включён | показывает график модуля |
|
||||
| **Show phase** | включён | показывает график фазы |
|
||||
| **Unwrap phase** | выключен | убирает скачки фазы на 360° (развёртывает её); шкала фазы подбирается по данным, без развёртки она закреплена на ±180° |
|
||||
| **Switch combos** | пусто — все пары | список пар `вход:выход` через запятую, например `0:0,1:0`. При ошибке в записи показываются все пары, а в журнале — `Invalid pass-through switch-combo filter.` |
|
||||
| **Fix magnitude Y range** | выключен | закрепляет шкалу модуля; без неё шкала подбирается по данным |
|
||||
| **Y min (dB)**, **Y max (dB)** | −100 и 0 | границы закреплённой шкалы, от −240 до 240 дБ; доступны при включённой **Fix magnitude Y range** |
|
||||
|
||||
## B-scan
|
||||
|
||||
Для каждой пары строит А-скан и укладывает А-сканы последовательных развёрток в
|
||||
изображение: по горизонтали номер развёртки (**Sweep #**), по вертикали дальность
|
||||
(**Range (m)**). На экране — одна пара; её выбирают в списке **B-scan pair** в
|
||||
секции ключей (пары записаны как `вход : выход`), а кнопка **Next Combination**
|
||||
переходит к следующей: сначала меняется выход, затем вход, после последней пары снова
|
||||
первая. В списке все пары, которые есть в истории, независимо от текущего списка пар
|
||||
сбора. Список и кнопка доступны только в режиме B-scan, кнопка — когда пар хотя бы
|
||||
две.
|
||||
|
||||
Как строится А-скан:
|
||||
|
||||
1. Из развёртки берутся точки в полосе от **Start (MHz)** до **Stop (MHz)**. Если их
|
||||
меньше двух, профиля нет, и развёртка в изображение не попадает.
|
||||
2. Обратное преобразование Фурье без окна.
|
||||
3. Отсчёт с временем t соответствует пути c·t (c = 299 792 458 м/с). Дальность
|
||||
отсчитывается от **Cut (m)**: d = (c·t − 2·Cut) / 2, показываются отсчёты с
|
||||
0 ≤ d ≤ **Max depth (m)**.
|
||||
4. Значение — модуль, вещественная часть или фаза отсчёта (**Axis**), умноженное на
|
||||
d в степени **Gain**.
|
||||
|
||||
| Параметр | По умолчанию | Пределы | Что делает |
|
||||
| --- | --- | --- | --- |
|
||||
| **Axis** | `abs` | `abs`, `real`, `phase` | что рисовать: модуль, вещественную часть или фазу (в радианах). Для `abs` — шкала от тёмного к светлому, для остальных — сине-бело-красная, симметричная относительно нуля |
|
||||
| **Cut (m)** | 0,824 | 0–2 м | дальность, с которой начинается изображение; всё ближе отрезается, а ось дальности начинается с нуля в этой точке |
|
||||
| **Max depth (m)** | 1,0 | 0,1–20 м | сколько метров дальности показывать после **Cut (m)** |
|
||||
| **Gain** | 1,0 | 0–3 | усиление с дальностью: значение умножается на d^Gain, чтобы далёкие слабые отражения были видны рядом с близкими |
|
||||
| **Start (MHz)**, **Stop (MHz)** | 100 и 8800, подрезаются по развёртке | в пределах развёртки | полоса частот, по которой строится А-скан |
|
||||
| **Scans to show (stopped)** | 50 | 1–1000 | сколько последних развёрток показывать и пересчитывать, когда сбор остановлен |
|
||||
| **Subtract mean A-scan** | выключен | — | вычитает из каждого столбца средний по показанным развёрткам А-скан: неподвижные отражения (горизонтальные полосы) пропадают, остаётся то, что меняется |
|
||||
|
||||
Во время сбора изображение показывает последние развёртки в пределах истории: не
|
||||
больше 50 и не больше ёмкости колец `preprocessed` и `results`. Если истории меньше,
|
||||
чем задано, в журнале появляется предупреждение
|
||||
`B-scan is set to show W sweeps but only R are retained; the image shows what history there is.`
|
||||
Если ось дальности изменилась (другие **Cut (m)**, **Max depth (m)** или полоса),
|
||||
изображение начинается заново.
|
||||
|
||||
Когда сбор остановлен, изменение настройки B-scan пересчитывает всё изображение:
|
||||
через 0,3 с после последнего изменения программа заново отправляет процессору
|
||||
сохранённые развёртки (до **Scans to show (stopped)** штук) и собирает картинку
|
||||
из ответов. Так одно изображение никогда не смешивает разные настройки. Пересчёт
|
||||
возможен, только если конвейер в этом сеансе запускала эта же программа и процессор
|
||||
ещё работает. Развёртки, которые процессор не вернул, в картинку не попадают, и в
|
||||
журнале появляется `B-scan replay recovered R of S re-sent sweeps; the image leaves the others out.`
|
||||
Если не вернулась ни одна, остаётся прежнее изображение из истории.
|
||||
|
||||
Если хотя бы один ВЧ-ключ работает с настоящим железом (`driver_mode: "native"`),
|
||||
B-scan требует ровно одну пару сбора:
|
||||
`B-scan with native switches requires exactly one run combo (now N)`.
|
||||
|
||||
## GPR
|
||||
|
||||
Строит изображение плоскости земли перед радаром когерентной обратной проекцией по
|
||||
всем выбранным парам и находит на нём объекты. Объекты отображаются на картинке и
|
||||
уходят клиентам TCP-локатора.
|
||||
|
||||
Порядок обработки:
|
||||
|
||||
1. Выбор антенн: номера из **Input positions** и **Output positions**, у которых есть
|
||||
строка в таблице геометрии. Пустое поле — все антенны с геометрией.
|
||||
2. Вычитание среднего предыдущих коллекций и поправка на движение (раздел «Общие
|
||||
шаги GPR и 3D SAR»).
|
||||
3. А-скан каждой пары в полосе **Start (MHz)**–**Stop (MHz)** с окном Ханна.
|
||||
4. Выравнивание пар по дальности (**PAIR_DEPTH_EQUALIZE**) и нормировка каждой пары
|
||||
на медиану её А-скана в пределах **Min depth (m)**–**Max depth (m)**; нормировка
|
||||
выполняется всегда.
|
||||
5. Сетка 300 × 300 точек на плоскости земли: поперёк — от крайних выбранных антенн
|
||||
с запасом 2 м в обе стороны, вдоль — дальность от 0,1 м до **Max depth (m)**.
|
||||
Положение плоскости земли относительно радара задают **Radar height (m)** и
|
||||
**Look angle (°)**.
|
||||
6. В каждой точке — сумма вкладов всех пар с весом компенсации дальности (степень
|
||||
**Range compensation power**, вес не больше 5). Яркость — модуль суммы; точки ближе
|
||||
**Min depth (m)** остаются нулевыми.
|
||||
7. Карта сглаживается и нормируется к максимуму, затем на ней ищутся объекты.
|
||||
|
||||
Поиск объектов. Программа берёт самый яркий пик и выделяет вокруг него связную
|
||||
область ярче 0,75 пика. Область меньше 10 см² отбрасывается. Положение объекта —
|
||||
взвешенный центр яркой части. Затем окрестность объекта гасится, и поиск
|
||||
повторяется. Он останавливается, когда очередной пик слабее **Object threshold fraction**
|
||||
от максимума карты, и не идёт дальше 10 шагов. Для каждого объекта считается оценка:
|
||||
|
||||
- `peak` — яркость пика;
|
||||
- `combined` — 0,45 × яркость + 0,25 × когерентность (насколько вклады пар совпадают
|
||||
по фазе) + 0,20 × превышение над местным фоном + 0,10 × контраст (отношение к
|
||||
фону). Каждое слагаемое приведено к диапазону 0–1.
|
||||
|
||||
Объект считается боковым лепестком более сильного, если он не ярче 0,85 его пика,
|
||||
сдвинут поперёк не меньше чем на 0,35 м, по дальности — не больше чем на 0,70 м, а
|
||||
среднеквадратичное по парам расхождение путей волны до обоих объектов не больше 0,2 м.
|
||||
С включённой **Remove sidelobe objects** такие объекты удаляются из списка и
|
||||
стираются с карты.
|
||||
|
||||
Какие объекты показываются и уходят локатору:
|
||||
|
||||
1. Только внутри окна **Visible X min (m)**–**Visible X max (m)** и
|
||||
**Visible Z min (m)**–**Visible Z max (m)**; то же окно задаёт границы графика.
|
||||
2. Отбор по числу: если **Max detected objects** (N) и **Draw top M objects** (M)
|
||||
больше нуля, то при числе объектов больше N не показывается ни один (сцена считается
|
||||
засорённой), иначе показываются M лучших по оценке.
|
||||
3. Фильтр приближения: объект показывается, только если он виден в
|
||||
**Approach min frames** коллекциях подряд и смещается так, как должен смещаться
|
||||
неподвижный предмет при движении радара к нему: между соседними коллекциями не
|
||||
больше 2 с, сдвиг поперёк не больше 0,45 м, сдвиг по дальности отличается от
|
||||
ожидаемого (скорость × cos угла обзора × время) не больше чем на 0,12 м или на
|
||||
0,85 ожидаемого, смотря что больше. При значении 1 фильтр выключен.
|
||||
|
||||
| Параметр | По умолчанию | Пределы | Что делает |
|
||||
| --- | --- | --- | --- |
|
||||
| **Tx geometry**, **Rx geometry** | из профиля | — | таблицы положений антенн, см. [Окно программы](desktop.md) |
|
||||
| **Input positions** | номера с геометрией, которые есть в парах сбора (если таких нет — все с геометрией) | номера через запятую | приёмные антенны в обработке; пустое поле — все с геометрией |
|
||||
| **Output positions** | так же для выходов | номера через запятую | передающие антенны в обработке; пустое поле — все с геометрией |
|
||||
| **Min depth (m)** | 2,0 | 0–50 м | ближняя граница дальности изображения и нормировки. Если она не меньше **Max depth (m)**, изображение пустое |
|
||||
| **Max depth (m)** | 14,0 | 0,1–50 м | дальняя граница сетки и изображения |
|
||||
| **Range compensation power** | 0,1 | 0–5 | степень компенсации ослабления с расстоянием: вклад умножается на ((R_tx·R_rx) / (R_tx,оп·R_rx,оп))^p, где R_tx,оп и R_rx,оп — расстояния от антенн пары до опорной точки на земле под серединой пары, на дальности 5 м; вес не больше 5. 0 — без компенсации |
|
||||
| **Object threshold fraction** | 0,7 | 0–1 | поиск объектов останавливается на пике слабее этой доли максимума |
|
||||
| **Score mode** | `combined` | `peak`, `combined` | как считать оценку объекта (см. выше) |
|
||||
| **Motion mode** | `int_minus` | `int_minus`, `int_focus` | поправка на движение: полная или только расфокусирующая часть, без сдвига по дальности |
|
||||
| **Look angle (°)** | 0,0 | от −90 до 90° | наклон радара вниз: задаёт плоскость земли, поправку на движение и фильтр приближения. При ±90° плоскость не определена (`Ground BP is undefined at a look angle of 90 degrees`) |
|
||||
| **Direction sign** | 1 | −1 или 1 | знак поправки фазы на движение. Подсказка в программе: +1 — более поздние частоты дальше. В 3D SAR не используется |
|
||||
| **Ignore socket speed** | выключен | — | включена — скорость берётся из поля **Speed (m/s)**; выключена — из клиента локатора, а поле подставляется, пока клиент 5 с не присылал скорость |
|
||||
| **Speed (m/s)** | 0,0 | от −100 до 100 м/с | скорость радара вдоль земли, положительная — к сцене. 0 — поправки нет. Редактируется при включённой **Ignore socket speed** |
|
||||
| **Render mode** | `heatmap` | `heatmap`, `objects_only` | вид: карта с объектами или только объекты (без пересчёта) |
|
||||
| **Max detected objects** | 5 | 0–10000 | N в отборе по числу; 0 — без отбора |
|
||||
| **Draw top M objects** | 2 | 0–10000 | M в отборе по числу; 0 — без отбора |
|
||||
| **Approach min frames** | 3 | 1–100 | длина цепочки коллекций для фильтра приближения; 1 — фильтр выключен |
|
||||
| **Start (MHz)**, **Stop (MHz)** | 3000 и 6000 | в пределах развёртки | полоса частот А-сканов |
|
||||
| **Radar height (m)** | 1,25 | 0–50 м | высота начала осей радара над землёй |
|
||||
| **Visible X min (m)**, **Visible X max (m)** | крайние антенны ± 2 м | от −100 до 100 м | окно объектов и графика поперёк; перепутанные min и max программа меняет местами, ширина не меньше 0,1 м |
|
||||
| **Visible Z min (m)**, **Visible Z max (m)** | 0 и 14 | 0–100 м | окно объектов и графика по дальности; так же не уже 0,1 м |
|
||||
| **Subtract mean of previous collections** | включён | — | см. «Общие шаги GPR и 3D SAR» |
|
||||
| **Mean count** | 10 | 0–10000 | сколько предыдущих коллекций усреднять; 0 — не вычитать |
|
||||
| **PAIR_DEPTH_EQUALIZE** | включён | — | выравнивание уровней пар по дальности |
|
||||
| **Remove sidelobe objects** | включён | — | удалять объекты, похожие на боковые лепестки |
|
||||
|
||||
Изменение **Max detected objects**, **Draw top M objects** и окна видимости
|
||||
передаётся процессору, только пока выбран режим GPR.
|
||||
|
||||
Изображение (**GPR coherent BP — ground plane**): по горизонтали **X (m)**, по
|
||||
вертикали **Range (m)**. В режиме `heatmap` — цветная карта и объекты белыми ромбами
|
||||
с оценкой (`0.83`); в режиме `objects_only` — только объекты красными кругами с
|
||||
подписью `0.83 | x=1.2 | z=5.4`, а к заголовку добавляется `Objects Only`. Передающие
|
||||
антенны показаны красными треугольниками, приёмные —
|
||||
синими; они видны, если **Visible Z min (m)** не больше нуля (тогда нижний край
|
||||
графика немного опускается ниже нуля).
|
||||
|
||||
GPR требует хотя бы двух разных пар сбора и таблиц геометрии, а в парах сбора должны
|
||||
быть все сочетания выбранных входов и выходов: для входов 0, 1 и выходов 0, 1 — пары
|
||||
`0:0`, `0:1`, `1:0`, `1:1`. Те же требования и сообщения — у 3D SAR. Сообщения при
|
||||
отказе:
|
||||
`GPR requires at least 2 distinct run combos (now N)`,
|
||||
`GPR requires non-empty Tx/Rx geometry in run_config`,
|
||||
`GPR input positions are missing from geometry config: [...]`,
|
||||
`GPR output positions are missing from geometry config: [...]`,
|
||||
`GPR run combos do not cover selected input/output positions: [...]`.
|
||||
Трассы коллекции должны идти в порядке списка пар сбора, иначе процессор отбрасывает
|
||||
коллекцию с ошибкой в своём журнале.
|
||||
|
||||
На рабочей станции с процессором Intel i7-8700 кадр GPR из 16 пар по 1031 точке
|
||||
считается примерно за 0,13 с.
|
||||
|
||||
## 3D SAR
|
||||
|
||||
Считает трёхмерное изображение объёма над землёй перед радаром на видеокарте NVIDIA
|
||||
(CUDA). Алгоритм и имена настроек взяты из исследовательского ноутбука
|
||||
`Multi_depthnorm_clean.ipynb` (ячейки 1 и 5); ноутбук хранится вне репозитория.
|
||||
|
||||
Порядок обработки:
|
||||
|
||||
1. Выбор антенн (**INPUT_IDX**, **OUTPUT_IDX**), вычитание среднего предыдущих
|
||||
коллекций и поправка на движение (раздел «Общие шаги GPR и 3D SAR»).
|
||||
2. А-скан каждой пары в полосе **F_START MHz**–**F_STOP MHz** с окном Ханна; у всех
|
||||
пар коллекции сетка частот должна совпадать.
|
||||
3. Выравнивание пар (**PAIR_DEPTH_EQUALIZE**) и нормировка на медиану
|
||||
(**SAR_NORMALIZE_EACH_FRAME**).
|
||||
4. Апертура: текущая коллекция и до **SAR_FRAME_RADIUS** предыдущих. Антенны
|
||||
предыдущих коллекций сдвигаются на путь, который радар проехал со скоростью
|
||||
**SPEED_M_S**; более старые коллекции входят с меньшим весом (от 1 у текущей до 0,8 у
|
||||
самой старой). Коллекции, которые не удалось обработать, пропускаются.
|
||||
5. Сетка вокселей с шагами **SAR_VOXEL_M X**, **SAR_VOXEL_M Y**, **SAR_VOXEL_M Z** в осях
|
||||
сцены: поперёк — от
|
||||
крайних выбранных антенн с запасом 2 м, по высоте — **SAR_Y_RANGE_M min**–**SAR_Y_RANGE_M max**,
|
||||
вдоль земли — все точки, расстояние которых по оси обзора лежит в пределах
|
||||
**MIN_DEPTH**–**MAX_DEPTH**. **SAR_X_SIZE_M** и **SAR_Z_SIZE_M** больше нуля
|
||||
меняют ширину и длину сетки относительно того же центра.
|
||||
6. Обратная проекция в каждом вокселе с компенсацией дальности
|
||||
(**SAR_USE_COMPENSATION**, степень **COMP_RANGE_POWER**, вес не больше 5).
|
||||
Воксели вне **MIN_DEPTH**–**MAX_DEPTH** по оси обзора остаются нулевыми.
|
||||
7. Сглаживание по Z и X (гауссово, 1,5 вокселя) и поиск максимума на опорных
|
||||
плоскостях — тех, что не ближе 0,3 м к верхней и нижней границе высоты.
|
||||
8. Фон кадра и CLEAN (см. ниже) и проекции.
|
||||
|
||||
Объём при настройках по умолчанию и антеннах примера с переключением стимула — около
|
||||
10,6 млн вокселей (232 × 126 × 364). Объём работы растёт обратно пропорционально
|
||||
произведению трёх шагов вокселя: если уменьшить все три вдвое, работы станет в восемь
|
||||
раз больше.
|
||||
|
||||
### Фон кадра (BG_GATE_ENABLE)
|
||||
|
||||
Фон — медиана объёма по рабочим вокселям (ненулевым, на опорных плоскостях). Отношение
|
||||
максимума кадра к фону показывает, насколько самый сильный отклик выделяется над
|
||||
типичным уровнем помех. Пороги 6 и 8,5 — постоянные ноутбука.
|
||||
|
||||
Если объектов CLEAN нет, **BG_GATE_ENABLE** управляет яркостью всего кадра: при
|
||||
отношении меньше 6 кадр не показывается, при 6 его максимум появляется на уровне
|
||||
**SAR_CLOUD_THRESHOLD**, с 8,5 кадр показывается в полную яркость, а между 6 и 8,5
|
||||
яркость растёт линейно.
|
||||
|
||||
Если CLEAN нашёл объекты, они видны всегда, каждый в своей шкале, при любом отношении
|
||||
кадра к фону. **BG_GATE_ENABLE** тогда прячет только остаток после вычитания, если его
|
||||
максимум меньше 6 фонов.
|
||||
|
||||
### CLEAN (SAR_CLEAN_ENABLE)
|
||||
|
||||
CLEAN разделяет сцену на объекты. На каждом шаге он строит изображение остатка на
|
||||
отдельной сетке поиска (4 × 10 × 4 см по X, Y и Z, на всю область сцены), находит
|
||||
точку, которая сильнее всего превышает порог, и вычитает её отклик из А-сканов всех
|
||||
пар. Порог для вокселя — меньшее из двух: 5,5 медианы положительных вокселей
|
||||
изображения и 4,5 медианы на той же дальности (по кольцам дальности шириной 0,25 м).
|
||||
Вычитание идёт, пока ни один воксель не превышает порог, но не больше 15 шагов.
|
||||
Шаги, точки которых лежат не дальше 0,35 м по X, 0,50 м по Y и 0,40 м по Z от первой
|
||||
точки группы, объединяются в один объект. Затем каждый объект строится отдельно и
|
||||
рисуется в своей шкале от 0 до 1 поверх остатка: слабый объект виден рядом с
|
||||
сильным. Уровень объекта — отношение его пика к фону кадра.
|
||||
|
||||
CLEAN работает только на апертуре из одного кадра: всегда при
|
||||
**SAR_FRAME_RADIUS** = 0, а при большем значении — пока пригодных предыдущих
|
||||
коллекций нет (сразу после **Start**, после очистки истории). Иначе статус сообщает,
|
||||
что CLEAN пропущен.
|
||||
|
||||
Сетка поиска CLEAN охватывает всю область сцены, даже если **SAR_X_SIZE_M** и
|
||||
**SAR_Z_SIZE_M** сужают сетку кадра: отражатель сразу за краем кадра вычитается и не
|
||||
оставляет внутри кадра боковой лепесток, похожий на объект.
|
||||
|
||||
### Рамки (SAR_MARK_ENABLE)
|
||||
|
||||
С **SAR_MARK_ENABLE** объекты CLEAN, которые не дальше 0,8 м друг от друга поперёк и
|
||||
0,5 м вдоль земли (в том числе цепочкой), объединяются в группу, и вокруг группы рисуется
|
||||
рамка. Центр группы — средняя высота её объектов, взвешенная по уровню (учитываются
|
||||
объекты не слабее 0,4 сильнейшего), верх — верхняя граница их откликов. Классы
|
||||
проверяются по порядку строк таблицы, рамка получает первый подходящий:
|
||||
|
||||
| Цвет | Класс | Условие |
|
||||
| --- | --- | --- |
|
||||
| серый пунктир | at the boundary — у края сцены | сильнейший объект группы у края: по оси обзора не дальше 0,25 м от **MAX_DEPTH** или 0,10 м от **MIN_DEPTH**, поперёк не дальше 0,2 м от края сетки или по высоте не дальше 0,4 м от её верха. Отклик может частично лежать за сценой, класс пока не определить |
|
||||
| красный | very low — очень низко (как мина) | центр не выше 0,15 м и верх не выше 0,45 м |
|
||||
| оранжевый | on the ground — на земле | центр не выше 0,35 м |
|
||||
| синий | above the ground — над землёй | остальные |
|
||||
|
||||
Легенда рамок — строкой под видами; она видна, когда включены и
|
||||
**SAR_MARK_ENABLE**, и **SAR_CLEAN_ENABLE**. Без рамок объекты пронумерованы и
|
||||
подписаны уровнем в фонах: `1: 12 bg`.
|
||||
|
||||
### Виды
|
||||
|
||||
Четыре вида: **Front (X-Y)**, **Side (Z-Y)**, **Top (X-Z)** — проекции максимума
|
||||
объёма спереди, сбоку и сверху — и **3D Projection**, наклонный вид. На видах с осью
|
||||
высоты пунктиром показана земля (Y = 0), на трёх плоских видах — положения выбранных
|
||||
антенн. Пустой квадрат отмечает максимум; его сторона — наибольшая из ширин отклика
|
||||
на половине максимума вдоль осей вида (не меньше одного вокселя). Это размер
|
||||
отклика, а не размер предмета. С объектами CLEAN и при пустом кадре квадрата нет.
|
||||
|
||||
**SAR_CLOUD_THRESHOLD** скрывает пиксели слабее заданной доли максимума, не меняя
|
||||
шкалу. **Zoom (%)** от 100 до 1000 уменьшает окно всех четырёх видов и плавно сдвигает
|
||||
его центр к самому яркому отклику; при 100% видна вся сцена.
|
||||
|
||||
Строка над видами показывает состояние:
|
||||
|
||||
| Текст | Когда |
|
||||
| --- | --- |
|
||||
| `SAR3D: waiting for measurements` | результатов ещё не было |
|
||||
| `SAR3D: waiting for projection data` | результат без изображений |
|
||||
| `SAR3D: ready — CUDA …` | изображение посчитано; разбор строки — ниже |
|
||||
| `SAR3D: no signal — No signal inside the selected depth range` | в пределах **MIN_DEPTH**–**MAX_DEPTH** нет сигнала |
|
||||
| `SAR3D: error — …` | ошибка настроек, данных или расчёта; текст ошибки |
|
||||
| `SAR3D: warning — …` | нет подходящей видеокарты или программа собрана без CUDA |
|
||||
|
||||
Строка `ready` складывается из частей через `|`, например:
|
||||
|
||||
```text
|
||||
SAR3D: ready — CUDA | peak 7.2 backgrounds (appears from 6, full scale from 8.5): scale ×0.83 | max X +0.12, Y +0.30, Z 4.85 m | level 0.0412 | zoom 100%
|
||||
```
|
||||
|
||||
| Часть | Что значит |
|
||||
| --- | --- |
|
||||
| `CUDA`, `CUDA; CLEAN: …` | расчёт на видеокарте и итог CLEAN: `CLEAN: K objects, each in its own scale (S subtractions, residual maximum R backgrounds)`, `CLEAN: no objects (…)` или `CLEAN skipped: it needs a one-frame aperture, this one has N frames` |
|
||||
| `peak N backgrounds` | отношение максимума кадра к фону; без объектов CLEAN дальше — состояние порога: `below the appearance level, frame empty`, `scale ×K` (кадр показан с множителем яркости K) или `full scale` |
|
||||
| `boxes: …` | число рамок каждого класса, например `boxes: 1 very low, 0 on the ground, 2 above the ground` (`at the boundary` — только если такие есть) |
|
||||
| `max X …, Y …, Z … m` | положение максимума в осях сцены; у X и Y указан знак |
|
||||
| `level …` | уровень, на который нормированы виды: максимум объёма до нормировки |
|
||||
| `zoom N%` | масштаб из **Zoom (%)** |
|
||||
|
||||
### Настройки 3D SAR
|
||||
|
||||
| Параметр | По умолчанию | Пределы | Что делает |
|
||||
| --- | --- | --- | --- |
|
||||
| **INPUT_IDX**, **OUTPUT_IDX** | номера с геометрией, которые есть в парах сбора (если таких нет — все с геометрией) | номера через запятую | приёмные и передающие антенны в обработке; пустое поле — все с геометрией |
|
||||
| **F_START MHz**, **F_STOP MHz** | 1500 и 6000 | в пределах развёртки | полоса частот А-сканов |
|
||||
| **MIN_DEPTH**, **MAX_DEPTH** | 2,0 и 8,0 | 0–50 и 0,1–50 м | границы расстояния по оси обзора: задают длину сцены вдоль земли и обнуляют воксели вне себя |
|
||||
| **SAR_VOXEL_M X**, **SAR_VOXEL_M Y**, **SAR_VOXEL_M Z** | 0,025, 0,02, 0,02 | 0,01–0,1 м | шаги сетки. Сглаживание задано в вокселях, поэтому от шагов зависит и оно, а с ним фон кадра и изображения объектов CLEAN; сетка поиска CLEAN от них не зависит |
|
||||
| **LOOK_ANGLE_DEG** | 19,5 | от −90 до 90° | наклон радара вниз: оси сцены, поправка на движение |
|
||||
| **Ignore socket speed** | выключен | — | как в GPR |
|
||||
| **SPEED_M_S** | 0,0 | от −100 до 100 м/с | скорость радара вдоль земли для поправки на движение и сдвига апертуры |
|
||||
| **SAR_FRAME_RADIUS** | 0 | 0–24 | сколько предыдущих коллекций добавлять в апертуру. 0 — только текущая (нужно разнесение антенн по высоте); больше нуля — нужна точная скорость |
|
||||
| **BP_GROUND_DEPTH_M** | 1,25 | 0–10 м | высота начала осей радара (строки Y = 0 таблиц антенн) над землёй |
|
||||
| **COMP_RANGE_POWER** | 0,3 | 0–2 | степень компенсации ослабления с расстоянием |
|
||||
| **SAR_USE_COMPENSATION** | включён | — | включает компенсацию дальности |
|
||||
| **SAR_NORMALIZE_EACH_FRAME** | включён | — | нормирует каждую пару на медиану её А-скана в пределах **MIN_DEPTH**–**MAX_DEPTH** |
|
||||
| **PAIR_DEPTH_EQUALIZE** | включён | — | выравнивание уровней пар по дальности |
|
||||
| **Subtract mean of previous collections**, **Mean count** | включён, 10 | 0–10000 | вычитание среднего предыдущих коллекций |
|
||||
| **BG_GATE_ENABLE** | включён | — | фон кадра (см. выше) |
|
||||
| **SAR_CLEAN_ENABLE** | включён | — | CLEAN (см. выше) |
|
||||
| **SAR_X_SIZE_M (0 = auto)** | 0 | 0–100 м | ширина сетки кадра поперёк; 0 — от антенн с запасом 2 м |
|
||||
| **SAR_Y_RANGE_M min**, **SAR_Y_RANGE_M max** | −0,5 и 2,0 | от −50 до 50 м | границы высоты; max должно быть больше min |
|
||||
| **SAR_Z_SIZE_M (0 = auto)** | 0 | 0–100 м | длина сетки кадра вдоль земли; 0 — по MIN_DEPTH–MAX_DEPTH |
|
||||
| **SAR_CLOUD_THRESHOLD** | 0,65 | 0–1 | только вид: скрыть пиксели слабее этой доли |
|
||||
| **Zoom (%)** | 100 | 100–1000 | только вид: приближение к самому яркому отклику |
|
||||
| **SAR_MARK_ENABLE** | включён | — | только вид: рамки вместо номеров |
|
||||
|
||||
Время расчёта на GTX 1060 при сцене по умолчанию: около 0,1–0,2 с на кадр, фон кадра
|
||||
добавляет около 0,1 с, CLEAN — ещё 0,4–0,5 с в зависимости от числа шагов.
|
||||
|
||||
Результат 3D SAR должен поместиться в слот кольца `results`. Если не помещается,
|
||||
статус сообщает, сколько нужно места, и советует увеличить шаги вокселя, сузить
|
||||
дальность или увеличить `rings.results.slot_size_bytes`.
|
||||
|
||||
### Видеокарта
|
||||
|
||||
3D SAR нужна видеокарта NVIDIA с драйвером. Ядра расчёта компилируются при запуске
|
||||
библиотекой NVRTC под установленную карту. Если при сборке не нашлись заголовки и
|
||||
библиотеки CUDA, программа собирается без 3D SAR, и в этом режиме над видами висит
|
||||
предупреждение
|
||||
`SAR3D requires an NVIDIA GPU with CUDA; this program was built without nvrtc.h, cuda.h, libnvrtc or libcuda. Install CUDA and rebuild.`
|
||||
Для карты старее, чем умеет установленная NVRTC, предупреждение советует собрать
|
||||
программу с NVRTC 12 (как это сделать — в главе [Разработка](development.md)).
|
||||
Остальные режимы видеокарты не требуют.
|
||||
|
||||
## Общие шаги GPR и 3D SAR
|
||||
|
||||
### Вычитание среднего предыдущих коллекций
|
||||
|
||||
Из S21 каждой пары вычитается
|
||||
комплексное среднее этой пары за до **Mean count** предыдущих коллекций. Остаётся то,
|
||||
что изменилось: неподвижные отражения и прямая связь антенн гасятся, движущиеся
|
||||
относительно радара предметы остаются. Процессор хранит столько коллекций, сколько
|
||||
нужно для среднего и апертуры, независимо от ёмкости колец.
|
||||
|
||||
### Поправка на движение
|
||||
|
||||
Время каждой частотной точки программа берёт из окна съёма
|
||||
развёртки: точки идут равномерно от начала окна до конца, а в режиме переключения
|
||||
стимула стадии одной частоты идут по очереди в порядке номеров выходов. Фаза каждой
|
||||
точки поворачивается на 4π·f·v·cos(p)·t / c (v — скорость, p — угол обзора, t —
|
||||
время точки относительно середины коллекции; в GPR ещё со знаком
|
||||
**Direction sign**), и вся коллекция приводится к одному моменту. При нулевой
|
||||
скорости поправки нет. В GPR с **Motion mode** = `int_focus` из поправки убирается
|
||||
её постоянная и линейная по частоте часть — чистый сдвиг по дальности. Скорость берётся из
|
||||
клиента локатора,
|
||||
если он присылал её в последние 5 с и флажок **Ignore socket speed** выключен,
|
||||
иначе — из поля скорости.
|
||||
|
||||
### Выравнивание пар по дальности (PAIR_DEPTH_EQUALIZE)
|
||||
|
||||
Для каждой пары считается
|
||||
плавный уровень А-скана по дальности: медиана в окне 1,5 м по блокам 0,10 м. Каждая
|
||||
пара умножается на положительный коэффициент, зависящий от дальности, так что её
|
||||
уровень становится средним геометрическим уровней всех пар. Различия между парами
|
||||
уходят, общий спад с дальностью и фаза сохраняются. Нужно хотя бы две пары.
|
||||
|
||||
### Нормировка на медиану
|
||||
|
||||
Каждая пара делится на медиану модуля своего А-скана в
|
||||
пределах границ дальности. В GPR выполняется всегда, в 3D SAR — с
|
||||
**SAR_NORMALIZE_EACH_FRAME**.
|
||||
|
||||
### Компенсация дальности
|
||||
|
||||
Отражение слабеет с расстоянием примерно как 1/(R_tx·R_rx). Вклад пары в точку
|
||||
умножается на ((R_tx·R_rx) / (R_tx,оп·R_rx,оп))^p, где R_tx,оп и R_rx,оп — расстояния от
|
||||
антенн пары до опорной точки на земле под серединой пары, на дальности 5 м; вес
|
||||
ограничен пятью.
|
||||
|
||||
## Геометрия
|
||||
|
||||
Антенны задаются в осях радара (X, Y, Z), изображения 3D SAR — в осях сцены (X, Y —
|
||||
высота над землёй, Z — вдоль земли); см. рисунок в главе
|
||||
[Как работает радар](principles.md). Ось X у обеих систем общая. Переход из осей
|
||||
сцены в оси радара при высоте h и угле обзора p:
|
||||
|
||||
Y_радар = (Y − h)·cos p + Z·sin p,
|
||||
Z_радар = −(Y − h)·sin p + Z·cos p.
|
||||
|
||||
Плоскость земли (Y = 0) в осях радара: Y_радар = (−h + Z_радар·sin p) / cos p. На ней
|
||||
лежит сетка GPR; при p = ±90° плоскость не определена, и программа отказывает
|
||||
(`Ground BP is undefined at a look angle of 90 degrees`).
|
||||
|
||||
«Глубина» в разных режимах означает разное:
|
||||
|
||||
| Где | Что означает |
|
||||
| --- | --- |
|
||||
| B-scan, **Cut (m)** и **Max depth (m)** | половина пути волны, отсчитанная от **Cut (m)** |
|
||||
| GPR, **Min depth (m)** и **Max depth (m)** | координата Z_радар точки на плоскости земли |
|
||||
| 3D SAR, **MIN_DEPTH** и **MAX_DEPTH** | координата Z_радар вокселя |
|
||||
| Нормировка А-скана | половина пути волны |
|
||||
|
||||
Волна в GPR и 3D SAR считается идущей со скоростью 3·10⁸ м/с (воздух), в B-scan —
|
||||
299 792 458 м/с.
|
||||
Reference in New Issue
Block a user