Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.66/47: Рейтинг темы: голосов - 47, средняя оценка - 4.66
 Аватар для kirpo
0 / 0 / 0
Регистрация: 09.03.2016
Сообщений: 86

ПО для РЛС

09.03.2016, 11:49. Показов 10811. Ответов 153

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Задача состоит в следующем: тема диплома: "Автоматизация настройки радиолокационных станций контроля надводной обстановки". Так как внедриться в ПО РЛС не представляется возможным, хочу написать симулятор или эмулятор, если так можно выразиться, интерфейса РЛС КНО. Хочу сделать это на Delphi. Собственно проблема состоит в реализации самого интерфейса (типа антенна крутится, цели появляются, присутствуют шумы и т. д.).

Заранее спасибо за помощь любого характера!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.03.2016, 11:49
Ответы с готовыми решениями:

Создать программно-математический комплекс для осуществления имитации обнаружения цели посредством РЛС
Летит самолет по известному закону. Предположительный закон движения цели прямолинейно равномерный. Для перехвата цели с аэродрома движется...

Задача РЛС
Доброго времени суток. Буду признателен, если кто-нибудь поможет с данной задачей или направит в правильное русло для поиска ее решения: ...

Моделирование РЛС
Здравствуйте. Есть задача смоделировать РЛС. Вопрос такой: с помошью какого тулбокса это будет проще всего сделать?

153
 Аватар для kirpo
0 / 0 / 0
Регистрация: 09.03.2016
Сообщений: 86
21.03.2016, 14:03  [ТС]
Студворк — интернет-сервис помощи студентам
Fulcrum_013, http://www.marcomm.ru/page/page166.html Буссоль-С - береговая РЛС. Функции автозахвата, сопровождения, определения скорости, курса и т. п. в ней есть, но они меня не интересуют, так как это третичная обработка. А я работаю над первичной, то есть как раз над обнаружением

Добавлено через 5 минут
Fulcrum_013,
набор концетрических окружностей, с набором радиусов. Это то что у тебя есть.
Это я хорошо представляю. А вот математика: как я уже говорил, как "размазать" этот массив значений по кругу. Вы уже предлагали вариант пересчёта (там где двойной цикл for), просто я его малость не понял
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
21.03.2016, 14:04
Цитата Сообщение от kirpo Посмотреть сообщение
А я работаю над первичной, то есть как раз над обнаружением
А она что не допплеровская? Т.е. скорость определяет по последовательным облучениям а не по смещению частоты?
0
 Аватар для kirpo
0 / 0 / 0
Регистрация: 09.03.2016
Сообщений: 86
21.03.2016, 14:05  [ТС]
Нет, там используется амплитудный метод радиолокации.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
21.03.2016, 14:07
Цитата Сообщение от kirpo Посмотреть сообщение
А вот математика: как я уже говорил, как "размазать" этот массив значений по кругу
Да они у тебя и есть по кругу. Их тебе не по кругу размазывать надо а пересчитать их проекцию из полярной в декартову систему. делается как уже написал: весовым усреднением секторов попавших в площадь пикселя.
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
21.03.2016, 14:10
x0,y0 - центр окружности
distPix - удаление = пропорция между макс. дальностью и радиусом окружности и текущим значением дальности
Az - азимут в радианах
тогда
X:=x0+cos(Az+pi/4) * distPix;
Y:=y0+sin(Az+pi/4) * distPix;
ну и Lum = уровень сигнала * 255 / макс сигнал;
color := rgbToColor(lum, lum, lum);

Добавлено через 47 секунд
это для простого пересчета, не учитывая суммирования сигналов в одной точке круга
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
21.03.2016, 14:29
Цитата Сообщение от krapotkin Посмотреть сообщение
это для простого пересчета, не учитывая суммирования сигналов в одной точке круга
Пойдет но со скрипом. на внешней окружности по 3 пикселя по окружности на шаг по азимуту, если на FullHD,
Тут как минимум нужно обратную проекцию пикселя из декартовой в полярную делать.
Delphi
1
2
3
4
5
6
7
8
9
dx=x-cx;
dy=y-cy;
Dist=dx*dx+dy*dy
if Dist<SquareMaxDist and dy>0 then
    Dist=Sqrt(Dist);
    Az=atan2(dx,dy);
    Lum=LumMatrix[1024*Az/(2*pi)][3200*Dist/ScreenSize]*255/MaxLum;    
    Canvas->Pixels[x][y]=rgbToColor(lum,lum,lum);
