Вы находитесь на странице: 1из 56

МИНОБРНАУКИ РОССИИ

федеральное государственное бюджетное образовательное


учреждение высшего образования
«Национальный исследовательский университет «МЭИ»

Институт ИРЭ
Кафедра ФОРС

ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА


(бакалаврская работа)

Направление 11.03.01 Радиотехника


(код и наименование)

Направленность (профиль) Радиотехнические средства передачи,

приема и обработки сигналов

Форма обучения очная


(очная/очно-заочная/заочная)

Тема: Алгоритм выбора параметров


квазинепрерывного сигнала при сопровождении цели в
составе группы
Студент ЭР-11-16 Кудряков К.А.
группа подпись фамилия и инициалы

Научный
руководитель к.т.н. доцент Лишак М.Ю.
уч. степень должность подпись фамилия и инициалы

Консультант к.т.н. начальник СКБ-8 Виноградов В.В.


уч. степень должность подпись фамилия и инициалы

Консультант
уч. степень должность подпись фамилия и инициалы

«Работа допущена к защите»


Зав. кафедрой к.т.н. доцент Сафин А.Р.
уч. степень звание подпись фамилия и инициалы

Дата
Москва, 2020
МИНОБРНАУКИ РОССИИ
федеральное государственное бюджетное образовательное
учреждение высшего образования
«Национальный исследовательский университет «МЭИ»

Институт ИРЭ
Кафедра ФОРС

ЗАДАНИЕ
НА ВЫПУСКНУЮ КВАЛИФИКАЦИОННУЮ РАБОТУ
(бакалаврскую работу)

Направление 11.03.01 Радиотехника


(код и наименование)

Направленность (профиль) Радиотехнические средства передачи,

приема и обработки сигналов

Форма обучения очная


(очная/очно-заочная/заочная)

Тема: Алгоритм выбора параметров


квазинепрерывного сигнала при сопровождении цели в
составе группы
Студент ЭР-11-16 Кудряков К.А.
группа подпись фамилия и инициалы

Научный
руководитель к.т.н. доцент Лишак М.Ю.
уч. степень должность подпись фамилия и инициалы

Консультант к.т.н. начальник СКБ-8 Виноградов В.В.


уч. степень должность подпись фамилия и инициалы

Консультант
уч. степень должность подпись фамилия и инициалы

Зав. кафедрой к.т.н. доцент Сафин А.Р.


уч. степень звание подпись фамилия и инициалы

Место выполнения работы кафедра ФОРС НИУ «МЭИ»,


ПАО «НПО «Алмаз»

2
СОДЕРЖАНИЕ РАЗДЕЛОВ ЗАДАНИЯ И ИСХОДНЫЕ ДАННЫЕ

1. Изучение обработки квазинепрерывного сигнала с высокой частотой


повторения.
2. Процедура назначения параметров квазинепрерывного сигнала при
сопровождении цели.
3. Изучение алгоритма параметров квазинепрерывного сигнала при
сопровождении цели при присутствии других целей. Рассматриваются случаи,
когда выбирается изолированное пространство с несколькими целями и
необходимо выбрать единственную правильную цель.
4. Программная реализация на языке С++
5. Исходные данные: частота повторения импульса, время импульса, установка
строба задержки, расстояние от одной цели до другой, дальность до цели,
максимально возможная скорость сближения с целью.

ПЕРЕЧЕНЬ ГРАФИЧЕСКОГО МАТЕРИАЛА

Количество листов 5

Количество слайдов в презентации 10 - 12

РЕКОМЕНДУЕМАЯ ЛИТЕРАТУРА

1. Многофункциональные радиолокационные системы: учеб. Пособие для


вузов/ Дудник П.И., Ильчук А.Р., Татарский Б.Г. – М.: Дрофа, 2007.
2. Трухачев А.А. Радиолокационные сигналы и их применения: – М.:
Воениздат, 2005.
3. Шилдт Г. С++ для начинающих. – М.: ЭКОМ Паблишерс, 2013.

Примечания:
1. Задание брошюруется вместе с выпускной работой после титульного листа (страницы задания
имеют номера 2, 3).
2. Отзыв руководителя, рецензия(и), акт проверки на объем заимствований и согласие студента на
размещение работы в открытом доступе вкладываются в конверт (файловую папку) под
обложкой работы.

3
Содержание
Аннотация..................................................................................................................................5
ВВЕДЕНИЕ ..................................................................................................................................6
1. ФОРМИРОВАНИЕ И ОБРАБОТКА КВАЗИНЕПРЕРЫВНОГО РАДИОЛОКАЦИОННОГО
СИГНАЛА ....................................................................................................................................7
1.1. Квазинепрерывный сигнал ......................................................................................... 7
1.2. Определения дальности цели по параметрам отраженного радиосигнала ......... 10
1.3. Измерение дальности ............................................................................................... 11
1.4. Максимальная однозначно измеряемая дальность ............................................... 12
2. АЛГОРИТМ НАЗНАЧЕНИЯ ПАРАМЕТРОВ КВАЗИНЕПРЕРЫВНОГО СИГНАЛА ПРИ
СОПРОВОЖДЕНИИ ЦЕЛИ С РЕЗУЛЬТАТАМИ РАСЧЁТА В MATHCAD ....................................... 15
2.1. Расчет параметров сигнала при сопровождении одной цели. ............................... 15
2.2. Расчет параметров сигнала при сопровождении двух целей. ................................ 24
3. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ АЛГОРИТМА НА ЯЗЫКЕ ПРОГРАММИРОВАНИЯ С++ .... 29
ЗАКЛЮЧЕНИЕ ........................................................................................................................... 37
ЛИТЕРАТУРА ............................................................................................................................ 38
ПРИЛОЖЕНИЕ .......................................................................................................................... 39

4
Аннотация

В данной работе рассматриваются параметры и основные свойства


