Распространение радиоволн ВЧ/Рей-трейсинг: различия между версиями
Nigiluk (обсуждение | вклад) |
|||
| (не показаны 4 промежуточные версии 2 участников) | |||
| Строка 122: | Строка 122: | ||
#<math>\forall ~ \omega_n \in \Omega</math> | #<math>\forall ~ \omega_n \in \Omega</math> | ||
##<math>i \leftarrow 0</math> | ##<math>i \leftarrow 0</math> | ||
##Pre_SCP <math> \leftarrow</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Множество контрольных точек|Множество контрольных точек(<math>\omega_n</math>)]]</tt> | ##Pre_SCP <math> \leftarrow</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Множество контрольных точек|Множество контрольных точек(<math>\omega_n</math>)]]</tt> ''//Копирование состояния до изменения''. | ||
##Set_event <math>\leftarrow</math><tt> Preprocessing(<math>i,~\omega_n</math>)</tt> | ##Set_event <math>\leftarrow</math><tt> Preprocessing(<math>G,~i,~\omega_n</math>)</tt> | ||
##<math>\forall ~ (s_j,~\theta,~\varphi) \in </math> Set_event | ##<math>\forall ~ (s_j,~\theta,~\varphi) \in </math> Set_event | ||
###Ray <math>\leftarrow</math><tt> [[Распространение радиоволн ВЧ/Луч|Луч()]].Создать([[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]], <math>\theta,~\varphi,~\omega_n</math>)</tt> | ###Ray <math>\leftarrow</math><tt> [[Распространение радиоволн ВЧ/Луч|Луч()]].Создать([[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]], <math>\theta,~\varphi,~\omega_n</math>)</tt> | ||
| Строка 134: | Строка 134: | ||
#ВЫХОД | #ВЫХОД | ||
===<tt>[Таблица событий] <math>\leftarrow</math> Preprocessing(Номер итерации, Частота)</tt>=== | ===<tt>[Таблица событий] <math>\leftarrow</math> Preprocessing(Геометрическая модель, Номер итерации, Частота)</tt>=== | ||
Функция создает таблицу событий, необходимых обработать. В качестве событий - испускаемые моделью лучи на данной частоте. | Функция создает таблицу событий, необходимых обработать. В качестве событий - испускаемые моделью лучи на данной частоте. | ||
#<math>T \leftarrow</math> Пустой односвязный список значений <math>(s_j,~\theta,~\varphi)</math>. | #<math>T \leftarrow</math> Пустой односвязный список значений <math>(s_j,~\theta,~\varphi)</math>. | ||
#<math>G \leftarrow</math> Геометрическая модель. | |||
#<math>i \leftarrow</math> Номер итерации | #<math>i \leftarrow</math> Номер итерации | ||
#<math>\omega \leftarrow</math> Частота | #<math>\omega \leftarrow</math> Частота | ||
| Строка 144: | Строка 145: | ||
###<math>\zeta_{\theta} \leftarrow 0</math> | ###<math>\zeta_{\theta} \leftarrow 0</math> | ||
###Пока <math>\theta < \pi</math> | ###Пока <math>\theta < \pi</math> | ||
####<math>\varphi \leftarrow 0</math> | |||
####<math>\zeta_{\varphi} \leftarrow 0</math> | |||
####Пока <math>\varphi<2\pi</math> | |||
#####Если <math>i=0 \vee \zeta_{\theta} \bmod 2 \neq 0 \vee \zeta_{\varphi} \bmod 2 \neq 0</math> | |||
######<math>T</math>.Добавить<math>(s_j,~\theta,~\varphi)</math> | |||
#####<math>\varphi \leftarrow \varphi + \frac{\Delta_{\varphi} (s_j,~\theta,~\varphi)}{2^i}</math> | |||
#####<math>\zeta_{\varphi} \leftarrow \zeta_{\varphi}+1</math> | |||
####<math>\theta \leftarrow \theta + \frac{\Delta_{\theta} (s_j,~\theta)}{2^i}</math> | ####<math>\theta \leftarrow \theta + \frac{\Delta_{\theta} (s_j,~\theta)}{2^i}</math> | ||
####<math>\zeta_{\theta} \leftarrow \zeta_{\theta}+1</math> | ####<math>\zeta_{\theta} \leftarrow \zeta_{\theta}+1</math> | ||
| Строка 173: | Строка 173: | ||
###<math>\zeta_{\theta} \leftarrow 0</math> | ###<math>\zeta_{\theta} \leftarrow 0</math> | ||
###Пока <math>\theta < \pi</math> | ###Пока <math>\theta < \pi</math> | ||
####<math>\varphi \leftarrow 0</math> | |||
####<math>\zeta_{\varphi} \leftarrow 0</math> | |||
####Пока <math>\varphi<2\pi</math> | |||
#####Если <math>i=0 \vee \zeta_{\theta} \bmod 2 \neq 0 \vee \zeta_{\varphi} \bmod 2 \neq 0</math> | |||
######<math>T'_t</math>.Добавить<math>(s_j,~\theta,~\varphi)</math> | |||
#####<math>\varphi \leftarrow \varphi + \frac{\Delta_{\varphi} (s_j,~\theta,~\varphi)}{2^i}</math> | |||
#####<math>\zeta_{\varphi} \leftarrow \zeta_{\varphi}+1</math> | |||
####<math>\theta \leftarrow \theta + \frac{\Delta_{\theta} (s_j,~\theta)}{2^i}</math> | ####<math>\theta \leftarrow \theta + \frac{\Delta_{\theta} (s_j,~\theta)}{2^i}</math> | ||
####<math>\zeta_{\theta} \leftarrow \zeta_{\theta}+1</math> | ####<math>\zeta_{\theta} \leftarrow \zeta_{\theta}+1</math> | ||
| Строка 221: | Строка 220: | ||
<graphviz size=500px> | <graphviz size=500px> | ||
digraph ray_tracing_EM_parallel_run{ | digraph ray_tracing_EM_parallel_run{ | ||
rankdir= | rankdir=LR; | ||
node[fontsize=14]; | node[fontsize=14]; | ||
edge[fontsize=14]; | edge[fontsize=14]; | ||
Текущая версия на 07:50, 14 февраля 2018
Модель
Алгоритм
Идея последовательного приближения
Идея заключается в последовательном удвоении числа элементарных модельных экспериментов. Это продолжится до тех пор, пока результат текущего моделирования не приблизится к результату моделирования на предыдущей итерации:
, где
- - параметр моделирования, задаваемый пользователем.
Однако сравнение соседних итераций не дает достаточного условия на достижение заданной точности (основная причина этого - излучение по направлениям). Поэтому правильнее будет сравнивать итерации через одну, две и т.д.:
, где
- также будет задаваться пользователем.
- здесь - это параметр цикла, стоящего над циклами основной программы, .
При равномерном увеличении числа направлений излучения от первичного источника в два раза путем деления на 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 SucApprox(G.Множество контрольных точек(), Pre_SCP, )
- Если SAcheck
- Переход на 1.2
- ВЫХОД
[Таблица событий] Preprocessing(Геометрическая модель, Номер итерации, Частота)
Функция создает таблицу событий, необходимых обработать. В качестве событий - испускаемые моделью лучи на данной частоте.
- Пустой односвязный список значений .
- Геометрическая модель.
- Номер итерации
- Частота
- G.Множество первичных источников()
- Если .Антенна().Тип антенны().Амплитудно-частотная характеристика()
- Пока
- Пока
- Если
- .Добавить
- Если
- Если .Антенна().Тип антенны().Амплитудно-частотная характеристика()
- Вернуть Массив()
Если , и , то есть углы распределены равномерно, таблица может быть реализована в виде массива значений , элементы которого могут заполняться параллельно, без синхронизации. Если же размер таблицы заранее не определен (общий случай), то таблица реализуется связанным списком, добавление элементов в который должно защищаться мьютексом на шаге 4.1.3.1.3.1.1, а алгоритм на заключительном шаге преобразует связанный список в массив с произвольным доступом. Второй путь при параллельном выполнении - создавать таблицы в локальной памяти потока, после выполнения которых - объединять таблицы в массив в основном потоке.
Параллельная форма
Параллельное выполнение в общем случае возможно только цикла, перебирающего первичные источники (шаг 4), так как распределение углов заранее не определено.
Пусть - число потоков, выполняющих функцию. Пусть - массив изначально пустых связанных списков троек , так, что - -тый список массива, .
- Номер итерации
- Частота
- Создать массив.
- G.Множество первичных источников()
- индекс потока.
- Если .Антенна().Тип антенны().Амплитудно-частотная характеристика()
- Пока
- Пока
- Если
- .Добавить
- Если
- Вернуть Массив
Trace
Функция трассирует луч через геометрическую модель и и фиксирует его прохождение вблизи контрольной точки.
- Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): T\leftarrow NaN
- G.Множество отражающих объектов()
- .Множество отражающих поверхностей()
- Ray.Пересечение(.Плоскость())
- Если Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): t_{mn}
.Принадлежность()
- Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): r\leftarrow Ray.Пробег()
- Если
- .Множество отражающих поверхностей()
- G.Множество плоскостей вывода результатов()
- Ray.Пересечение(.Плоскость())
- Если .Принадлежность()
- Ray.Пробег()
- Если
- .Ближайшая контрольная точка()
- .Зарегистрировать(Ray, , G.Среда распространения())
- Если NaN
- Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \gamma \leftarrow Ray.Угол пересечения(.Плоскость())
- Ray.Отразить(, G.Среда распространения())
- Если Ray.Напряженность
- Trace(Ray, G, )
Postprocessing
Функция "проявляет" поле в контрольных точках по накопленным значениям напряженности от всех пришедших лучей.
SucApprox
Функция сравнивает текущие результаты моделирования с результатами, полученными на предыдущем шаге. На выходе получаем флаг, по которому решаем, следует ли продолжать уточнять модель.
Свойства алгоритма
Сложность
Возможности распараллеливания
