Архитектурная акустика/Интеграл Релея (версия Кулигина): различия между версиями
Ninok2801 (обсуждение | вклад) |
|||
(не показано 12 промежуточных версий 3 участников) | |||
Строка 8: | Строка 8: | ||
<math>\varphi\left(\theta, \varphi, r\right) = \frac{1}{2\pi}\iint\limits_{\sigma}\frac{\partial\varphi_1}{\partial\stackrel{\to }{n}}\frac{e^{-i k r}}{r}d\sigma</math> | <math>\varphi\left(\theta, \varphi, r\right) = \frac{1}{2\pi}\iint\limits_{\sigma}\frac{\partial\varphi_1}{\partial\stackrel{\to }{n}}\frac{e^{-i k r}}{r}d\sigma</math> | ||
на сфере <math>r= | на сфере <math>r=1</math>, где: | ||
* <math>\varphi(\theta, \varphi, r)</math> - потенциал колебательной скорости в точке, заданной в сферической системе координат, в которой <math>\theta = 0, \varphi = 0, r = 1</math> - единичный вектор сонаправленный главной оси источника. | * <math>\varphi(\theta, \varphi, r)</math> - потенциал колебательной скорости в точке, заданной в сферической системе координат, в которой <math>\theta = 0, \varphi = 0, r = 1</math> - единичный вектор сонаправленный главной оси источника. | ||
* <math>\sigma</math> - [[Архитектурная акустика/Поверхность|поверхность]] или ее часть, которая колеблется как поршень. | * <math>\sigma</math> - [[Архитектурная акустика/Поверхность|поверхность]] или ее часть, которая колеблется как поршень. | ||
Строка 20: | Строка 20: | ||
=Алгоритм= | =Алгоритм= | ||
Предусловия: | Предусловия: | ||
#<math>\beta</math>- коэффициент ослабления | |||
# <tt>N</tt> - порядок источника, принимает значения от 1 для первичного источника и до бесконечности | # <tt>N</tt> - порядок источника, принимает значения от 1 для первичного источника и до бесконечности | ||
# Пусть M - [[Архитектурная акустика/Среда распространения звука|среда распространения звука]] | # Пусть M - [[Архитектурная акустика/Среда распространения звука|среда распространения звука]] | ||
# <tt>SC = M.Множество [[Архитектурная акустика/Первичный источник|источников]]()</tt>; | # <tt>SC = M.Множество [[Архитектурная акустика/Первичный источник|источников]]()</tt>; | ||
# <tt>PC = M.Множество [[Архитектурная акустика/Объемный геометрический объект|отражающих элементов]]()</tt> | # <tt>PC = M.Множество [[Архитектурная акустика/Объемный геометрический объект|отражающих элементов]]()</tt> | ||
# <tt>PlC = M.Множество [[Архитектурная акустика/Секущая плоскость вывода результатов| | # <tt>PlC = M.Множество [[Архитектурная акустика/Секущая плоскость вывода результатов|множество секущих плоскостей]]()</tt> - множество плоскостей вывода результатов. | ||
# <tt>расстояние(точка1, точка2)</tt> - функция расстояния между двумя точками. | # <tt>расстояние(точка1, точка2)</tt> - функция расстояния между двумя точками. | ||
# Пусть <math>dx(\lambda)=\lambda\cdot c</math>, где <math>\lambda</math> - длина волны, <math>c</math> - входной параметр-коэффициент. | # Пусть <math>dx(\lambda)=\lambda\cdot c</math>, где <math>\lambda</math> - длина волны, <math>c</math> - входной параметр-коэффициент. | ||
Течение алгоритма: | Течение алгоритма: | ||
#Задаются полигоны всех поверхностей помещения. | #Задаются полигоны всех поверхностей помещения. | ||
Строка 33: | Строка 35: | ||
#<math>SC' \gets SC</math> - временное множество источников, для хранения первичных и вторичных источников SC' | #<math>SC' \gets SC</math> - временное множество источников, для хранения первичных и вторичных источников SC' | ||
#Для всех источников <math>s_j\in SC'</math> (цикл): | #Для всех источников <math>s_j\in SC'</math> (цикл): | ||
#<math>SC' \gets SC' \setminus\left\{s_j\right\}</math> | ##<math>SC' \gets SC' \setminus\left\{s_j\right\}</math> | ||
## <math>s_j</math> создает лучи во все отражающие элементы - источники следующего порядка. | ## <math>s_j</math> создает лучи во все отражающие элементы - источники следующего порядка. | ||
## Для | ##для всех k от 0 до <math>s_j</math> <tt>.[[Архитектурная акустика/Источник с характеристикой направленности| Ширина полосы частот()]]</tt> -1 | ||
###<math>\omega \gets s_j</math><tt>.[[Архитектурная акустика/Источник с характеристикой направленности|Частота(k)]]</tt> | |||
##Для всех <math>Pl \in PlC</math> | |||
###Для всех <math>\stackrel{\to}{P_t}\in \stackrel{\to}{Pl}</math>. Множество контрольных точек <math>\omega</math> | |||
###<math>\stackrel{\to}{D_1}=\stackrel{\to}{P_t}-s_j</math><tt>. Позиция()</tt> | |||
###<math>I_0\gets s_j</math><tt>.Интенсивность(азимут(<math>\stackrel{\to}{D_1}</math>), зенит(<math>\stackrel{\to}{D_1}</math>), <math>\omega</math></tt>) | |||
###<math>Pl </math>. Зарегистрировать звук <math>(\stackrel{\to}{P_t},I_0,\omega)</math> | |||
##Пусть <math>F \gets PC</math><tt>[[Архитектурная акустика/Поверхность|.множество поверхностей]]</tt> (<math>dx(\omega)</math>) | |||
###Для всех <math>\Delta x \in F</math> | |||
### <math>\stackrel{\to}{D}=\stackrel{\to}{\Delta x}-s_j</math><tt>.Позиция()</tt> | |||
###<math>I_0\gets s_j</math><tt>.Интенсивность(азимут(<math>\stackrel{\to}{D}</math>), зенит(<math>\stackrel{\to}{D}</math>), <math>\omega</math></tt>) | |||
### Пусть <math>r_i</math> - луч на основе <math>\stackrel{\to}{D},\omega,I_0,\beta</math> | |||
###Если интенсивность луча <math>r_i</math> меньше какого-либо порогового значения, то перейти на шаг 7.2, иначе: | ###Если интенсивность луча <math>r_i</math> меньше какого-либо порогового значения, то перейти на шаг 7.2, иначе: | ||
####Каждый излученный луч проверяется на пересечение с другими полигонами, т.е. на наличие тени. | ####Каждый излученный луч проверяется на пересечение с другими полигонами, т.е. на наличие тени. | ||
####Луч пересекает отражающий элемент, возбуждая колебания с определенной фазой в зависимости от того, с какой фазой на него упал луч. В формуле (1) имеем: <math>\frac{\partial\varphi}{\partial\stackrel{\to}{n}}=(grad \varphi_1,\stackrel{\to}{n})=-ike^{i(\omega t-\stackrel{\to}{k}\stackrel{\to}{r_1})}\cos \widehat{\stackrel{\to}{r_1},\stackrel{\to}{n}}</math> | ####Луч пересекает отражающий элемент, возбуждая колебания с определенной фазой в зависимости от того, с какой фазой на него упал луч. В формуле (1) имеем: <math>\frac{\partial\varphi}{\partial\stackrel{\to}{n}}=(grad \varphi_1,\stackrel{\to}{n})=-ike^{i(\omega t-\stackrel{\to}{k}\stackrel{\to}{r_1})}\cos \widehat{\stackrel{\to}{r_1},\stackrel{\to}{n}}</math> | ||
####Каждый отражающий элемент становится источником <math>s'_i</math> с определенными характеристиками (объемной скоростью колебаний), т.е. <math>SC' \gets SC' \cup\left\{s'_i\right\}</math>. | ####Каждый отражающий элемент становится источником <math>s'_i</math> с определенными характеристиками (объемной скоростью колебаний), т.е. <math>SC' \gets SC' \cup\left\{s'_i\right\}</math>. | ||
#Конец цикла | #Конец цикла | ||
=Свойства алгоритма= | =Свойства алгоритма= | ||
==Сложность== | |||
Оценим сложность алгоритма. | |||
Пусть <math>S</math> - множество первичных источников (см. свойство <tt>множество источников()</tt> [[Архитектурная акустика/Среда распространения звука|среды распространения звука]]). | Пусть <math>S</math> - множество первичных источников (см. свойство <tt>множество источников()</tt> [[Архитектурная акустика/Среда распространения звука|среды распространения звука]]). | ||
[[Архитектурная акустика/Интеграл Релея (версия Кулигина)/Шаг 3.2.2|Шаг 3.2.2]] | |||
Пусть <math>R_s = \sum\limits_{i=1}^{|S|}|s_i.</math><tt>Излучаемый звук()</tt><math>|</math> - суммарное количество лучей от всех первичных источников. | Пусть <math>R_s = \sum\limits_{i=1}^{|S|}|s_i.</math><tt>Излучаемый звук()</tt><math>|</math> - суммарное количество лучей от всех первичных источников. | ||
Тогда сложность: <math>O\left(R_s^{\frac{\max\limits_{i=1,N_s}\left(I(s_i)\right)}{I_0}}\right)</math>, где <math>I\left(s\right) = \max\limits_{\forall\omega\in B\left(s\right)}</math><tt>(s.Интенсивность(0, 0, <math>\omega</math>))</tt> - максимальное значение характеристики звука, излучаемого источником <math>s</math> по частотам <math>B\left(s\right)</math>, на которых определена его АЧХ, <math>I_0</math> - пренебрежимый уровень звука (свойство [[Архитектурная акустика/Среда распространения звука|среды распространения]]). | Тогда сложность: <math>O\left(R_s^{\frac{\max\limits_{i=1,N_s}\left(I(s_i)\right)}{I_0}}\right)</math>, где <math>I\left(s\right) = \max\limits_{\forall\omega\in B\left(s\right)}</math><tt>(s.Интенсивность(0, 0, <math>\omega</math>))</tt> - максимальное значение характеристики звука, излучаемого источником <math>s</math> по частотам <math>B\left(s\right)</math>, на которых определена его АЧХ, <math>I_0</math> - пренебрежимый уровень звука (свойство [[Архитектурная акустика/Среда распространения звука|среды распространения]]). | ||
==Возможности распараллеливания== | |||
<graphviz size=1670px> | |||
digraph relay_kuligin_parallel_run{ | |||
rankdir=TB; | |||
node[fontsize=14]; | |||
edge[fontsize=14]; | |||
G0[label="ВХОД"]; | |||
G1[label="1"]; | |||
G2[label="2"]; | |||
G3[label="3"]; | |||
G3_1_s[label="3.1"]; | |||
G3_1_f[label="3.1"]; | |||
G3_2_s[label="3.2"]; | |||
G3_2_f[label="3.2"]; | |||
G3_2_s_1_s[label="3.2.1", URL="https://www.chusov.org/w/index.php?title=Архитектурная_акустика/Интеграл_Релея_(версия_Кулигина)/Шаг_3.2.1"]; | |||
G3_2_s_1_f[label="3.2.1", URL="https://www.chusov.org/w/index.php?title=Архитектурная_акустика/Интеграл_Релея_(версия_Кулигина)/Шаг_3.2.1"]; | |||
G3_2_s_2_s[label="3.2.2", URL="https://www.chusov.org/w/index.php?title=Архитектурная_акустика/Интеграл_Релея_(версия_Кулигина)/Шаг_3.2.2"]; | |||
G3_2_s_2_f[label="3.2.2", URL="https://www.chusov.org/w/index.php?title=Архитектурная_акустика/Интеграл_Релея_(версия_Кулигина)/Шаг_3.2.2"]; | |||
G3_2_f_1_s[label="3.2.1", URL="https://www.chusov.org/w/index.php?title=Архитектурная_акустика/Интеграл_Релея_(версия_Кулигина)/Шаг_3.2.1"]; | |||
G3_2_f_1_f[label="3.2.1", URL="https://www.chusov.org/w/index.php?title=Архитектурная_акустика/Интеграл_Релея_(версия_Кулигина)/Шаг_3.2.1"]; | |||
G3_2_f_2_s[label="3.2.2", URL="https://www.chusov.org/w/index.php?title=Архитектурная_акустика/Интеграл_Релея_(версия_Кулигина)/Шаг_3.2.2"]; | |||
G3_2_f_2_f[label="3.2.2", URL="https://www.chusov.org/w/index.php?title=Архитектурная_акустика/Интеграл_Релея_(версия_Кулигина)/Шаг_3.2.2"]; | |||
G3_2_s_1_s_1_s[shape="diamond", label="3.2.1.1"]; | |||
G3_2_s_1_s_1_f[shape="diamond", label="3.2.1.1"]; | |||
G3_2_s_1_f_1_s[shape="diamond", label="3.2.1.1"]; | |||
G3_2_s_1_f_1_f[shape="diamond", label="3.2.1.1"]; | |||
G3_2_s_2_s_1_s[label="3.2.2.1"]; | |||
G3_2_s_2_s_1_f[label="3.2.2.1"]; | |||
G3_2_s_2_f_1_s[label="3.2.2.1"]; | |||
G3_2_s_2_f_1_f[label="3.2.2.1"]; | |||
G3_2_f_1_s_1_s[shape="diamond", label="3.2.1.1"]; | |||
G3_2_f_1_s_1_f[shape="diamond", label="3.2.1.1"]; | |||
G3_2_f_1_f_1_s[shape="diamond", label="3.2.1.1"]; | |||
G3_2_f_1_f_1_f[shape="diamond", label="3.2.1.1"]; | |||
G3_2_f_2_s_1_s[label="3.2.2.1"]; | |||
G3_2_f_2_s_1_f[label="3.2.2.1"]; | |||
G3_2_f_2_f_1_s[label="3.2.2.1"]; | |||
G3_2_f_2_f_1_f[label="3.2.2.1"]; | |||
G3_2_s_1_s_1_s_1[label="3.2.1.1.1"]; | |||
G3_2_s_1_s_1_f_1[label="3.2.1.1.1"]; | |||
G3_2_s_1_f_1_s_1[label="3.2.1.1.1"]; | |||
G3_2_s_1_f_1_f_1[label="3.2.1.1.1"]; | |||
G3_2_s_2_s_1_s_1_s[shape="diamond", label="3.2.2.1.1"]; | |||
G3_2_s_2_s_1_s_1_f[shape="diamond", label="3.2.2.1.1"]; | |||
G3_2_s_2_s_1_f_1_s[shape="diamond", label="3.2.2.1.1"]; | |||
G3_2_s_2_s_1_f_1_f[shape="diamond", label="3.2.2.1.1"]; | |||
G3_2_s_2_f_1_s_1_s[shape="diamond", label="3.2.2.1.1"]; | |||
G3_2_s_2_f_1_s_1_f[shape="diamond", label="3.2.2.1.1"]; | |||
G3_2_s_2_f_1_f_1_s[shape="diamond", label="3.2.2.1.1"]; | |||
G3_2_s_2_f_1_f_1_f[shape="diamond", label="3.2.2.1.1"]; | |||
G3_2_f_1_s_1_s_1[label="3.2.1.1.1"]; | |||
G3_2_f_1_s_1_f_1[label="3.2.1.1.1"]; | |||
G3_2_f_1_f_1_s_1[label="3.2.1.1.1"]; | |||
G3_2_f_1_f_1_f_1[label="3.2.1.1.1"]; | |||
G3_2_f_2_s_1_s_1_s[shape="diamond", label="3.2.2.1.1"]; | |||
G3_2_f_2_s_1_s_1_f[shape="diamond", label="3.2.2.1.1"]; | |||
G3_2_f_2_s_1_f_1_s[shape="diamond", label="3.2.2.1.1"]; | |||
G3_2_f_2_s_1_f_1_f[shape="diamond", label="3.2.2.1.1"]; | |||
G3_2_f_2_f_1_s_1_s[shape="diamond", label="3.2.2.1.1"]; | |||
G3_2_f_2_f_1_s_1_f[shape="diamond", label="3.2.2.1.1"]; | |||
G3_2_f_2_f_1_f_1_s[shape="diamond", label="3.2.2.1.1"]; | |||
G3_2_f_2_f_1_f_1_f[shape="diamond", label="3.2.2.1.1"]; | |||
G3_2_s_1_s_1_s_2[label="3.2.1.1.2"]; | |||
G3_2_s_1_s_1_f_2[label="3.2.1.1.2"]; | |||
G3_2_s_1_f_1_s_2[label="3.2.1.1.2"]; | |||
G3_2_s_1_f_1_f_2[label="3.2.1.1.2"]; | |||
G3_2_s_2_s_1_s_1_s_1[label="3.2.2.1.1.1"]; | |||
G3_2_s_2_s_1_s_1_f_1[label="3.2.2.1.1.1"]; | |||
G3_2_s_2_s_1_f_1_s_1[label="3.2.2.1.1.1"]; | |||
G3_2_s_2_s_1_f_1_f_1[label="3.2.2.1.1.1"]; | |||
G3_2_s_2_f_1_s_1_s_1[label="3.2.2.1.1.1"]; | |||
G3_2_s_2_f_1_s_1_f_1[label="3.2.2.1.1.1"]; | |||
G3_2_s_2_f_1_f_1_s_1[label="3.2.2.1.1.1"]; | |||
G3_2_s_2_f_1_f_1_f_1[label="3.2.2.1.1.1"]; | |||
G3_2_f_1_s_1_s_2[label="3.2.2.1.1.1"]; | |||
G3_2_f_1_s_1_f_2[label="3.2.2.1.1.1"]; | |||
G3_2_f_1_f_1_s_2[label="3.2.2.1.1.1"]; | |||
G3_2_f_1_f_1_f_2[label="3.2.2.1.1.1"]; | |||
G3_2_f_2_s_1_s_1_s_1[label="3.2.2.1.1.1"]; | |||
G3_2_f_2_s_1_s_1_f_1[label="3.2.2.1.1.1"]; | |||
G3_2_f_2_s_1_f_1_s_1[label="3.2.2.1.1.1"]; | |||
G3_2_f_2_s_1_f_1_f_1[label="3.2.2.1.1.1"]; | |||
G3_2_f_2_f_1_s_1_s_1[label="3.2.2.1.1.1"]; | |||
G3_2_f_2_f_1_s_1_f_1[label="3.2.2.1.1.1"]; | |||
G3_2_f_2_f_1_f_1_s_1[label="3.2.2.1.1.1"]; | |||
G3_2_f_2_f_1_f_1_f_1[label="3.2.2.1.1.1"]; | |||
G3_2_s_2_s_1_s_1_s_2[label="3.2.2.1.1.2"]; | |||
G3_2_s_2_s_1_s_1_f_2[label="3.2.2.1.1.2"]; | |||
G3_2_s_2_s_1_f_1_s_2[label="3.2.2.1.1.2"]; | |||
G3_2_s_2_s_1_f_1_f_2[label="3.2.2.1.1.2"]; | |||
G3_2_s_2_f_1_s_1_s_2[label="3.2.2.1.1.2"]; | |||
G3_2_s_2_f_1_s_1_f_2[label="3.2.2.1.1.2"]; | |||
G3_2_s_2_f_1_f_1_s_2[label="3.2.2.1.1.2"]; | |||
G3_2_s_2_f_1_f_1_f_2[label="3.2.2.1.1.2"]; | |||
G3_2_f_2_s_1_s_1_s_2[label="3.2.2.1.1.2"]; | |||
G3_2_f_2_s_1_s_1_f_2[label="3.2.2.1.1.2"]; | |||
G3_2_f_2_s_1_f_1_s_2[label="3.2.2.1.1.2"]; | |||
G3_2_f_2_s_1_f_1_f_2[label="3.2.2.1.1.2"]; | |||
G3_2_f_2_f_1_s_1_s_2[label="3.2.2.1.1.2"]; | |||
G3_2_f_2_f_1_s_1_f_2[label="3.2.2.1.1.2"]; | |||
G3_2_f_2_f_1_f_1_s_2[label="3.2.2.1.1.2"]; | |||
G3_2_f_2_f_1_f_1_f_2[label="3.2.2.1.1.2"]; | |||
{ rank = same; "G2"; "ВЫХОД";} | |||
{ rank = same; "G3_1_s"; "G3_1_f";} | |||
{ rank = same; "G3_2_s"; "G3_2_f";} | |||
{ rank = same; "G3_2_s_1_s"; "G3_2_s_2_s"; "G3_2_s_1_f"; "G3_2_s_2_f"; "G3_2_f_2_f"; "G3_2_f_1_f";"G3_2_f_2_s"; "G3_2_f_1_s";} | |||
G3_2_s_1_s->G3_2_s_2_s->G3_2_s_1_f->G3_2_s_2_f[color="white"]; | |||
G3_2_f_2_f->G3_2_f_1_f->G3_2_f_2_s->G3_2_f_1_s[color="white"]; | |||
G0->G1->G2->ВЫХОД; | |||
G2->G3[label="ложь"]; | |||
G3->G3_1_s[label=<s<sub>1</sub>>]; | |||
G3->G3_1_f[label=<s<sub>|SC|</sub>>]; | |||
G3_1_s->G3_2_s; | |||
G3_1_f->G3_2_f; | |||
G3_2_s->G3_2_s_1_s[label=<ω<sub>1</sub>>]; | |||
G3_2_s->G3_2_s_2_s[label=<ω<sub>1</sub>>]; | |||
G3_2_s->G3_2_s_1_f[label=<ω<sub>|W|</sub>>]; | |||
G3_2_s->G3_2_s_2_f[label=<ω<sub>|W|</sub>>]; | |||
G3_2_f->G3_2_f_1_s[label=<ω<sub>1</sub>>]; | |||
G3_2_f->G3_2_f_2_s[label=<ω<sub>1</sub>>]; | |||
G3_2_f->G3_2_f_1_f[label=<ω<sub>|W|</sub>>]; | |||
G3_2_f->G3_2_f_2_f[label=<ω<sub>|W|</sub>>]; | |||
G3_2_s_1_s->G3_2_s_1_s_1_s[label=<ρ<sub>1</sub>>]; | |||
G3_2_s_1_s->G3_2_s_1_s_1_f[label=<ρ<sub>|REG|</sub>>]; | |||
G3_2_s_2_s->G3_2_s_2_s_1_s[label=<f<sub>1</sub>>]; | |||
G3_2_s_2_s->G3_2_s_2_s_1_f[label=<f<sub>|F|</sub>>]; | |||
G3_2_s_1_f->G3_2_s_1_f_1_s[label=<ρ<sub>1</sub>>]; | |||
G3_2_s_1_f->G3_2_s_1_f_1_f[label=<ρ<sub>|REG|</sub>>]; | |||
G3_2_s_2_f->G3_2_s_2_f_1_s[label=<f<sub>1</sub>>]; | |||
G3_2_s_2_f->G3_2_s_2_f_1_f[label=<f<sub>|F|</sub>>]; | |||
G3_2_f_1_s->G3_2_f_1_s_1_s[label=<ρ<sub>1</sub>>]; | |||
G3_2_f_1_s->G3_2_f_1_s_1_f[label=<ρ<sub>|REG|</sub>>]; | |||
G3_2_f_2_s->G3_2_f_2_s_1_s[label=<f<sub>1</sub>>]; | |||
G3_2_f_2_s->G3_2_f_2_s_1_f[label=<f<sub>|F|</sub>>]; | |||
G3_2_f_1_f->G3_2_f_1_f_1_s[label=<ρ<sub>1</sub>>]; | |||
G3_2_f_1_f->G3_2_f_1_f_1_f[label=<ρ<sub>|REG|</sub>>]; | |||
G3_2_f_2_f->G3_2_f_2_f_1_s[label=<f<sub>1</sub>>]; | |||
G3_2_f_2_f->G3_2_f_2_f_1_f[label=<f<sub>|F|</sub>>]; | |||
G3_2_s_1_s_join[label="join"]; | |||
G3_2_s_1_f_join[label="join"]; | |||
G3_2_f_1_s_join[label="join"]; | |||
G3_2_f_1_f_join[label="join"]; | |||
G3_2_s_2_s_1_s_join[label="join"]; | |||
G3_2_s_2_s_1_f_join[label="join"]; | |||
G3_2_s_2_f_1_s_join[label="join"]; | |||
G3_2_s_2_f_1_f_join[label="join"]; | |||
G3_2_f_2_s_1_s_join[label="join"]; | |||
G3_2_f_2_s_1_f_join[label="join"]; | |||
G3_2_f_2_f_1_s_join[label="join"]; | |||
G3_2_f_2_f_1_f_join[label="join"]; | |||
G3_2_s_2_s_join[label="join"]; | |||
G3_2_s_2_f_join[label="join"]; | |||
G3_2_f_2_s_join[label="join"]; | |||
G3_2_f_2_f_join[label="join"]; | |||
G3_2_s_s_join[label="join"]; | |||
G3_2_s_f_join[label="join"]; | |||
G3_2_f_s_join[label="join"]; | |||
G3_2_f_f_join[label="join"]; | |||
G3_2_s_join[label="join"]; | |||
G3_2_f_join[label="join"]; | |||
G3_join[label="join"]; | |||
G3_2_s_1_s_1_s->G3_2_s_1_s_1_s_1->G3_2_s_1_s_1_s_2->G3_2_s_1_s_join; | |||
G3_2_s_1_s_1_f->G3_2_s_1_s_1_f_1->G3_2_s_1_s_1_f_2->G3_2_s_1_s_join; | |||
G3_2_s_2_s_1_s->G3_2_s_2_s_1_s_1_s[label=<p<sub>1</sub>>]; | |||
G3_2_s_2_s_1_s->G3_2_s_2_s_1_s_1_f[label=<p<sub>|f|</sub>>]; | |||
G3_2_s_2_s_1_f->G3_2_s_2_s_1_f_1_s[label=<p<sub>1</sub>>]; | |||
G3_2_s_2_s_1_f->G3_2_s_2_s_1_f_1_f[label=<p<sub>|f|</sub>>]; | |||
G3_2_s_1_f_1_s->G3_2_s_1_f_1_s_1->G3_2_s_1_f_1_s_2->G3_2_s_1_f_join; | |||
G3_2_s_1_f_1_f->G3_2_s_1_f_1_f_1->G3_2_s_1_f_1_f_2->G3_2_s_1_f_join; | |||
G3_2_s_2_f_1_s->G3_2_s_2_f_1_s_1_s[label=<p<sub>1</sub>>]; | |||
G3_2_s_2_f_1_s->G3_2_s_2_f_1_s_1_f[label=<p<sub>|f|</sub>>]; | |||
G3_2_s_2_f_1_f->G3_2_s_2_f_1_f_1_s[label=<p<sub>1</sub>>]; | |||
G3_2_s_2_f_1_f->G3_2_s_2_f_1_f_1_f[label=<p<sub>|f|</sub>>]; | |||
G3_2_f_1_s_1_s->G3_2_f_1_s_1_s_1->G3_2_f_1_s_1_s_2->G3_2_f_1_s_join; | |||
G3_2_f_1_s_1_f->G3_2_f_1_s_1_f_1->G3_2_f_1_s_1_f_2->G3_2_f_1_s_join; | |||
G3_2_f_2_s_1_s->G3_2_f_2_s_1_s_1_s[label=<p<sub>1</sub>>]; | |||
G3_2_f_2_s_1_s->G3_2_f_2_s_1_s_1_f[label=<p<sub>|f|</sub>>]; | |||
G3_2_f_2_s_1_f->G3_2_f_2_s_1_f_1_s[label=<p<sub>1</sub>>]; | |||
G3_2_f_2_s_1_f->G3_2_f_2_s_1_f_1_f[label=<p<sub>|f|</sub>>]; | |||
G3_2_f_1_f_1_s->G3_2_f_1_f_1_s_1->G3_2_f_1_f_1_s_2->G3_2_f_1_f_join; | |||
G3_2_f_1_f_1_f->G3_2_f_1_f_1_f_1->G3_2_f_1_f_1_f_2->G3_2_f_1_f_join; | |||
G3_2_f_2_f_1_s->G3_2_f_2_f_1_s_1_s[label=<p<sub>1</sub>>]; | |||
G3_2_f_2_f_1_s->G3_2_f_2_f_1_s_1_f[label=<p<sub>|f|</sub>>]; | |||
G3_2_f_2_f_1_f->G3_2_f_2_f_1_f_1_s[label=<p<sub>1</sub>>]; | |||
G3_2_f_2_f_1_f->G3_2_f_2_f_1_f_1_f[label=<p<sub>|f|</sub>>]; | |||
G3_2_s_2_s_1_s_1_s->G3_2_s_2_s_1_s_1_s_1->G3_2_s_2_s_1_s_1_s_2->G3_2_s_2_s_1_s_join; | |||
G3_2_s_2_s_1_s_1_f->G3_2_s_2_s_1_s_1_f_1->G3_2_s_2_s_1_s_1_f_2->G3_2_s_2_s_1_s_join; | |||
G3_2_s_2_s_1_f_1_s->G3_2_s_2_s_1_f_1_s_1->G3_2_s_2_s_1_f_1_s_2->G3_2_s_2_s_1_f_join; | |||
G3_2_s_2_s_1_f_1_f->G3_2_s_2_s_1_f_1_f_1->G3_2_s_2_s_1_f_1_f_2->G3_2_s_2_s_1_f_join; | |||
G3_2_s_2_f_1_s_1_s->G3_2_s_2_f_1_s_1_s_1->G3_2_s_2_f_1_s_1_s_2->G3_2_s_2_f_1_s_join; | |||
G3_2_s_2_f_1_s_1_f->G3_2_s_2_f_1_s_1_f_1->G3_2_s_2_f_1_s_1_f_2->G3_2_s_2_f_1_s_join; | |||
G3_2_s_2_f_1_f_1_s->G3_2_s_2_f_1_f_1_s_1->G3_2_s_2_f_1_f_1_s_2->G3_2_s_2_f_1_f_join; | |||
G3_2_s_2_f_1_f_1_f->G3_2_s_2_f_1_f_1_f_1->G3_2_s_2_f_1_f_1_f_2->G3_2_s_2_f_1_f_join; | |||
G3_2_f_2_s_1_s_1_s->G3_2_f_2_s_1_s_1_s_1->G3_2_f_2_s_1_s_1_s_2->G3_2_f_2_s_1_s_join; | |||
G3_2_f_2_s_1_s_1_f->G3_2_f_2_s_1_s_1_f_1->G3_2_f_2_s_1_s_1_f_2->G3_2_f_2_s_1_s_join; | |||
G3_2_f_2_s_1_f_1_s->G3_2_f_2_s_1_f_1_s_1->G3_2_f_2_s_1_f_1_s_2->G3_2_f_2_s_1_f_join; | |||
G3_2_f_2_s_1_f_1_f->G3_2_f_2_s_1_f_1_f_1->G3_2_f_2_s_1_f_1_f_2->G3_2_f_2_s_1_f_join; | |||
G3_2_f_2_f_1_s_1_s->G3_2_f_2_f_1_s_1_s_1->G3_2_f_2_f_1_s_1_s_2->G3_2_f_2_f_1_s_join; | |||
G3_2_f_2_f_1_s_1_f->G3_2_f_2_f_1_s_1_f_1->G3_2_f_2_f_1_s_1_f_2->G3_2_f_2_f_1_s_join; | |||
G3_2_f_2_f_1_f_1_s->G3_2_f_2_f_1_f_1_s_1->G3_2_f_2_f_1_f_1_s_2->G3_2_f_2_f_1_f_join; | |||
G3_2_f_2_f_1_f_1_f->G3_2_f_2_f_1_f_1_f_1->G3_2_f_2_f_1_f_1_f_2->G3_2_f_2_f_1_f_join; | |||
G3_2_s_1_s_1_s->G3_2_s_1_s_join[label="ложь"]; | |||
G3_2_s_1_s_1_f->G3_2_s_1_s_join[label="ложь"]; | |||
G3_2_s_1_f_1_s->G3_2_s_1_f_join[label="ложь"]; | |||
G3_2_s_1_f_1_f->G3_2_s_1_f_join[label="ложь"]; | |||
G3_2_f_1_s_1_s->G3_2_f_1_s_join[label="ложь"]; | |||
G3_2_f_1_s_1_f->G3_2_f_1_s_join[label="ложь"]; | |||
G3_2_f_1_f_1_s->G3_2_f_1_f_join[label="ложь"]; | |||
G3_2_f_1_f_1_f->G3_2_f_1_f_join[label="ложь"]; | |||
G3_2_s_2_s_1_s_1_s->G3_2_s_2_s_1_s_join[label="ложь"]; | |||
G3_2_s_2_s_1_s_1_f->G3_2_s_2_s_1_s_join[label="ложь"]; | |||
G3_2_s_2_s_1_f_1_s->G3_2_s_2_s_1_f_join[label="ложь"]; | |||
G3_2_s_2_s_1_f_1_f->G3_2_s_2_s_1_f_join[label="ложь"]; | |||
G3_2_s_2_f_1_s_1_s->G3_2_s_2_f_1_s_join[label="ложь"]; | |||
G3_2_s_2_f_1_s_1_f->G3_2_s_2_f_1_s_join[label="ложь"]; | |||
G3_2_s_2_f_1_f_1_s->G3_2_s_2_f_1_f_join[label="ложь"]; | |||
G3_2_s_2_f_1_f_1_f->G3_2_s_2_f_1_f_join[label="ложь"]; | |||
G3_2_f_2_s_1_s_1_s->G3_2_f_2_s_1_s_join[label="ложь"]; | |||
G3_2_f_2_s_1_s_1_f->G3_2_f_2_s_1_s_join[label="ложь"]; | |||
G3_2_f_2_s_1_f_1_s->G3_2_f_2_s_1_f_join[label="ложь"]; | |||
G3_2_f_2_s_1_f_1_f->G3_2_f_2_s_1_f_join[label="ложь"]; | |||
G3_2_f_2_f_1_s_1_s->G3_2_f_2_f_1_s_join[label="ложь"]; | |||
G3_2_f_2_f_1_s_1_f->G3_2_f_2_f_1_s_join[label="ложь"]; | |||
G3_2_f_2_f_1_f_1_s->G3_2_f_2_f_1_f_join[label="ложь"]; | |||
G3_2_f_2_f_1_f_1_f->G3_2_f_2_f_1_f_join[label="ложь"]; | |||
G3_2_s_2_s_1_s_join->G3_2_s_2_s_join; | |||
G3_2_s_2_s_1_f_join->G3_2_s_2_s_join; | |||
G3_2_s_2_f_1_s_join->G3_2_s_2_f_join; | |||
G3_2_s_2_f_1_f_join->G3_2_s_2_f_join; | |||
G3_2_f_2_s_1_s_join->G3_2_f_2_s_join; | |||
G3_2_f_2_s_1_f_join->G3_2_f_2_s_join; | |||
G3_2_f_2_f_1_s_join->G3_2_f_2_f_join; | |||
G3_2_f_2_f_1_f_join->G3_2_f_2_f_join; | |||
G3_2_s_1_s_join->G3_2_s_s_join; | |||
G3_2_s_1_f_join->G3_2_s_f_join; | |||
G3_2_f_1_s_join->G3_2_f_s_join; | |||
G3_2_f_1_f_join->G3_2_f_f_join; | |||
G3_2_s_2_s_join->G3_2_s_s_join; | |||
G3_2_s_2_f_join->G3_2_s_f_join; | |||
G3_2_f_2_s_join->G3_2_f_s_join; | |||
G3_2_f_2_f_join->G3_2_f_f_join; | |||
G3_2_s_s_join->G3_2_s_join; | |||
G3_2_s_f_join->G3_2_s_join; | |||
G3_2_f_s_join->G3_2_f_join; | |||
G3_2_f_f_join->G3_2_f_join; | |||
G3_2_s_join->G3_join; | |||
G3_2_f_join->G3_join; | |||
G3_join->"Переход на шаг 2"; | |||
} | |||
</graphviz> | |||
Граф параллельного выполнения алгоритма. |
Текущая версия на 20:28, 7 сентября 2017
Модель распространения звука в помещении, в которой каждая поверхность представлена в виде системы плоских колеблющихся поршней. Каждый такой поршень при попадании на него звукового луча оказывается вторичным источником звука.
Является вариантом реализации модели расчета акустического поля, в котором, в отличие от исходной версии вся поверхность помещения разбивается на элементы малой площади. В модели анализируется влияние каждого имеющегося источника звука на каждый возможный элемент излучения . Каждый источник оказывает влияние на каждый элемент , если только не находится в тени источника , и влияние этого источника на поверхность не падает ниже пренебрежимого уровня звука модели среды распространения. Если влияние действительно имеется, элемент сам становится источником отраженного звука. Направленность такого источника рассчитывается с помощью интеграла Релея:
на сфере
, где:- - потенциал колебательной скорости в точке, заданной в сферической системе координат, в которой - единичный вектор сонаправленный главной оси источника.
- поверхность или ее часть, которая колеблется как поршень. -
- - малый элемент поверхности в окрестности некоторой точки , принадлежащей поверхности и заданной в системе координат поверхности, в которой аппликата сонаправлена главной оси источника.
- - проекция градиента потенциала колебательной скорости на нормаль к . Фактически является нормальной составляющей колебательной скорости источника
- .
- .
Алгоритм
Предусловия:
- - коэффициент ослабления
- N - порядок источника, принимает значения от 1 для первичного источника и до бесконечности
- Пусть M - среда распространения звука
- SC = M.Множество источников();
- PC = M.Множество отражающих элементов()
- PlC = M.Множество множество секущих плоскостей() - множество плоскостей вывода результатов.
- расстояние(точка1, точка2) - функция расстояния между двумя точками.
- Пусть , где - длина волны, - входной параметр-коэффициент.
Течение алгоритма:
- Задаются полигоны всех поверхностей помещения.
- Разбитие всех полигонов поверхностей помещения на элементы (источники) с некоторыми линейными размерами, которое зависит от частоты рассчитываемого тона.
- Задаются контрольные плоскости вывода результата.
- - временное множество источников, для хранения первичных и вторичных источников SC'
- Для всех источников
- создает лучи во все отражающие элементы - источники следующего порядка.
- для всех k от 0 до Ширина полосы частот() -1 .
- Для всех
- Для всех . Множество контрольных точек
- . Позиция()
- .Интенсивность(азимут( ), зенит( ), )
- . Зарегистрировать звук
- Пусть .множество поверхностей ( )
- Для всех
- .Позиция()
- .Интенсивность(азимут( ), зенит( ), )
- Пусть - луч на основе
- Если интенсивность луча
- Каждый излученный луч проверяется на пересечение с другими полигонами, т.е. на наличие тени.
- Луч пересекает отражающий элемент, возбуждая колебания с определенной фазой в зависимости от того, с какой фазой на него упал луч. В формуле (1) имеем:
- Каждый отражающий элемент становится источником с определенными характеристиками (объемной скоростью колебаний), т.е. .
меньше какого-либо порогового значения, то перейти на шаг 7.2, иначе:
(цикл):
- Конец цикла
Свойства алгоритма
Сложность
Оценим сложность алгоритма. Пусть среды распространения звука). Шаг 3.2.2 Пусть Излучаемый звук() - суммарное количество лучей от всех первичных источников.
- множество первичных источников (см. свойство множество источников()Тогда сложность: среды распространения).
, где (s.Интенсивность(0, 0, )) - максимальное значение характеристики звука, излучаемого источником по частотам , на которых определена его АЧХ, - пренебрежимый уровень звука (свойствоВозможности распараллеливания

Граф параллельного выполнения алгоритма.