квазинепрерывного радиолокационного сигнала, а также выбор правильных
значений при сопровождении одной и несколько целей.

Работа содержит алгоритм выбора параметров сигнала, программу модели


данного алгоритма и сравнение результатов при сопровождении двух целей.

5
ВВЕДЕНИЕ

Главной задачей радиолокации является наблюдение радиотехническими


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

В данной работе разрабатывается алгоритм определения параметров


квазинепрерывного сигнала при сопровождении одной или нескольких целей.
Квазинепрерывные сигналы широко используются в современных
радиолокационных станциях (РЛС). РЛС, которые используют эти сигналы,
называются импульсными. Импульсные РЛС решают задачи обнаружения и
сопровождения целей в пространстве.

Исследование производится на основе разработанных алгоритмов в среде


MathCAD и С++.

6
1. ФОРМИРОВАНИЕ И ОБРАБОТКА КВАЗИНЕПРЕРЫВНОГО
РАДИОЛОКАЦИОННОГО СИГНАЛА

1.1. Квазинепрерывный сигнал

Один из основных режимов работы РЛС при обнаружении воздушных


целей использует квазинепрерывные сигналы с высокой частотой повторения
импульсов и малой скважностью, что позволяет однозначно обнаруживать цели
с разрешением их по скорости в области доплеровских частот, свободных от
помех от поверхности. Основным недостатком является существенная
неоднозначность измерения дальности и, как следствие, большое число
«слепых» зон по дальности.

Для устранения этих недостатков применяют следующие методы: 1)


перебор частот повторения излучаемых импульсов; 2) вобуляцию периода
повторения импульсов; 3) межимпульсную низкочастотную линейно-частотную
модуляцию несущего колебания. Каждый из методов имеет достоинства и
недостатки. Перебор частот повторения позволяет получить высокую точность
измерения дальности, раскрыть неоднозначность ее измерения по результатам
первичных измерений, устраняет «слепые» дальности. Однако в этом случае
необходимо использование большого числа зондирующих импульсов (до 20
пачек), что значительно уменьшает скорость обзора сектора сканирования.

Квазинепрерывные сигналы (КН сигналы) являются одним из основных


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

7
Измерение дальности радиолокатором становится возможным благодаря
некоторым свойствам распространения радиоволн.

Электромагнитные волны отражаются, при встрече с проводящей


поверхностью. Если отраженная волна может быть принята в точке, откуда
ведется излучение, это свидетельствует о наличии препятствия в направлении
излучения.

Электромагнитные волны перемещаются с одинаковой скоростью,


примерно равной скорости света.

В данной работе рассматривается система, в которой применяется


активная радиолокация с пассивным ответом, использующая импульсные
сигналы, т.е. при обнаружении цели используется отраженный сигнал от этой
цели.

Данный способ позволяет обнаружить цели, не являющиеся источниками


собственных радиоизлучений.

Если система использует импульсные сигналы это означает, что система


излучает колебания высокой частоты в виде периодически повторяющихся
импульсов, в промежутки времени между импульсами происходит прием
отраженных импульсов.

С выхода приемника принятые импульсы поступают на устройство,


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

Для сопровождения целей используются ограниченные во времени


последовательности импульсов, которые принято называть «пачками»
импульсов. Для работы по целям применяются когерентные пачки
прямоугольных радиоимпульсов. Когерентной называют последовательность
радиоимпульсов с одинаковыми или изменяющимися по известному закону

8
начальными фазами. Когерентные пачки прямоугольных радиоимпульсов,
длительность которых много больше времени запаздывания сигнала, а период
повторения импульсов в пачке много меньше этого времени, - принято называть
квазинепрерывным сигналом.1

Когерентно-импульсный сигнал представлен на рисунке 1.1.

Рисунок 1.1 – Когерентно-импульсный сигнал

Описанный Квазинепрерывный сигнал имеет ряд параметров, которые могут


меняться в широких пределах в процессе работы РЛС.

К временным параметрам относятся:

τи – длительность импульса (выбирается, в первую очередь, исходя из


скважности, с которой может работать передатчик)
Tп – период повторения;
Tc = n ∙ Tп – длительность сигнала (для пачек импульсов).

Q – скважность импульса;
𝜏
Q=
𝑇

𝜏 − длительность импульса

Т − период импульсов

1
Многофункциональные радиолокационные системы: учеб. Пособие для
вузов/ Дудник П.И., Ильчук А.Р., Татарский Б.Г. – М.: Дрофа, 2007.
9
Частотными параметрами является:

Fп=1/Тп – частота повторения импульсов в пачке для импульсных


последовательностей (определяется решаемой тактико-технической задачей и
может варьироваться от единиц до сотен килогерц)

1.2. Определения дальности цели по параметрам отраженного


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

Радиолокационные сигналы, отраженные от различных элементов


разрешения по дальности, поступают на вход приемного устройства РЛС в
различные моменты времени, поэтому обзор пространства по дальности является
последовательным.

На рисунке 1.2 показано временное положение двух импульсных


отраженных сигналов (ОС) от целей, находящихся на различных дальностях Rц1
и Rц2. Момент приема каждого сигнала задержан относительно начала.

Время, за которое отправленный радиоимпульс будет принят приемным


устройством РЛС:
2𝑅
𝑡з = ,
𝑐

где с- скорость распространения электромагнитных волн. 2

2
Трухачев А.А. Радиолокационные сигналы и их применения: – М.:
Воениздат, 2005.
10
Рисунок 1.2 – Временное положение отраженных от целей сигналов для
одиночного радиоимпульса

1.3. Измерение дальности

Радиолокатор излучает в пространство короткий радиоимпульс очень


высокой мощности, называемый зондирующим импульсом. Зондирующий
импульс фокусируется в определенном направлении при помощи направленной
антенны и распространяется в пространстве со скоростью света.