end;
Добавлено через 3 минуты
При этом Dist и Az для каждого пикселя const, соответственно их закешировать можно
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
21.03.2016, 14:31
т.е. зажигать все три ?
и чем дальше цель, тем ярче будет выглядеть?

Добавлено через 41 секунду
шаг по az не фиксированный ведь?
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
21.03.2016, 14:31
а при смешении яркостей для каждого пикселя кешируются не одно значение Dist и Az а всех в которые он попадает и коэффициент перекрытия.
0
 Аватар для kirpo
0 / 0 / 0
Регистрация: 09.03.2016
Сообщений: 86
21.03.2016, 14:33  [ТС]
По-моему вы как-то сложно всё описываете

А можно создать свой примитив "сектор кольца" (круг ведь на них разбивается, на такие сектора). Затем отрисовать эти сектора с заливкой цветом в соответствии со значением в таблице. Перед отрисовкой нужно произвести масштабирование относительно центра, чтобы такое количество секторов поместилось на экране
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
21.03.2016, 14:56
Цитата Сообщение от krapotkin Посмотреть сообщение
шаг по az не фиксированный ведь?
Az это азимут, Dist - дистанция, LumMatrix - это его матрица со значением замеров.
Т.е. получается табличка координат для выборки из матрицы. т.е. фактически таблица координат пикселей в полярной системе, в которой и дана матрица уровней сигнала.

Добавлено через 20 минут
Цитата Сообщение от kirpo Посмотреть сообщение
можно создать свой примитив "сектор кольца" (круг ведь на них разбивается, на такие сектора). Затем отрисовать эти сектора с заливкой цветом в соответствии со значением в таблице
Можно то можно. только у тебя в один пиксель по дальности 6 таких примитивов умещается, а по азимуту от 1024 до 1/3
0
 Аватар для kirpo
0 / 0 / 0
Регистрация: 09.03.2016
Сообщений: 86
21.03.2016, 15:59  [ТС]
Fulcrum_013,
Если не хватает скорости, то определяется какие ячейки грида видимы и обновляются только они. как при изменении данных так и при скролле грида.
Это делать как я понял через LeftCol, TopRow, VisibleColCount, VisibleRowCount? Ну, при первом заполнении грида я это сделаю, а как обновлять ячейки при скролле грида?
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
21.03.2016, 16:12
Цитата Сообщение от kirpo Посмотреть сообщение
а как обновлять ячейки при скролле грида
там событие есть OnTopLeftChanged . Срабатывает когда LeftCol или TopRow изменились. Тот же обработчик можно и на OnResize повесить.
0
 Аватар для kirpo
0 / 0 / 0
Регистрация: 09.03.2016
Сообщений: 86
21.03.2016, 18:51  [ТС]
ОК, спасибо

Добавлено через 2 часа 19 минут
Fulcrum_013, проблема с обновлением грида. Даже если я тупо задаю обновление только одной ячейки таблицы:
Delphi
1
Form2.StringGrid1.Cells[1,1]:=FloatToStr(matrix_por[1,1]);
, то лагает всё равно также.

Добавлено через 53 секунды
Вот процедура полностью:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.Porog(); //Ïðîöåäóðà èçìåíÿåò çíà÷åíèÿ â ÿ÷åéêàõ òàáëèöû
var                       //îò óñòàíîâëåííîãî ïîðîãà
k: integer;
l: integer;
begin
  man_porog:=TrackBar1.Position;
  label3.Caption:=FloatToStr(man_porog);
  for k:=1 to 3200 do
    for l:=1 to 1024 do
      begin
        matrix_por[k,l]:=matrix_por[k,l]-man_porog;
        //Form2.StringGrid1.Cells[k,l]:=FloatToStr(matrix_por[k,l]);
        //Form2.StringGrid1.Cells[1,1]:=FloatToStr(matrix_por[1,1]);
      end;
end;
Добавлено через 50 секунд
Хмм... беда какая-то с кодировкой
0
21.03.2016, 18:59

Не по теме:

поскольку упоминалось "для надводной обстановки", речь идёт об обычных РЛС различных диапазонов,
и РЛС с "фазированной решеткой". *типа как на коробке "вице-адмирал Ушаков".
также, предполагается, что актуальна задача целеуказания для тех перезаряжаемых маленьких спаренных ракеток,
которые выскакивают из трюмо и их турель умеет быстро-быстро крутиться, чтобы успеть "наставиться", нацелиться,
и попасть в ПКР, которая летит в корабль, в том числе с сверхзвуковой скоростью до 3,5Маха.
--
и актуальна задача(вы же актуальный диплом собираетесь делать?), - отсечь шумы.
получающиеся не только от постановки помех, но и переотражений от волн, которые есть солевой раствор,
иногда рассол, в т.ч. на фоне солнца, льда, полых плавающих алюминиевых шариков, надутых плавучих
кусочков с металлизированной оболочкой, выпущенных с подлодки или дна, - чего угодно.
--
для отсечения шумов ещё никто не пробовал - запускать привязанный проводами воздушный шарик,
на котором лишь сегменты приёмника. которые могут давать хорошую картинку именно помех.
вроде бы, витая пара: - работает лишь на длине 100 метров, но это не так. есть выпускающийся
развИтый провод(20рублей-метр), с экранированными 2мя парами, он работает до 300 метров на 100mbit.
*если вы это не в модный сетевой чип i219 мощностью 0,5Ватт будете вставлять, а в нормальный -
-оно будет работать - и вы уже можете иметь ловилку шумов на высоте 300м от верхушки мачты.
--
*в штиль. при ветре на высоте -200-250 метров - и это всё равно именно немало.
если вам нужна б0льшая высота - можно пробовать взять 4 качественных телевизионных коаксиала.
и, скорее всего, с хорошей сетевухой это будет работать на 2, а то и может даже на 3 километра.
*коаксиал тяжелый, - но диплому вашему - пофиг. если понадобится, сумеют сделать лёгкий коаксиал).

0
 Аватар для kirpo
0 / 0 / 0
Регистрация: 09.03.2016
Сообщений: 86
21.03.2016, 19:06  [ТС]
jdzvk, тема моего диплома: "Автоматизация настройки радиолокационного изображения радиолокационных станций контроля надводной обстановки", моя задача - автоматизировать то, что есть, а не придумать новый метод фильтрации. И ещё. Моя РЛС стоит на берегу и отношения к кораблям и суднам не имеет (точней имеет - они для неё цели и всё )
0
21.03.2016, 19:36

Не по теме:

kirpo, -аххах), -да? сори, плохо прочетал).
а ваша аватарка, с виду - как будто вы спите и видите, как докторскую из диплома сделать).
-тут же что главное - застолбить тему.) ..а с берега воздушный шарик даже круче пускать. хоть змея.
и диплом, и баловство, и дажеж какая-нибудь баба, клюнуть, может
--
*и вообще не колотит не только ПКР, а дажеж холодными брызгами от форштевня. -угощались когда-нибудь?)
кстати, почему те ракетки по 1шт на направляющей до сих пор делают - непонятно.
вероятность поражения ПКР 0,9 или 0,98 всё равно не устраивает, и запускают их по две.
а если оно начало разгоняться на финальном участке, и действительно идёт с 3,5Маха
- 4 ракетки с вероятностью поражения 0,4-0,6 одновременно - уже 1,2-1,8 - что приятно.
а перезарядить - и вручную подскочить могут. экстрим иногда с крабами делает чудеса

0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
21.03.2016, 19:51
Цитата Сообщение от kirpo Посмотреть сообщение
Даже если я тупо задаю обновление только одной ячейки таблицы:
А задаете в цикле или вне цикла?
Буквально с недельку назад тоже большую табличку в грид выкидывал. около 2500x5 всю целиком. как там и росла. Правда на Билдере, но грид тот же, правда вместо FloatToStr IntToHex был, ну и массивы в дельфе конечно тормозные но не настолько чтобы пересчет лагал. да и 20 лет назад большие таблицы в нее без проблем выкидывались, значит дело не в мощности. Да и 3 миллиона флоатов сложить для 386-го может еще и задача, а первый пенек даже не заметил бы. Да кстати, ты в начале количество то строк столбцов ей укажи
Delphi
1
2
StringGrid.RowCount=1024;
StringGrid.ColCount=3200;
До цикла

Добавлено через 5 минут

Не по теме:

