Архитектурная акустика/Реализация/CPrimarySource::CPrimarySource

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
CPrimarySource() = default; //1
CPrimarySource(const CInputModel& refModel, const CAMaaS::ISourceObject& refSource); //2

Создают экземпляры класса CPrimarySource.

  1. Конструктор по умолчанию, создающий неинициализированный источник.
  2. Конструктор, создающий источник на основе его предметно-независимого описания.
Параметры
refModelОписание модели помещения.
refSourceПредметно-независимое описание создаваемого источника поля.

Перегрузка 2 конструктора создает источник на основе его предметно-независимого описания при обработке запроса DomainStartSimulation. При этом данные предметной области, указатель на которые возвращается методом ISourceObject::GetDomainData имеют следующий формат.

Предварительная версия 1.

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

Предварительная версия 2 (текущая, ветка репозитория: chusov-laptop-pc).

Поле Идентификатор версии Пары "идентификатор поля данных - данные";
Размер, байт 4 см. ниже

Идентификатор версии принимает значение version_2_domain_id, равное 0x80000001. Значение обеспечивает обратную совместимость с первой версией, т.к. при интерпретации его как числа IEEE754 получается отрицательное значение, что невозможно для интенсивностей.

Поля данных (второе поле таблицы) задаются целочисленным 4-х байтовым идентификатором типа данных (из перечисления version_2_domain_field_ids) и самими данными, задающими АЧХ и ХН источника, которые определены указанным ниже образом.

При задании характеристик источника следует учитывать, что интенсивность расчитывается из произведения значений АЧХ и ХН для указанных частоты и направления.

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

Если АЧХ задается таблицей, то содержимое поля определено следующим образом.

Поле TableAfcId Чисто строк таблицы Пары значений "частота-характеристика"
Размер, байт 4 4 (Число строк таблицы)Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \cdot (8 + 8)

Первый столбец таблицы содержит целочисленное значение 0x00000102, определяющее табличную АЧХ.

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

Элементы третьего столбца содержат пары "частота-характеристика" чисел с плавающей точкой двойной точности.

Частоты таблицы не обязательно должны соответствовать октавным частотам предметной области (т.е. значениям . Также не требуется описывать все эти частоты.

В случае, если программа запрашивает внетабличное значение Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): I\left(f\right) , лежащее между строками Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): (f_1, I_1) и Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): (f_2, I_2) (где Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): f_1 < f2 ), возвращается значение характеристики Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): I на прямой, соединяющей точки Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): (f_1, I_1) и Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): (f_2, I_2) .

Если запрашиваемая частота меньше минимальной частоты таблицы, возвращается значение характеристики для минимальной частоты. Аналогично, если запрашиваемая частота больше максимальной частоты таблицы, возвращается значение характеристики для максимальной частоты.

Если таблица пуста, используется равномерная АЧХ, возвращающая единицу для всех частот.

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


Поле ExpressionAfcId Чисто байт строки utf-8 строка с математическим выражением
Размер, байт 4 4 Число байт строки


Первый столбец таблицы содержит целочисленное значение 0x00000101, определяющее аналитическую АЧХ.

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

Третий столбец определяет выражение. Выражение должно быть определено одномерной функцией, например F(freq) = (freq-9) / sqrt(1 + pow(freq, 2)). Имя параметра или функции не имеет значения. Подробнее описание синтаксиса: см. Архитектурная акустика/Реализация/Expression.

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

Если ХН задается таблицей, то содержимое поля определено следующим образом.

Поле TablePatternId Чисто строк таблицы Четверки значений "частота-азимут-зенит-характеристика"
Размер, байт 4 4 (Число строк таблицы)

Первый столбец таблицы содержит целочисленное значение 0x00000002, определяющее табличную ХН.

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

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

При запросе на получение характеристики в некоторой внетабличной точке, характеристика линейно аппроксимируется по соседним ячейкам трехмерной таблицы "частота-азимут-зенит-характеристика" - для частоты, азимута и зенита. Если при этом по частоте происходит выход за пределы таблицы, возвращается ближайшая характеристика (минимальная или максимальная) аналогично табличной АЧХ. Если происходит выход за пределы таблицы по азимуту и/или зениту, производится отображение угла на область Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \left[0; 2\pi\right) .

Например, для таблицы

Частота, Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): f Азимут, Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \theta Зенит, Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \varphi Характеристика
300 0 0
Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \pi Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \pi 0.5
2000 0 0 0.75
Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): -\frac{\pi}{2} 0
Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \frac{\pi}{2} 0 0.1

значения характеристики Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): I(f, \theta, \varphi) вычисляются следующим образом:

  • Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): I(f = 125, \theta = 0, \varphi = 0) = I_{f=300}(\theta = 0, \varphi = 0) = \left(I_{f=300;\theta=\pi}\left(\varphi = 0\right)-I_{f=300;\theta=0}\left(\varphi=0\right)\right)\frac{\theta - 0_{\theta}}{0_{\theta} - \pi_{\theta}}+I_{f=300;\theta=0}\left(\varphi=0\right) .

Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): I_{f=300;\theta=0}\left(\varphi = 0\right) = I_{f=300;\theta=0;\varphi=0} = 1 ,