Дальность до цели может быть измерена при помощи обыкновенного


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

Так как распространение радиоволн происходит с постоянной известной


скоростью (равной скорости света, c), то дальность может быть определена по
времени задержки принятого сигнала относительно зондирующего. Измеренная
дальность от радиолокатора до цели называется наклонной дальностью цели.
Наклонная дальность цели – это расстояние по прямой (по линии визирования)
от антенны радиолокатора до облучаемого объекта. Так как при обнаружении
11
цели электромагнитная волна проходит путь до цели и обратно, то время
прохождения сигнала делится на два, таким образом, мы определяем время
движения импульса в одну сторону. Дальность умножена на два, так как
импульс должен пройти путь до цели и обратно.

Тогда дальность до цели можно определить по формуле:

𝑐∗𝑡
𝑅=
2

Где t – время задержки сигнала. Время, за которое отраженный сигнал дойдет


обратно до приемника.

с – скорость света 3

1.4. Максимальная однозначно измеряемая дальность

Как известно, основным методом, используемым в радиолокаторах для


измерения дальности до цели, является импульсный метод дальнометрии. В
основе этого метода лежит измерение времени запаздывания отраженного от
цели импульса (эхо-сигнала) относительно момента его излучения, т.е.
относительно зондирующего импульса. Таким образом, обязательным условием
корректного функционирования данного метода является рассмотрение эхо-
сигнала в паре со „своим“ зондирующим импульсом. Однако во время работы
радиолокатора, зондирующие импульсы следуют один за другим через период
зондирования, и может возникнуть ситуация, когда эхо-сигнал, порожденный i-м
зондирующим импульсом, поступит на приемник уже после того, как будет
излучен следующий, (i+1)-й, зондирующий импульс. Очевидно, что это приведет
к ошибочному измерению времени запаздывания отраженного импульса и,

3
Многофункциональные радиолокационные системы: учеб. Пособие для
вузов/ Дудник П.И., Ильчук А.Р., Татарский Б.Г. – М.: Дрофа, 2007.
12
соответственно, дальности до цели. В подобных ситуациях говорят о
неоднозначности измерения дальности цели. Пример представлен на Рис.1.3.

Рис. 1.3 Обнаружение цели с неоднозначной дальностью.

Зондирующие импульсы соответствуют нулевой дальности и следуют с


периодом, равным времени распространения электромагнитной волны на
дальность 300 км и обратно. Кроме них на рисунке показаны эхо-сигналы двух
целей: на дальности 200 км и на дальности 400 км. На нулевой дальности
находится радиоприемник и передатчик передающий радиоимпульсы.

Эхо-сигнал первой цели имеет время запаздывания, меньшее периода


зондирования, и неоднозначность измерения дальности не возникает, поскольку
эхо-сигнал легко идентифицируется как отражение от цели первого
зондирующего импульса.

Эхо-сигнал второй цели имеет время запаздывания больше периода


зондирования. В этом случае возникает неоднозначность измерения дальности,
поскольку без дополнительной информации невозможно определить, каким
зондированием порожден отраженный импульс: первым или вторым. Дальность,
измеряемая относительно второго зондирующего импульса, будет ошибочной.
Из рисунка видно, что измеренное значение дальности второй цели равно 100
км, тогда как реальное ее значение равно 400 км.

Обобщая проведенные рассуждения, можно выделить следующие


возможные соотношения между значениями времени запаздывания t эхо-сигнала
и периода зондирования Т:

13
t < T – эхо-сигнал поступает до момента излучения следующего
зондирующего импульса;

t = T – эхо-сигнал поступает в момент излучения следующего


зондирующего импульса, что приводит к невозможности измерения, поскольку
приемник радиолокатора в это время закрыт;

t > T – эхо-сигнал поступает после излучения следующего зондирующего


импульса, что приводит к неоднозначности измерения дальности.

Следовательно, максимальная однозначно измеряемая дальность Rmax –


это максимальная дальность, для которой выполняется условие t <T.

Таким образом, период зондирования является важным параметром,


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

𝑡зад
𝑡н.д = 𝑡зад − [ ]Т
Тповт повт

tн.д. – время неоднозначной дальности

𝑡зад
[ ] − вычисление целой части дроби. Это целое число показывает, сколько
Тповт

импульсов успел излучить радиолокатор, когда обнаружил цель.

14
2. АЛГОРИТМ НАЗНАЧЕНИЯ ПАРАМЕТРОВ
КВАЗИНЕПРЕРЫВНОГО СИГНАЛА ПРИ СОПРОВОЖДЕНИИ
ЦЕЛИ С РЕЗУЛЬТАТАМИ РАСЧЁТА В MATHCAD

2.1. Расчет параметров сигнала при сопровождении одной цели

Подаем сигнал (импульсную последовательность) с частотой Fп, через


какое-то время у нас появится отраженный сигнал от цели, и в зависимости от
tзад импульс может попасть четко на излучаемый импульс или в середину между
импульсами. В определении и последующим сопровождении цели, сама цель
должна находиться четко в середине между импульсами. Для этого мы задаем
условия для определения нужной нам частоты.

На вход нашего алгоритма поступает величина R – начальное расстояние


до цели и скважность Q, которая определяет длительность импульса за частоту
повторения. Скорость цели зададим V = 300 м/с. Цель движется на
радиолокатор.

Зададим закон движения цели:

𝑅(𝑡𝑐 ) = 𝑅0 − 𝑉 ∗ 𝑡𝑐

Где R0 – начальное расстояние до цели.

Задаем начало и конец отсчета времени работы радиолокатора:

15
С помощью формулы найдем количество отсчетов времени:

С помощью алгоритмов найдем расстояние до цели на каждом отрезке времени:

Все возможные значения расстояния до цели на заданном промежутке времени.

16
Используя формулу

2∗𝑅
𝑡зад =
𝑐