Цитата Сообщение от jdzvk Посмотреть сообщение
*и вообще не колотит не только ПКР, а дажеж холодными брызгами от форштевня. -угощались когда-нибудь?)
кстати, почему те ракетки по 1шт на направляющей до сих пор делают - непонятно.
вероятность поражения ПКР 0,9 или 0,98 всё равно не устраивает, и запускают их по две.
а если оно начало разгоняться на финальном участке, и действительно идёт с 3,5Маха
- 4 ракетки с вероятностью поражения 0,4-0,6 одновременно - уже 1,2-1,8 - что приятно.
а перезарядить - и вручную подскочить могут. экстрим иногда с крабами делает чудеса
Потому что направляющие уже давно не актуально. просто трюм с ячейками из которого эти ракетки стартуют. Как ПКР так и зенитные. кстати 4 ракетки с вероятностью 0,6 это 0,9744 вероятность поражения цели.

0
 Аватар для kirpo
0 / 0 / 0
Регистрация: 09.03.2016
Сообщений: 86
21.03.2016, 20:09  [ТС]
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
количество то строк столбцов
количество строк/столбцов задано через Object Inspector. Оно фиксировано и меняться не будет.
Сейчас значения в таблице меняются вот этой процедурой, пока цикл от 1 до 100 по k, и от 1 до 100 по l ничего не виснет, начиная от 500 - виснет. Всё это происходит в цикле, ещё и в двойном (а как по другому обновить все ячейки грида?).
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.Porog(); //Процедура изменяет значения в таблице
var                                            //в зависимости от установленного порога
a,b,c,d,k,l: integer;
begin
  a:=1;
  b:=100;
  c:=1;
  d:=100;
  man_porog:=TrackBar1.Position;
  label3.Caption:=FloatToStr(man_porog);
  for k:=a to b do
    for l:=c to d do
      begin
        Form2.StringGrid1.Cells[k,l]:=FloatToStr(matrix_por[k,l]-man_porog);
      end;
end;
Добавлено через 8 минут
Может быть так виснет из-за того, что, например, если я перемещу ползунок TrackBar с 0 до 50, то будут просчитываться все промежуточные положения TrackBar, т. е. 1, 2, 3, 4...49 и 50?

Добавлено через 3 минуты
Цитата Сообщение от kirpo Посмотреть сообщение
Может быть так виснет из-за того, что, например, если я перемещу ползунок TrackBar с 0 до 50, то будут просчитываться все промежуточные положения TrackBar, т. е. 1, 2, 3, 4...49 и 50?
Не, похоже не из-за этого.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
21.03.2016, 20:12
Цитата Сообщение от kirpo Посмотреть сообщение
(а как по другому обновить все ячейки грида?).
А по другому никак.
Можно вот так сделать
StringGrid.Cols[0].BeginUpdate();
а после цикла
StringGrid.Cols[0].EndUpdate();
Цитата Сообщение от kirpo Посмотреть сообщение
то будут просчитываться все промежуточные положения
Смотри когда у тебя события срабатывает и с какими значениями тракбара. Если такие дела то обновлять только видимую часть таблицы.
0
 Аватар для kirpo
0 / 0 / 0
Регистрация: 09.03.2016
Сообщений: 86
21.03.2016, 20:15  [ТС]
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Смотри когда у тебя события срабатывает и с какими значениями тракбара. Если такие дела то обновлять только видимую часть таблицы.
Лагает не из-за этого, потому что если TrackBar на 1 изменить всё равно лагает.
А может есть какой-то другой способ отображения содержимого столбца кроме StringGrid, может быть более производительный?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.03.2016, 20:15

РЛС складов УПП
ковырял RLS для упп везде вродебы все работает, за исключением разграничения справочника складов. ставлю в группе ограничение только на...

Модель сигнала многофункциональной РЛС
Необходимо создать модель сигнала многофункциональной РЛС а Матлаб с возможностью выделения огибающей (вейвлет анализ)!!! Помогите...

Индикатор кругового обзора РЛС
Помогите пожалуйста разработать программную модель индикатора кругового обзора РЛС для следующих исходных данных: -разметка ИКО в...

Отображение круговой развёртки РЛС
Здравствуйте! Мне необходима программа, которая имитирует отображение круговой развёртки радиолокационной станции об окружающей обстановке,...

Модель сигнала многофункциональной РЛС
Необходимо создать модель сигнала многофункциональной РЛС с возможностью выделения огибающей (использовать вейвлеты) Очень нужно, помогите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru