Распространение радиоволн ВЧ/Рей-трейсинг: различия между версиями
Nigiluk (обсуждение | вклад) |
|||
Строка 363: | Строка 363: | ||
G8_1[label="8"]; | G8_1[label="8"]; | ||
G14_1[label="14"]; | G14_1[label="14"]; | ||
G8_2[label="8"]; | G8_2[label="8"]; | ||
G14_2[label="14"]; | G14_2[label="14"]; | ||
G15[label="15"]; | G15[label="15"]; | ||
SKIP_1[label="...", shape="none"]; | SKIP_1[label="...", shape="none"]; | ||
SKIP_2[label="...", shape="none"]; | |||
SKIP_3[label="...", shape="none"]; | |||
SKIP_4[label="...", shape="none"]; | |||
SKIP_5[label="...", shape="none"]; | |||
SKIP_6[label="...", shape="none"]; | |||
SKIP_7[label="...", shape="none"]; | |||
SKIP_8[label="...", shape="none"]; | |||
SKIP_9[label="...", shape="none"]; | |||
SKIP_10[label="...", shape="none"]; | |||
//SKIP_11[label="...", shape="none"]; | |||
SKIP_12[label="...", shape="none"]; | |||
SKIP_13[label="...", shape="none"]; | |||
SKIP_14[label="...", shape="none"]; | |||
SKIP_15[label="...", shape="none"]; | |||
SKIP_16[label="...", shape="none"]; | |||
SKIP_17[label="...", shape="none"]; | |||
SKIP_18[label="...", shape="none"]; | |||
SKIP_19[label="...", shape="none"]; | |||
SKIP_20[label="...", shape="none"]; | |||
SKIP_21[label="...", shape="none"]; | |||
SKIP_22[label="...", shape="none"]; | |||
SKIP_23[label="...", shape="none"]; | |||
SKIP_24[label="...", shape="none"]; | |||
SKIP_25[label="...", shape="none"]; | |||
SKIP_26[label="...", shape="none"]; | |||
SKIP_27[label="...", shape="none"]; | |||
SKIP_28[label="...", shape="none"]; | |||
SKIP_29[label="...", shape="none"]; | |||
SKIP_30[label="...", shape="none"]; | |||
SKIP_31[label="...", shape="none"]; | |||
G0->G1->{G2_1, G2_2} | G0->G1->{G2_1, G2_2} | ||
Строка 385: | Строка 405: | ||
G6_1_1->G7_1_1_1 | G6_1_1->G7_1_1_1 | ||
G6_1_2->G7_1_1_2 | G6_1_2->G7_1_1_2 | ||
{G7_32_1_1, G7_32_1_2}->G8_1-> | {G7_32_1_1, G7_32_1_2}->G8_1->SKIP_30->G14_1 | ||
G2_2->G3_2->G4_2->G5_2->{G6_2_1, G6_2_2} | G2_2->G3_2->G4_2->G5_2->{G6_2_1, G6_2_2} | ||
G6_2_1->G7_1_2_1 | G6_2_1->G7_1_2_1 | ||
G6_2_2->G7_1_2_2 | G6_2_2->G7_1_2_2 | ||
{G7_32_2_1, G7_32_2_2}->G8_2-> | {G7_32_2_1, G7_32_2_2}->G8_2->SKIP_31->G14_2 | ||
{G14_1, G14_2}->G15->"ВЫХОД" | {G14_1, G14_2}->G15->"ВЫХОД" | ||
Строка 399: | Строка 415: | ||
G7_4_1_1_1->{G7_5_1_1_1_1, G7_5_1_1_1_2} | G7_4_1_1_1->{G7_5_1_1_1_1, G7_5_1_1_1_2} | ||
G7_5_1_1_1_1->SKIP_1->G7_13_1_1_1_1 | G7_5_1_1_1_1->SKIP_1->G7_13_1_1_1_1 | ||
G7_5_1_1_1_2->G7_13_1_1_1_2 | G7_5_1_1_1_2->SKIP_2->G7_13_1_1_1_2 | ||
{G7_13_1_1_1_1, G7_13_1_1_1_2}->G7_14_1_1_1 | {G7_13_1_1_1_1, G7_13_1_1_1_2}->G7_14_1_1_1 | ||
G7_4_1_1_2->{G7_5_1_1_2_1, G7_5_1_1_2_2} | G7_4_1_1_2->{G7_5_1_1_2_1, G7_5_1_1_2_2} | ||
G7_5_1_1_2_1->G7_13_1_1_2_1 | G7_5_1_1_2_1->SKIP_3->G7_13_1_1_2_1 | ||
G7_5_1_1_2_2->G7_13_1_1_2_2 | G7_5_1_1_2_2->SKIP_4->G7_13_1_1_2_2 | ||
{G7_13_1_1_2_1, G7_13_1_1_2_2}->G7_14_1_1_2 | {G7_13_1_1_2_1, G7_13_1_1_2_2}->G7_14_1_1_2 | ||
{G7_14_1_1_1, G7_14_1_1_2}->G7_15_1_1->G7_16_1_1->{G7_17_1_1_1, G7_17_1_1_2} | {G7_14_1_1_1, G7_14_1_1_2}->G7_15_1_1->G7_16_1_1->{G7_17_1_1_1, G7_17_1_1_2} | ||
G7_17_1_1_1->G7_24_1_1_1 | G7_17_1_1_1->SKIP_5->G7_24_1_1_1 | ||
G7_17_1_1_2->G7_24_1_1_2 | G7_17_1_1_2->SKIP_6->G7_24_1_1_2 | ||
{G7_24_1_1_1, G7_24_1_1_2}->G7_25_1_1->G7_32_1_1 | {G7_24_1_1_1, G7_24_1_1_2}->G7_25_1_1->SKIP_15->G7_32_1_1 | ||
G7_1_1_2->G7_3_1_2->{G7_4_1_2_1, G7_4_1_2_2} | G7_1_1_2->G7_3_1_2->{G7_4_1_2_1, G7_4_1_2_2} | ||
G7_4_1_2_1->{G7_5_1_2_1_1, G7_5_1_2_1_2} | G7_4_1_2_1->{G7_5_1_2_1_1, G7_5_1_2_1_2} | ||
G7_5_1_2_1_1->G7_13_1_2_1_1 | G7_5_1_2_1_1->SKIP_18->G7_13_1_2_1_1 | ||
G7_5_1_2_1_2->G7_13_1_2_1_2 | G7_5_1_2_1_2->SKIP_19->G7_13_1_2_1_2 | ||
{G7_13_1_2_1_1, G7_13_1_2_1_2}->G7_14_1_2_1 | {G7_13_1_2_1_1, G7_13_1_2_1_2}->G7_14_1_2_1 | ||
G7_4_1_2_2->{G7_5_1_2_2_1, G7_5_1_2_2_2} | G7_4_1_2_2->{G7_5_1_2_2_1, G7_5_1_2_2_2} | ||
G7_5_1_2_2_1->G7_13_1_2_2_1 | G7_5_1_2_2_1->SKIP_16->G7_13_1_2_2_1 | ||
G7_5_1_2_2_2->G7_13_1_2_2_2 | G7_5_1_2_2_2->SKIP_17->G7_13_1_2_2_2 | ||
{G7_13_1_2_2_1, G7_13_1_2_2_2}->G7_14_1_2_2 | {G7_13_1_2_2_1, G7_13_1_2_2_2}->G7_14_1_2_2 | ||
{G7_14_1_2_1, G7_14_1_2_2}->G7_15_1_2->G7_16_1_2->{G7_17_1_2_1, G7_17_1_2_2} | {G7_14_1_2_1, G7_14_1_2_2}->G7_15_1_2->G7_16_1_2->{G7_17_1_2_1, G7_17_1_2_2} | ||
G7_17_1_2_1->G7_24_1_2_1 | G7_17_1_2_1->SKIP_7->G7_24_1_2_1 | ||
G7_17_1_2_2->G7_24_1_2_2 | G7_17_1_2_2->SKIP_8->G7_24_1_2_2 | ||
{G7_24_1_2_1, G7_24_1_2_2}->G7_25_1_2->G7_32_1_2 | {G7_24_1_2_1, G7_24_1_2_2}->G7_25_1_2->SKIP_12->G7_32_1_2 | ||
G7_1_2_1->G7_3_2_1->{G7_4_2_1_1, G7_4_2_1_2} | G7_1_2_1->G7_3_2_1->{G7_4_2_1_1, G7_4_2_1_2} | ||
G7_4_2_1_1->{G7_5_2_1_1_1, G7_5_2_1_1_2} | G7_4_2_1_1->{G7_5_2_1_1_1, G7_5_2_1_1_2} | ||
G7_5_2_1_1_1->G7_13_2_1_1_1 | G7_5_2_1_1_1->SKIP_20->G7_13_2_1_1_1 | ||
G7_5_2_1_1_2->G7_13_2_1_1_2 | G7_5_2_1_1_2->SKIP_21->G7_13_2_1_1_2 | ||
{G7_13_2_1_1_1, G7_13_2_1_1_2}->G7_14_2_1_1 | {G7_13_2_1_1_1, G7_13_2_1_1_2}->G7_14_2_1_1 | ||
G7_4_2_1_2->{G7_5_2_1_2_1, G7_5_2_1_2_2} | G7_4_2_1_2->{G7_5_2_1_2_1, G7_5_2_1_2_2} | ||
G7_5_2_1_2_1->G7_13_2_1_2_1 | G7_5_2_1_2_1->SKIP_22->G7_13_2_1_2_1 | ||
G7_5_2_1_2_2->G7_13_2_1_2_2 | G7_5_2_1_2_2->SKIP_23->G7_13_2_1_2_2 | ||
{G7_13_2_1_2_1, G7_13_2_1_2_2}->G7_14_2_1_2 | {G7_13_2_1_2_1, G7_13_2_1_2_2}->G7_14_2_1_2 | ||
{G7_14_2_1_1, G7_14_2_1_2}->G7_15_2_1->G7_16_2_1->{G7_17_2_1_1, G7_17_2_1_2} | {G7_14_2_1_1, G7_14_2_1_2}->G7_15_2_1->G7_16_2_1->{G7_17_2_1_1, G7_17_2_1_2} | ||
G7_17_2_1_1->G7_24_2_1_1 | G7_17_2_1_1->SKIP_9->G7_24_2_1_1 | ||
G7_17_2_1_2->G7_24_2_1_2 | G7_17_2_1_2->SKIP_10->G7_24_2_1_2 | ||
{G7_24_2_1_1, G7_24_2_1_2}->G7_25_2_1->G7_32_2_1 | {G7_24_2_1_1, G7_24_2_1_2}->G7_25_2_1->SKIP_13->G7_32_2_1 | ||
G7_1_2_2->G7_3_2_2->{G7_4_2_2_1, G7_4_2_2_2} | G7_1_2_2->G7_3_2_2->{G7_4_2_2_1, G7_4_2_2_2} | ||
G7_4_2_2_1->{G7_5_2_2_1_1, G7_5_2_2_1_2} | G7_4_2_2_1->{G7_5_2_2_1_1, G7_5_2_2_1_2} | ||
G7_5_2_2_1_1->G7_13_2_2_1_1 | G7_5_2_2_1_1->SKIP_24->G7_13_2_2_1_1 | ||
G7_5_2_2_1_2->G7_13_2_2_1_2 | G7_5_2_2_1_2->SKIP_25->G7_13_2_2_1_2 | ||
{G7_13_2_2_1_1, G7_13_2_2_1_2}->G7_14_2_2_1 | {G7_13_2_2_1_1, G7_13_2_2_1_2}->G7_14_2_2_1 | ||
G7_4_2_2_2->{G7_5_2_2_2_1, G7_5_2_2_2_2} | G7_4_2_2_2->{G7_5_2_2_2_1, G7_5_2_2_2_2} | ||
G7_5_2_2_2_1->G7_13_2_2_2_1 | G7_5_2_2_2_1->SKIP_26->G7_13_2_2_2_1 | ||
G7_5_2_2_2_2->G7_13_2_2_2_2 | G7_5_2_2_2_2->SKIP_27->G7_13_2_2_2_2 | ||
{G7_13_2_2_2_1, G7_13_2_2_2_2}->G7_14_2_2_2 | {G7_13_2_2_2_1, G7_13_2_2_2_2}->G7_14_2_2_2 | ||
{G7_14_2_2_1, G7_14_2_2_2}->G7_15_2_2->G7_16_2_2->{G7_17_2_2_1, G7_17_2_2_2} | {G7_14_2_2_1, G7_14_2_2_2}->G7_15_2_2->G7_16_2_2->{G7_17_2_2_1, G7_17_2_2_2} | ||
G7_17_2_2_1->G7_24_2_2_1 | G7_17_2_2_1->SKIP_28->G7_24_2_2_1 | ||
G7_17_2_2_2->G7_24_2_2_2 | G7_17_2_2_2->SKIP_29->G7_24_2_2_2 | ||
{G7_24_2_2_1, G7_24_2_2_2}->G7_25_2_2->G7_32_2_2 | {G7_24_2_2_1, G7_24_2_2_2}->G7_25_2_2->SKIP_14->G7_32_2_2 | ||
} | } | ||
</graphviz> | </graphviz> |
Версия 00:47, 21 июня 2017
Модель
Алгоритм
Идея последовательного приближения
Идея заключается в последовательном удвоении числа элементарных модельных экспериментов. Это продолжится до тех пор, пока результат текущего моделирования не приблизится к результату моделирования на предыдущей итерации:
, где
- - параметр моделирования, задаваемый пользователем.
Однако сравнение соседних итераций не дает достаточного условия на достижение заданной точности (основная причина этого - излучение по направлениям). Поэтому правильнее будет сравнивать итерации через одну, две и т.д.:
, где
- также будет задаваться пользователем.
- здесь - это параметр цикла, стоящего над циклами основной программы, .
При равномерном увеличении числа направлений излучения от первичного источника в два раза путем деления на 2 соответствующего шага по углу в процессе увеличения
, только каждое второе направление будет новым, т.е. не учитанным на предыдущих итерациях. Другая половина будет повторять эксперименты, уже выполненные ранее. Поэтому в цикл основной программы введено дополнительное условие для учета этих повторений.Шаги
по азимуту и по зениту источника являются функциями от направления либо постоянными.Угловой шаг дискретизации как функция ХН
Большинство современных вещательных систем используют панельные антенны с ограниченными углами раствора диаграммы направленности (ДН) в горизонтальной плоскости (до 120°) и очень малыми углами в вертикальной плоскости (до 20°). Соответственно, в таких системах происходит серьезное перераспределение излучаемой энергии в пространстве. Типичные коэффициенты усиления: 16-18 dBi. Поэтому одним из решений задачи оптимизации является использование динамического углового шага дискретизации
как функции от характеристики направленности источника.Изменение частоты дискретизации
происходит по следующему закону:, где
- - коэффициент девиации, где
- - максимальное и (для любого ) минимальное значение частоты дискретизации;
- - максимальное расстояние от источника до границ модели;
- - функция ХН;
- - угол места и азимутальный угол;
- - частота излучения;
- - длина излучаемой волны.
Тогда шаг дискретизации (угол) будет меняться по следующим образом:
Общее кол-во лучей определяется выражением:
С учетом, что максимум ДН находится в
, получим выражения:,
.
Инициализация геометрической модели
Перерасчет высот с учетом кривизны земли и рефракции радиоволн в тропосфере.
Входной параметр
пересчитывается в соответствии с формулой:, где
- - радиус Земли (км),
- - изменение коэффициента преломления с высотой.
- эквивалентный радиус Земли, где
- - расстояние до точки с высотой .
Основной цикл программы | Вариант 1
Предусловия
- геометрической моделью. - входное описание среды распространения моделируемого поля, заданное
- - номер итерации моделирования, .
Основное течение
- G.Множество первичных источников()
- Если то ВЫХОД
- .Антенна().Тип антенны().Амплитудно-частотная характеристика()
- Если
- Если
- Position .Антенна().Позиция()
- Ray Луч().Создать(Position, .Антенна().Мировая система координат(Вектор ))
- Distance
- G.Множество отражающих объектов()
- Ray.Пересечение(.Плоскость грани())
- Если .Принадлежность( )
- Distance' Расстояние(Position, )
- Если Distance'
- Distance Distance'
Distance
.Множество отражающих поверхностей()
- G.Множество контрольных точек()
- Если .Область регистрации луча Distance
- .Напряженность , Расстояние(Position, .Позиция()), G.Среда распространения() ) .Зарегистрировать(
- Если .Область регистрации луча Distance
- Если .Напряженность , Distance, G.Среда распространения()
- Angle Ray.Угол пересечения(.Плоскость грани())
- Вторичный источник при рейтрейсинге.Создать(.Напряженность , Distance, G.Среда распространения() Angle, )
- Переход на шаг 2
Свойства алгоритма
Сложность
Возможности распараллеливания
Основной цикл программы | Вариант 2
Геометрическая модель (рей-трейсинг 2). Наследует свойства Геометрической модели.
- Предикат завершения(). При возвращает истину, иначе возвращает значение функции SubApprox для результатов моделирования не предыдущем и на текущем этапах, а также для включаемого отклонения и допустимого процента точек .
Предусловия
- геометрической моделью. - входное описание среды распространения моделируемого поля, заданное
- - список частот, на которых необходимо провести моделирование.
- - критическое значение напряженности, на котором дальнейшая трассировка луча прекращается.
- - критерий разности между текущим и предыдущим результатом моделирования, при которой можно считать, что поле промоделированно точно.
Основное течение
- Pre_SCP G.Множество контрольных точек( )
- Set_event Preprocessing( )
- Set_event
- Postprocessing(G.Множество контрольных точек() )
- SAcheck G.Множество контрольных точек(, Pre_SCP, ) ) SucApprox(
- Если SAcheck
- Переход на 1.2
- ВЫХОД
[Таблица событий] Preprocessing(Номер итерации, Частота)
Функция создает таблицу событий, необходимых обработать. В качестве событий - испускаемые моделью лучи на данной частоте.
- Пустой односвязный список значений .
- Номер итерации
- Частота
- G.Множество первичных источников()
- Если .Антенна().Тип антенны().Амплитудно-частотная характеристика( )
- Пока
- Если
- Пока
- Если
- .Добавить
- Если
- Если
- Если .Антенна().Тип антенны().Амплитудно-частотная характеристика( )
- Вернуть Массив( )
Если
, и , то есть углы распределены равномерно, таблица может быть реализована в виде массива значений , элементы которого могут заполняться параллельно, без синхронизации. Если же размер таблицы заранее не определен (общий случай), то таблица реализуется связанным списком, добавление элементов в который должно защищаться мьютексом на шаге 4.1.3.1.3.1.1, а алгоритм на заключительном шаге преобразует связанный список в массив с произвольным доступом. Второй путь при параллельном выполнении - создавать таблицы в локальной памяти потока, после выполнения которых - объединять таблицы в массив в основном потоке.Параллельная форма
Параллельное выполнение в общем случае возможно только цикла, перебирающего первичные источники (шаг 4), так как распределение углов заранее не определено.
Пусть
- число потоков, выполняющих функцию. Пусть - массив изначально пустых связанных списков троек , так, что - -тый список массива, .- Номер итерации
- Частота
- Создать массив.
- G.Множество первичных источников()
- индекс потока.
- Если .Антенна().Тип антенны().Амплитудно-частотная характеристика( )
- Пока
- Если
- Пока
- Если
- .Добавить
- Если
- Если
- Вернуть Массив
Trace
Функция трассирует луч через геометрическую модель и и фиксирует его прохождение вблизи контрольной точки.
- NaN
- G.Множество отражающих объектов()
- G.Множество плоскостей вывода результатов()
- Ray.Пересечение(.Плоскость())
- Если .Принадлежность( )
- Ray.Пробег( )
- Если
- .Ближайшая контрольная точка( )
- Ray, , G.Среда распространения()) .Зарегистрировать(
- Если NaN
Postprocessing
Функция "проявляет" поле в контрольных точках по накопленным значениям напряженности от всех пришедших лучей.
SucApprox
Функция сравнивает текущие результаты моделирования с результатами, полученными на предыдущем шаге. На выходе получаем флаг, по которому решаем, следует ли продолжать уточнять модель.
Свойства алгоритма
Сложность
Возможности распараллеливания