по заданному Rц мы рассчитываем tзад, где tзад – время задержки на каждом


расстоянии до цели.

Все возможные значения времени задержки на каждом расстоянии до цели.

Задаем частоты повторения импульсов в диапазоне от 40 кГц до 200 кГц с


шагом 100 Гц.

С помощью формулы находим количество значений частот:


17
И задаем массив всех значений частоты повторений:

Все возможные значения частот, в заданном промежутке:

Дальше вычисляем tн.д. – время неоднозначной дальности по формуле:

𝑡зад
𝑡н.д = 𝑡зад − [ ]Т
Тповт повт
𝑡зад
𝑁=[ ] − вычисление целой части дроби, определяет количество периодов,
Тповт

уже прошедших за данный период времени.

18
Алгоритм вычисления tн.д.:

Алгоритм вычисления всех возможных начений N для каждого значения


частоты:

Производим перебор всех частот на заданном промежутке времени, так


чтобы время неопределенной задержки было в промежутке от 0.45 до 0.55 от
периода повторения импульса.

0.45Тповт < 𝑡н. д < 0.55Тповт

Проверим условие времени неопределенной задержки: для одной и


той же задержки (цель находится на одном расстоянии) покажем, что при
различной частоте повторения импульс может попасть на различные
участки интервала между зондирующими импульсами –

а) на центральный (рабочий) участок [0.45T, 0.55T];

19
б) на периферийные (нерабочие) участки [0, 0.45T] или [0.55T, T].

Запишем 3 условия в алгоритмы и найдем 3 частоты для каждого из


них.

Нарисуем схематично рисунок, который показывает, что при


различных частотах отраженный сигнал попадает на разные участки.

Рисунок представлен на рис. 2.1.

Рис.2.1 Схематичный рисунок попадания отраженного сигнала на


разные участки

Поиск значения частоты повторения, при которой выполняется


заданное условие для неоднозначной задержки при каждом моменте

20
времени происходи при переборе всех заданных частот начиная с
начальной частоты.

Алгоритм выбора значений, подходящих под заданное условие и


вывод этих значений в таблицу:

Вывод всех значений для цели в таблицу:

21
График зависимости заданной частоты повторения сигнала
удовлетворяющие заданному условию от расстояния до цели.

График представлен на рис.2.2

Рис.2.2 График зависимости частоты повторения от расстояния до цели.

Добавим фрагмент графика в увеличенном масштабе. На нем видно, что график


имеет вид ступенчатой функции – нескольким значениям дальности
соответствует одна и та же частота повторения.

График представлен на рис.2.3

22
Рис.2.3 Фрагмент графика зависимости частоты повторения от расстояния до
цели.

Далее запишем полный алгоритм вычисления частот повторения сигнала


для цели по заданному условию. Входным аргументом этой функции является
закон движения цели.

23
2.2. Расчет параметров сигнала при сопровождении двух целей.

Зададим вторую цель на расстоянии от первой цели, которая движется с


той же скоростью V = 300 м/с по такому же закону. Вторая цель находится на
большей дальности, чем первая цель.

Расстояние между целями мы задаем то расстояние, за которое пройдет


сигнал за время периода сигнала. Это минимальное расстояние между целями в
том случае, когда вторая цель не будет являться помехой первой цели.

Расстояние до второй цели от первой цели найдем по формуле:

где R0 – начальное расстояние до первой цели.

funcFP(R(0)) – начальная частота которую мы нашли из условия на расстоянии


R0

Следовательно, расстояние до второй цели будет равно R = 43.488 км

Зададим начало и конец отсчета времени такие же, как и у первой цели:

24
Далее посчитаем время неопределенной дальности в начальный момент времени
у первой и второй цели.

Из получившихся расчетов видно, что значения времени неопределенной


дальности у первой и второй цели равны.

В этом случае задаются также частоты одинаковые для первой и второй цели, в
диапазоне от 40 кГц до 200 кГц.

Время неопределенной дальности выбрано из условия попадания в центральную


часть периода, от 0.45Тповт до 0.55Тповт.

Построим график зависимости двух значений времени неопределенной


дальности у первой и двух целей от расстояния.

График представлен на рис.2.4

25
Рис.2.4 График зависимости двух значений времени неопределенной дальности у
первой и второй цели от расстояния.

Можно заметить, что графики пересекаются и идут рядом друг с другом,


это означает, что вторая цель является помехой для первой цели. Определение
двух целей будет производиться с ошибками и первоначальных условий
недостаточно.

Для того чтобы это не происходило, добавим еще одно условие. Время
неопределенной дальности второй цели не должно превышать разность времени
неопределенной дальности первой цели и 1.5Тимп и не должно быть меньше чем
сумма времени неопределенной дальности первой цели и 1.5Тимп., где Тимп –
это длительность импульса, которая вычисляется по формуле:

Тимп = Тповт/𝑄

где Q = 10 – скважность сигнала.

Из формулы видно, что при изменении частоты повторения измениться и


длительность импульса.

Запишем алгоритм вычисления для определения времени неопределённой


дальности для первой и второй цели.

Данный алгоритм вычисляет время неопределенной дальности для первой


и второй цели и выбирает нужные нам значения исходя из следующего условия.

Для того чтобы второй сигнал не влиял на первый, длительность строба,


которая равна длительности импульса должна удовлетворять условиям:

26
𝑡н.д 2 > 𝑡н.д1 + Тимп

𝑡н.д 2 < 𝑡н.д1 − Тимп

𝑡н.д 2 − время неопределенной дальности второй цели


Тимп − длительность импульса

При выполнении условий отметки от двух целей не будут пересекаться, и


процедура поиска параметров завершается.

Построим графики зависимости времени неопределенной дальности


первой и второй цели от расстояния.

27
График представлен на рис.2.5

Рис.2.5 Графики зависимости времени неопределенной дальности первой