.

Отсюда Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): I(f = 125, \theta = 0, \varphi = 0) = (0.5 - 1) \frac{0 - 0}{\pi - 0} + 1 = 1 .

  • Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): I\left(f=1000,\theta=\frac{\pi}{4},\varphi=\frac{\pi}{4}\right) = \left(I_{f=2000}\left(\theta=\frac{\pi}{4},\varphi=\frac{\pi}{4}\right) - I_{f=300}\left(\theta=\frac{\pi}{4},\varphi=\frac{\pi}{4}\right)\right)\frac{1000_f - 300_f}{2000_f - 300_f} + I_{f=300}\left(\theta=\frac{\pi}{4},\varphi=\frac{\pi}{4}\right) .

Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): I_{f=300}\left(\theta=\frac{\pi}{4},\varphi=\frac{\pi}{4}\right) = \left(I_{f=300;\theta=\pi}\left(\varphi=\frac{\pi}{4}\right) - I_{f=300;\theta=0}\left(\varphi=\frac{\pi}{4}\right)\right)\frac{\left(\frac{\pi}{4}\right)_{\theta}-0_{\theta}}{\pi_{\theta} - 0_{\theta}} + I_{f=300;\theta=0}\left(\varphi=\frac{\pi}{4}\right) .

Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): I_{f=300;\theta=0}\left(\varphi = \frac{\pi}{4}\right) = I_{f=300;\theta=0;\varphi=0} = 1 ,

Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): I_{f=300;\theta=\pi}\left(\varphi = \frac{\pi}{4}\right) = I_{f=300;\theta=\pi;\varphi=\pi} = 0.5 .

Тогда Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): I_{f=300}\left(\theta=\frac{\pi}{4}, \varphi=\frac{\varphi}{4}\right)=\left(0.5-1\right)\frac{\frac{\pi}{4} - 0}{\pi - 0} + 1 = 0.875 .

Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): I_{f=2000}\left(\theta=\frac{\pi}{4},\varphi=\frac{\pi}{4}\right) = \left(I_{f=2000, \theta=\frac{\pi}{2}}\left(\varphi=\frac{\pi}{4}\right) - I_{f=2000, \theta=0}\left(\varphi=\frac{\pi}{4}\right)\right)\frac{\left(\frac{\pi}{4}\right)_{\theta}-0_{\theta}}{\left(\frac{\pi}{2}\right)_{\theta}-0_\theta} + I_{f=2000, \theta=0}\left(\varphi=\frac{\pi}{4}\right) .

.

Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): I_{f=2000,\theta=0}\left(\varphi=\frac{\pi}{4}\right)=\left(I_{f=2000, \theta=0, \varphi=-\frac{\pi}{2}} - I_{f=2000,\theta=0,\varphi=0}\right)\frac{\left(\frac{\pi}{4}\right)_{\varphi}-0_{\varphi}}{\left(2\pi-\frac{\pi}{2}\right)_{\varphi}-0_{\varphi}} + I_{f=2000,\theta=0,\varphi=0} .

Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): I_{f=2000,\theta=0,\varphi=-\frac{\pi}{2}}=0 .

Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): I_{f=2000,\theta=0,\varphi=0}=0.75 .

Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): I_{f=2000,\theta=0}\left(\varphi=\frac{\pi}{4}\right)=\left(0 - 0.75\right)\frac{\frac{\pi}{4}-0}{\frac{3}{2}\pi-0}+0.75 = 0.625 .

Отсюда Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): I_{f=2000}\left(\theta=\frac{\pi}{4},\varphi=\frac{\pi}{4}\right)=\left(0.1-0.625\right)\frac{\frac{\pi}{4}-0}{\frac{\pi}{2}-0}+0.625=0.363 .

Тогда Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): I\left(f=1000,\theta=\frac{\pi}{4},\varphi=\frac{\pi}{4}\right)=\left(0.363-0.875\right)\frac{1000-3000}{2000-300}+0.875=0.664 .

Если таблица пуста, используется равномерная АЧХ, возвращающая единицу для всех частот.

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

Поле ExpressionPatternId Чисто байт строки utf-8 строка с математическим выражением
Размер, байт 4 4 Число байт строки

Первый столбец таблицы содержит целочисленное значение 0x00000001, определяющее аналитическую ХН.

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

Третий столбец определяет выражение. Выражение должно быть определено тнрехмерной функцией от линейной частоты, азимута и зенита в радинах, например R(freq,theta, phi) = pow(cos(theta) * sin(phi), 2). Имя параметров не имеет значения, но имеет значение позиция аргументов функции. Если какой-либо параметр не используется, он все равно должен быть указан в списке аргументов функции. Подробнее описание синтаксиса: см. Архитектурная акустика/Реализация/Expression.