и второй цели от расстояния.

Синий график - первая цель,

красный график - вторая цель.

Видно, что графики отдалены друг от друга, следовательно, можно сделать


вывод, что вторая цель не мешает первой цели. Следовательно, первую цель
можно сопровождать без какого-либо влияния второй цели.

28
3. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ АЛГОРИТМА НА ЯЗЫКЕ
ПРОГРАММИРОВАНИЯ С++

Запускается главная функция WinMain, в которой происходит инициализация


программы и создания главного окна. После запуска WinMain вызываются
следующие функции:

GetInData(void ) - запоминаем исходные данные


CalcData(void ) - основные вычисления
PrintData(void) - вывод результатов вычислений в таблицу 1
PrintData2(void) - вывод результатов вычислений в таблицу 2
PrintGraf_1(void) - вывод графиков

В таблицу 1 выводятся данные полученные для первой цели, в таблицу 2


выводятся данные для второй цели.

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)


{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}

29
Запоминаем исходные данные:
void TForm1::GetInData(void )
{

inData.r0 = Form1->Edit1->Text.ToDouble(); - начальное расстояние до


цели
inData.v = Form1->Edit2->Text.ToDouble(); - скорость цели
inData.t0 = Form1->Edit3->Text.ToDouble(); - время начала работы
локатора
inData.t1 = Form1->Edit4->Text.ToDouble(); - время конца работы локатора
inData.ts = Form1->Edit5->Text.ToDouble(); - шаг отсчета времени
inData.f0 = Form1->Edit6->Text.ToDouble(); - начальная частота
inData.f1 = Form1->Edit7->Text.ToDouble(); - конечная частота
inData.fs = Form1->Edit8->Text.ToDouble(); - шаг с которым берется
заданный массив частот.
}

Далее напишем программу для расчета нужных нам данных:


void TForm1::CalcData(void )
{

Объявляем промежуточные переменные


long int i,j,k = 0;
double ti = inData.t0;
double tzi;
double fj;
double tp;
double kj;
double dd;
bool flag;
double rd;
double r01;
double timp;

количество отсчетов по времени:


inData.NT = floor((inData.t1-inData.t0)/inData.ts);

30
количество заданных частот:
inData.FT = floor((inData.f1-inData.f0)/inData.fs);

Цикл для сохранения исходных частот:


for(i = 0; i < inData.FT; i++)
inData.fpovt[i] = inData.f0+inData.fs*(double)i;

Для цели 1:
for(i = 0; i < inData.NT; i++)
{

Запишем закон движения для первой цели:


outData.d[i] = inData.r0-inData.v*(double)i*inData.ts;

Определяем через подпрограмму FuncFp частоты первой цели:


outData.fd[i] = FuncFP(outData.d[i]);

Определяем значение времени неопределенной дальности первой цели по


формуле:
outData.tnd1[i] = 2.0*(outData.d[i]-
floor(outData.d[i]*2.0*outData.fd[i]/C)*(C/(2.0*outData.fd[i])))/C;
}

Функция, которая определяет частоты, выбранные по заданному условию:


double TForm1::FuncFP(double x)
{

Объявляем промежуточные переменные:


bool flag = true;
long int i = 0;
double tpovt;
double deltaR;
double dR;
double dt;

Определяем нужные нам частоты:


while(i != inData.FT)
{

31
tpovt = 1.0/inData.fpovt[i];
deltaR = C*tpovt/2.0;
dR = x-floor(x/deltaR)*deltaR;
dt = 2.0*dR/C;
if((0.45*tpovt < dt) && (dt < 0.55*tpovt))
return inData.fpovt[i];
i++;
}
return 0;
}

Далее находим значения времени неопределенной дальности для второй цели:


Находим расстояние от первой цели до второй цели от первой цели:
rd = C/FuncFP(outData.d[0])/2.0;
for(i = 0; i < inData.NT; i++)
{

Задаем закон движения второй цели:


outData.d2[i] = inData.r0+rd-inData.v*(double)i*inData.ts;

Вычисляем все частоты, используя FuncFp:


outData.fd2[i] = FuncFP(outData.d2[i]);

Вычисляем все значения времени неопределенной дальности для второй цели:


outData.tnd2[i] = 2.0*(outData.d[i] -
floor(outData.d[i]*2.0*outData.fd2[i]/C)*(C/(2.0*outData.fd2[i])))/C;
}

Выводим полученные результаты расстояния, значения частот и значения


времени неопределенной дальности для первой цели :
{
long int i;
char *buf[5] = {"","№","Расстояние до цели (км)","Частота (kHz)","Tнд1
(мкс)"};
32
char buf1[50];

// Очищаем таблицу
for(i = 0; i < (long int)TablRes->RowCount-1; i++)
TablRes->Rows[i]->Clear();
TablRes->ColCount = 5;
TablRes->RowCount = 2;
// Создаем "шапку" таблицы
for(i = 0; i < 5; i++)
TablRes->Cells[i][0] = buf[i];
// Выводим результаты в таблицу
for(i = 0; i < inData.NT; i++)
{
TablRes->Cells[1][TablRes->RowCount-1] = TablRes->RowCount-2; //
Порядковый номер
sprintf(buf1,"%.1f",outData.d[i]/1000.0);
TablRes->Cells[2][TablRes->RowCount-1] = buf1;
sprintf(buf1,"%.1f",outData.fd[i]/1000.0);
TablRes->Cells[3][TablRes->RowCount-1] = buf1;
sprintf(buf1,"%.2f",outData.tnd1[i]*1000000.0);
TablRes->Cells[4][TablRes->RowCount-1] = buf1;
TablRes->RowCount++;
}
}

Записываем все полученные значения времени неопределенной дальности для


второй цели в таблицу 2:
void TForm1::PrintData2(void )
{
long int i;
char *buf[3] = {"","№","Tнд2 (мкс)"};
char buf1[50];

// Очищаем таблицу
for(i = 0; i < (long int)TablRes1->RowCount-1; i++)
33
TablRes1->Rows[i]->Clear();
TablRes1->ColCount = 3;
TablRes1->RowCount = 2;
// Создаем "шапку" таблицы
for(i = 0; i < 3; i++)
TablRes1->Cells[i][0] = buf[i];
// Выводим результаты в таблицу
for(i = 0; i < inData.NT; i++)
{
TablRes1->Cells[1][TablRes1->RowCount-1] = TablRes1->RowCount-2;
// Порядковый номер
sprintf(buf1,"%.2f",outData.tnd2[i]*1000000.0);
TablRes1->Cells[2][TablRes1->RowCount-1] = buf1;
TablRes1->RowCount++;
}
}

На выходе получаем приложение, нажимая на кнопку «Рассчитать», мы


получаем таблицу со значениями, которые полностью удовлетворяют нашим
условиям.4
Далее выписываем в таблицу все значения частот на заданном отрезке
времени. И строим график зависимости выбранных по нашему условию частот
от расстояния до первой цели.
После запуска программы открывается окно для ввода исходных значений. Окно
программы представлено на рис. 3.1.

4
Шилдт Г. С++ для начинающих. – М.: ЭКОМ Паблишерс, 2013.
34
Рис.3.1 Основное окно программы.

После нажатия на кнопку «Рассчитать» появляется таблица с


рассчитанными значениями частоты повторения и времени неопределенной
дальности для первой и второй цели.
Таблица представлена на рис. 3.2

Рис.3.2 Таблица с рассчитанными значенями.

На экран также выводятся два графика:


35
1) График зависимости частоты первой цели от расстояния до цели.
2) График зависимости времени неопределенной дальности первой цели и
второй цели от расстояния до цели.

График представлен на рис.3.4

Рис.3.4 Конечный график в программе

36
ЗАКЛЮЧЕНИЕ

Алгоритм расчета параметров квазинепрерывного сигнала при


сопровождении цели в составе группы был реализован в пакетах MathCAD и
С++.

В процессе вычислений были получены значения времен неопределённой


дальности для первой и второй цели. На основании полученных результатов
были построены графики зависимости времени неопределенной дальности от
расстояния до целей, на которых видно, что рассчитанные параметры сигнала
позволяют сопровождать две цели.

37
ЛИТЕРАТУРА

1. Многофункциональные радиолокационные системы: учеб. Пособие для


вузов/ Дудник П.И., Ильчук А.Р., Татарский Б.Г. – М.: Дрофа, 2007.
2. Трухачев А.А. Радиолокационные сигналы и их применения: – М.:
Воениздат, 2005.
3. Шилдт Г. С++ для начинающих. – М.: ЭКОМ Паблишерс, 2013.

38
ПРИЛОЖЕНИЕ

Приложение А.
Полный листинг проекта а среде MathCAD.

39
40
41
42
43
Приложение Б.
Листинги программ модели.
//--------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Main.h"
#include <math.h>
#include "stdio.h"
#include "Graf1.h"
//-------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------
//====== РАССЧИТАТЬ ======
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
GetInData();
CalcData();
PrintData();
PrintData2();
PrintGraf_1();
return;
}
//--------------------------------------------------------------------
void TForm1::GetInData(void )

44
{
inData.r0 = Form1->Edit1->Text.ToDouble();
inData.v = Form1->Edit2->Text.ToDouble();
inData.t0 = Form1->Edit3->Text.ToDouble();
inData.t1 = Form1->Edit4->Text.ToDouble();
inData.ts = Form1->Edit5->Text.ToDouble();
inData.f0 = Form1->Edit6->Text.ToDouble();
inData.f1 = Form1->Edit7->Text.ToDouble();
inData.fs = Form1->Edit8->Text.ToDouble();
}
//--------------------------------------------------------------------
void TForm1::CalcData(void )
{
long int i,j,k = 0;
double ti = inData.t0;
double tzi;
double fj;
double tp;
double kj;
double dd;
bool flag;
double rd;
double r01;
double timp;

inData.NT = floor((inData.t1-inData.t0)/inData.ts);
inData.FT = floor((inData.f1-inData.f0)/inData.fs);
inData.fpovt = new double[inData.FT];
outData.d = new double[inData.NT];
outData.d2 = new double[inData.NT];
outData.fd = new double[inData.NT];
outData.fd2 = new double[inData.NT];
outData.tnd1 = new double[inData.NT];

45
outData.tnd2 = new double[inData.NT];
outData.tnd21 = new double[inData.NT];
for(i = 0; i < inData.FT; i++)
inData.fpovt[i] = inData.f0+inData.fs*(double)i;

// Для цели 1
for(i = 0; i < inData.NT; i++)
{
outData.d[i] = inData.r0-inData.v*(double)i*inData.ts;
outData.fd[i] = FuncFP(outData.d[i]);
outData.tnd1[i] = 2.0*(outData.d[i]-
floor(outData.d[i]*2.0*outData.fd[i]/C)*(C/(2.0*outData.fd[i])))/C;
}

rd = C/FuncFP(outData.d[0])/2.0;
for(i = 0; i < inData.NT; i++)
{
outData.d2[i] = inData.r0+rd-inData.v*(double)i*inData.ts;
outData.fd2[i] = FuncFP(outData.d2[i]);
outData.tnd2[i] = 2.0*(outData.d[i]-
floor(outData.d[i]*2.0*outData.fd2[i]/C)*(C/(2.0*outData.fd2[i])))/C;
}
for(i = 0; i < inData.NT; i++)
{
outData.tnd21[i] =
FuncFP1(outData.d2[i],outData.d[i],outData.tnd1[i]);
}
/* for(i = 0; i < inData.NT; i++)
{
outData.d[i] = inData.r0-inData.v*ti;
tzi = 2.0*outData.d[i]/C;
fj = inData.f0;
flag = true;
for(j = 0; (j < inData.FT) && (flag == true); j++)

46
{
tp = 1.0/fj;
kj = tzi-floor(tzi/tp)*tp; // Время неопределенной дальности
if((0.45*tp) < kj && (0.55*tp) > kj)
{
// Сохраняем предварительные результаты
outData.fd[i] = fj;
outData.tnd1[i] = kj;
flag = false;
}
fj += inData.fs;
}
ti += inData.ts;
}
rd = C/outData.fd[0]/2.0;
r01 = rd+inData.r0;
ti = inData.t0;
for(i = 0; i < inData.NT; i++)
{
dd = r01-inData.v*ti;
//tzi = 2.0*dd/C;
// fj = outData.fd[i];
// tp = 1.0/fj;
// timp = tp/10.0;
// kj = tzi-floor(tzi/tp)*tp; // Время неопределенной дальности
kj = 2*(dd-floor(dd*2*outData.fd[i]/C)*(C/2*outData.fd[i]))/C;
// Сохраняем предварительные результаты
outData.tnd2[i] = kj;
ti += inData.ts;
}*/
}
//--------------------------------------------------------------------
double TForm1::FuncFP(double x)

47
{
bool flag = true;
long int i = 0;
double tpovt;
double deltaR;
double dR;
double dt;

while(i != inData.FT)
{
tpovt = 1.0/inData.fpovt[i];
deltaR = C*tpovt/2.0;
dR = x-floor(x/deltaR)*deltaR;
dt = 2.0*dR/C;
if((0.45*tpovt < dt) && (dt < 0.55*tpovt))
return inData.fpovt[i];
i++;
}
return 0;
}
//------------------------------------------------------------------------
---
double TForm1::FuncFP1(double x,double y,double tnd)
{
bool flag = true;
long int i = 0;
double tpovt;
double deltaR;
double dR;
double dt;
double timp;
double tnd2p;

while(i != inData.FT)
48
{
tpovt = 1.0/inData.fpovt[i];
deltaR = C*tpovt/2.0;
dR = x-floor(x/deltaR)*deltaR;
dt = 2.0*dR/C;
timp = tpovt/10.0;
if((0.45*tpovt < dt) && (dt < 0.55*tpovt))
{
tnd2p = 2.0*(y-
floor(y*2.0*inData.fpovt[i]/C)*(C/(2.0*inData.fpovt[i])))/C;
if(tnd2p < tnd-1.5*timp || tnd2p > tnd+1.5*timp)
return tnd2p;
}
i++;
}
return 0;
}
//--------------------------------------------------------------------
//====== ВЫВОД РЕЗУЛЬТАТОВ В ТАБЛИЦУ 1 ======
void TForm1::PrintData(void )
{
long int i;
char *buf[5] = {"","№","Расстояние до цели (км)","Частота (kHz)","Tнд1
(мкс)"};
char buf1[50];

// Очищаем таблицу
for(i = 0; i < (long int)TablRes->RowCount-1; i++)
TablRes->Rows[i]->Clear();
TablRes->ColCount = 5;
TablRes->RowCount = 2;
// Создаем "шапку" таблицы
for(i = 0; i < 5; i++)
TablRes->Cells[i][0] = buf[i];

49
// Выводим результаты в таблицу
for(i = 0; i < inData.NT; i++)
{
TablRes->Cells[1][TablRes->RowCount-1] = TablRes->RowCount-2; //
Порядковый номер
sprintf(buf1,"%.1f",outData.d[i]/1000.0);
TablRes->Cells[2][TablRes->RowCount-1] = buf1;
sprintf(buf1,"%.1f",outData.fd[i]/1000.0);
TablRes->Cells[3][TablRes->RowCount-1] = buf1;
sprintf(buf1,"%.2f",outData.tnd1[i]*1000000.0);
TablRes->Cells[4][TablRes->RowCount-1] = buf1;
TablRes->RowCount++;
}
}
//--------------------------------------------------------------------
//====== ВЫВОД РЕЗУЛЬТАТОВ В ТАБЛИЦУ 2 ======
void TForm1::PrintData2(void )
{
long int i;
char *buf[3] = {"","№","Tнд2 (мкс)"};
char buf1[50];

// Очищаем таблицу
for(i = 0; i < (long int)TablRes1->RowCount-1; i++)
TablRes1->Rows[i]->Clear();
TablRes1->ColCount = 3;
TablRes1->RowCount = 2;
// Создаем "шапку" таблицы
for(i = 0; i < 3; i++)
TablRes1->Cells[i][0] = buf[i];
// Выводим результаты в таблицу
for(i = 0; i < inData.NT; i++)
{

50
TablRes1->Cells[1][TablRes1->RowCount-1] = TablRes1->RowCount-2;
// Порядковый номер
sprintf(buf1,"%.2f",outData.tnd2[i]*1000000.0);
TablRes1->Cells[2][TablRes1->RowCount-1] = buf1;
TablRes1->RowCount++;
}
}
//--------------------------------------------------------------------
//====== ВЫХОД ИЗ ПРОГРАММЫ ======
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
delete []outData.d;
delete []outData.fd;
delete []outData.tnd1;
delete []outData.tnd2;
}
//--------------------------------------------------------------------
//====== ВЫВОД ГРАФИКА 1 ======
void TForm1::PrintGraf_1(void )
{
Application->CreateForm(__classid(TGraf_1),&Graf_1);
Graf_1->ShowModal();
Graf_1->Free();
}
//--------------------------------------------------------------------

Рисуем графики
//--------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Graf1.h"
#include "Main.h"
51
//--------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TGraf_1 *Graf_1;
int dx_dy = 5; // Смещение осей X и Y
int wXY = 3; // Толщина осей X и Y
const float Scale = 20;
//--------------------------------------------------------------------
__fastcall TGraf_1::TGraf_1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------
void __fastcall TGraf_1::FormPaint(TObject *Sender)
{
DrawAxis(&graf1);
PrintGraf(&graf1);
DrawAxis(&graf2);
PrintGraf(&graf2);
PrintGraf(&graf3);
DrawAxis(&graf4);
PrintGraf(&graf4);
PrintGraf(&graf5);
}
//--------------------------------------------------------------------
//====== ВЫВОДИМ ГРАФИК ======
void TGraf_1::PrintGraf(GRAFIK *g)
{
long int i;
double x, y;

g->pb->Canvas->Pen->Width = g->width;
g->pb->Canvas->Pen->Color = g->color;

52
x = (g->dX[0]-g->minX)/g->scaleX+dx_dy;
y = g->pb->ClientHeight-((g->dY[0]-g->minY)/g->scaleY-dx_dy+wXY);
g->pb->Canvas->MoveTo(x,y);
for(i = 1; i < g->cPoints; i++)
{
x = (g->dX[i]-g->minX)/g->scaleX+dx_dy;
y = g->pb->ClientHeight-((g->dY[i]-g->minY)/g->scaleY-dx_dy+wXY);
g->pb->Canvas->LineTo(x,y);
}
}
//--------------------------------------------------------------------

//====== ВЫВОДИМ СЕТКУ И ОСИ ======


void TGraf_1::DrawAxis(GRAFIK *g)
{
int width = g->pb->ClientWidth-dx_dy;
int height = g->pb->ClientHeight-dx_dy;
int i;

g->pb->Canvas->Font->Color = clBlue;
g->pb->Canvas->Pen->Width = wXY;
// Рисуем оси
g->pb->Canvas->Pen->Color = clBlack;
g->pb->Canvas->MoveTo(dx_dy,height);
g->pb->Canvas->LineTo(dx_dy,0);
g->pb->Canvas->MoveTo(dx_dy,height);
g->pb->Canvas->LineTo(width,height);
// Стрелочки
g->pb->Canvas->Pen->Width = 2;
// X
g->pb->Canvas->MoveTo(width,height);
g->pb->Canvas->LineTo(width-10,height-4);
g->pb->Canvas->MoveTo(width,height);

53
g->pb->Canvas->LineTo(width-10,height+4);
// Y
g->pb->Canvas->MoveTo(dx_dy,0);
g->pb->Canvas->LineTo(dx_dy-4,10);
g->pb->Canvas->MoveTo(dx_dy,0);
g->pb->Canvas->LineTo(dx_dy+4,10);
// Рисуем сетку
g->pb->Canvas->Pen->Width = 1;
g->pb->Canvas->Pen->Color = clGray;
// Вертикальные линии
for(i = Scale+dx_dy; i < width-10; i = i+Scale)
{
g->pb->Canvas->MoveTo(i,1);
g->pb->Canvas->LineTo(i,height-1);
}
// Горизонтальные линии
for(i = Scale-dx_dy; i < height-10; i = i+Scale)
{
g->pb->Canvas->MoveTo(dx_dy+1,i);
g->pb->Canvas->LineTo(width-1,i);
}
}
//--------------------------------------------------------------------
void __fastcall TGraf_1::FormCreate(TObject *Sender)
{
// Инициализация графика 1
graf1.pb = Graf_1->PaintBox1;
graf1.color = clRed;
graf1.width = 2;
graf1.cPoints = Form1->inData.NT;
graf1.dX = Form1->outData.d;
graf1.dY = Form1->outData.fd;
CalcScale(&graf1);

54
// Инициализация График 2
graf2.pb = Graf_1->PaintBox2;
graf2.color = clRed;
graf2.width = 1;
graf2.cPoints = Form1->inData.NT;
graf2.dX = Form1->outData.d;
graf2.dY = Form1->outData.tnd1;
CalcScale(&graf2);
graf3.pb = Graf_1->PaintBox2;
graf3.color = clBlue;
graf3.width = 1;
graf3.cPoints = Form1->inData.NT;
graf3.dX = Form1->outData.d;
graf3.dY = Form1->outData.tnd2;
CalcScale(&graf3);
// Инициализация График 3
graf4.pb = Graf_1->PaintBox3;
graf4.color = clRed;
graf4.width = 1;
graf4.cPoints = Form1->inData.NT;
graf4.dX = Form1->outData.d;
graf4.dY = Form1->outData.tnd1;
CalcScale(&graf4);
graf5.pb = Graf_1->PaintBox3;
graf5.color = clBlue;
graf5.width = 1;
graf5.cPoints = Form1->inData.NT;
graf5.dX = Form1->outData.d;
graf5.dY = Form1->outData.tnd21;
CalcScale(&graf5);
}
//--------------------------------------------------------------------
//====== ВЫЧИСЛЯЕМ МАСШТАБ ======

55
void TGraf_1::CalcScale(GRAFIK *g)
{
g->minX = MinV(g->dX,graf1.cPoints);
g->minY = MinV(g->dY,graf1.cPoints);
g->scaleX = (MaxV(g->dX,g->cPoints)-g->minX)/g->pb->ClientWidth;
g->scaleY = (MaxV(g->dY,g->cPoints)-g->minY)/g->pb->ClientHeight;
}
//--------------------------------------------------------------------
//====== МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ======
double TGraf_1::MaxV(double *v,int c)
{
int i;
double m = -1;

for(i = 0; i < c; i++)


{
if(v[i] > m)
m = v[i];
}
return m;
}
//--------------------------------------------------------------------
//====== МИНИМАЛЬНОЕ ЗНАЧЕНИЕ ======
double TGraf_1::MinV(double *v,int c)
{
int i;
double m = 9999999999;

for(i = 0; i < c; i++)


{
if(v[i] < m)
m = v[i];
}
return m;

56