Моделирование шума¶
Обзор¶
Функции шума оценивают уровни звука вокруг источников среди препятствий (зданий, стен) и растительности и возвращают их полигонами полос уровня (noise_level, дБ). Три функции различаются моделью распространения и временем расчёта:
Функция |
Источники |
Модель |
|---|---|---|
точки, линии, полигоны |
Уровни на регулярной сетке приёмников: прямой путь, отражения первого порядка и дифракция у углов зданий, энергетическое суммирование (Rust) |
|
точки |
Распространение волнового фронта по слоям затухания с многократными отражениями и поглощением препятствиями |
|
точки, линии, полигоны |
Маски видимости и затухание с расстоянием, без отражений и поглощения |
Все три функции принимают уровень источника source_noise_db (дБ на расстоянии 1 м от источника) и характерную частоту geometric_mean_freq_hz (Гц) либо как аргументы, либо как столбцы для каждого источника, а также температуру воздуха (°C), от которой зависит поглощение в воздухе.
Расчёт на сетке приёмников¶
Метод¶
objectnat.simulate_noise_grid() вычисляет уровень в каждом приёмнике регулярной сетки (шаг grid_step метров). Приёмники внутри препятствий пропускаются. Для каждой пары источника и приёмника функция энергетически суммирует
прямой путь, если линию между источником и приёмником не перекрывает ни одно препятствие;
отражения первого порядка от стен препятствий не дальше
reflection_max_distметров от источника (по умолчанию 50 м), найденные методом мнимых источников; каждое отражение теряет-10 lg(1 - a)дБ, гдеa— коэффициент поглощения стены (absorb_ratio_columnилиstandard_absorb_ratio, по умолчанию 0.05);дифракцию на вертикальных рёбрах (
diffraction=True): угол, который источник видит на краю препятствия, служит вторичным источником для приёмников, скрытых от источника, но видимых из угла. Звук также проходит вдоль затенённой стороны выпуклой оболочки препятствия до следующего угла и огибает его; этот путь доходит до приёмников сразу за зданием.
Дифрагированный путь имеет геометрическое расхождение и поглощение в воздухе прямого расстояния d и, кроме того, затухание на экране по ISO 9613-2 без учёта земли, 10 lg(3 + 40 C3 δ / λ). Здесь δ — разность хода, то есть насколько путь через углы длиннее d, а λ = c / f — длина волны на характерной частоте (c = 331.3 + 0.606 T м/с, T в °C). Для одного угла C3 = 1, что даёт формулу Маэкавы 10 lg(3 + 20 N) с числом Френеля N = 2 δ / λ; для двух углов на расстоянии e метров C3 = (1 + (5 λ / e)²) / (1/3 + (5 λ / e)²). Затухание равно 4,8 дБ на границе тени и не превышает 20 дБ для одного угла и 25 дБ для двух. Углы — выпуклые вершины объединённых контуров препятствий, упрощённых на 0,5 м (соприкасающиеся здания образуют один контур), и концы линий стен.
Каждый путь длиной r (м) теряет 20 lg r дБ на геометрическое расхождение и k r дБ на поглощение в воздухе, где k зависит от температуры и частоты; путь через растительность (trees) дополнительно теряет зависящую от частоты величину на каждый метр пересечённой листвы. Линейные источники (дороги, железные дороги) и контуры полигонов (промышленные площадки, шумные здания) разбиваются на точки с шагом source_spacing метров (по умолчанию 5 м); каждая точка получает source_noise_db - 10 lg(π / s), чтобы длинная линия следовала закону линейного источника L - 10 lg d - k d (на 3 дБ меньше при удвоении расстояния). Так как энергии складываются, два одинаковых источника дают +3 дБ.
Уровни ниже target_noise_db отбрасываются, остальные группируются в полосы по db_sim_step дБ. noise_level — верхняя граница полосы, как в objectnat.simulate_noise(). При output="receivers" функция возвращает точки приёмников с точными уровнями вместо полос; при output="both" — и то, и другое.
Время расчёта пропорционально числу приёмников, умноженному на число точечных источников и точек линий в пределах досягаемости. Для больших дорожных сетей используйте более крупный grid_step или source_spacing либо objectnat.calculate_simplified_noise_frame() для первой оценки.
- objectnat.simulate_noise_grid(source_points, obstacles, source_noise_db=None, geometric_mean_freq_hz=None, *, absorb_ratio_column=None, standard_absorb_ratio=0.05, trees=None, air_temperature=20, target_noise_db=40, db_sim_step=1, reflections=True, reflection_max_dist=50.0, diffraction=True, grid_step=2.0, source_spacing=None, source_position_buffer_r=0, output='zones', max_workers=None)[исходный код]¶
Моделирует шум от точечных, линейных и площадных источников на регулярной сетке приёмников.
Альтернатива
simulate_noise(), основанная на подходе с сеткой приёмников, который используют инженерные модели шума. Каждый приёмник собирает звуковую энергию от каждого источника по путям:прямой путь, если его не перекрывает препятствие;
отражения первого порядка от стен препятствий (метод мнимых источников), если
reflectionsравно True;дифракция вокруг одного или двух углов препятствия (вертикальных рёбер зданий) в его тень, если
diffractionравно True.
Каждый путь теряет
20 lg r(геометрическое расхождение,rв метрах), поглощение в воздухеk r(kпо температуре и частоте, как вsimulate_noise()), потерю при отражении-10 lg(1 - a)на каждое отражение (a— коэффициент поглощения стены) и, при прохождении через растительность, удельное ослабление листвой изsimulate_noise(), умноженное на пересечённую длину. Уровень дифрагированного пути равен уровню на прямом расстоянии минус затухание на экране по ISO 9613-2 без учёта земли,10 lg(3 + 40 C3 δ / λ):δ— насколько путь через углы длиннее,λ— длина волны,C3 = 1для одного угла (формула Маэкавы) и(1 + (5 λ / e)²) / (1/3 + (5 λ / e)²)для двух углов на расстоянииeметров. Затухание не превышает 20 дБ для одного угла и 25 дБ для двух. Пути и источники складываются энергетически, поэтому два одинаковых источника дают +3 дБ. Приёмники внутри препятствий пропускаются. Затем уровни группируются в полосы поdb_sim_stepдБ и возвращаются полигонами, как вsimulate_noise().Расчёт выполняется параллельно в расширении ObjectNat на Rust.
- Параметры:
source_points (
GeoDataFrame) – Источники шума. Точки — точечные источники. Линии (дороги, железные дороги) — линейные источники, разбитые на точки с шагомsource_spacingметров. Полигоны (промышленные площадки, шумные здания) излучают по контуру как линейные источники. Необязательные столбцыsource_noise_db(уровень в 1 м от точки или линии, дБ) иgeometric_mean_freq_hzзаменяют одноимённые аргументы для отдельных источников.obstacles (
GeoDataFrame|None) – Здания, стены и другие препятствия (полигоны или линии).Noneили пустой набор — свободное поле.source_noise_db (
float|None) – Уровень в 1 м для источников без столбцаsource_noise_db, дБ.geometric_mean_freq_hz (
float|None) – Характерная частота для источников без столбцаgeometric_mean_freq_hz, Гц.absorb_ratio_column (
str|None) – Столбецobstaclesс коэффициентом звукопоглощения каждого препятствия (0-1).standard_absorb_ratio (
float) – Коэффициент поглощения для препятствий без значения. По умолчанию 0.05 (бетон).trees (
GeoDataFrame|None) – Полигоны растительности; звук, проходящий через них, ослабевает.air_temperature (
float) – Температура воздуха, °C.target_noise_db (
float) – Наименьший учитываемый уровень, дБ. Источники действуют до расстояния, на котором их уровень падает до него.db_sim_step (
float) – Ширина выходных полос уровня, дБ.reflections (
bool) – Учитывать отражения первого порядка от стен препятствий.reflection_max_dist (
float) – Отражают источник только стены ближе этого расстояния к нему, метры (по умолчанию 50, как максимальное расстояние отражения в инженерных моделях). Большие значения медленнее.diffraction (
bool) – Огибание звуком углов препятствий: приёмник, скрытый от источника, но видимый из угла, который источник видит на краю препятствия, получает дифрагированный звук, а вдоль затенённой стороны выпуклой оболочки препятствия звук огибает и следующий угол. Углы — выпуклые вершины объединённых контуров, упрощённых на 0,5 м, и концы линий.grid_step (
float) – Шаг приёмников в метрах; меньший шаг подробнее и медленнее.source_spacing (
float|None) – Шаг точек вдоль линейных и площадных источников, метры (по умолчанию 5). Каждая точка получаетsource_noise_db - 10 lg(pi / s), чтобы длинная линия следовала закону линейного источникаsource_noise_db - 10 lg d - k d(3 дБ на удвоение расстояния). Ближе к линии, чем примерноsource_spacing, видны отдельные точки.source_position_buffer_r (
float) – Радиус в метрах, вырезаемый из препятствия или дерева, внутри которого находится источник, как вsimulate_noise().output (
Literal['zones','receivers','both']) –"zones"(по умолчанию) — полосы уровня,"receivers"— только точки приёмников с точными уровнями (полигоны полос не строятся),"both"— кортеж(bands, receivers).max_workers (
int|None) – Максимальное число потоков (None— все ядра).
- Тип результата:
- Результат:
GeoDataFrame со столбцами
noise_level(верхняя граница каждой полосыdb_sim_step, дБ, как вsimulate_noise()) иgeometry(по одному полигону на полосу) в системе координатsource_points. Приoutput="receivers"— приёмники, приoutput="both"— кортеж(bands, receivers). Приёмники содержат точныйnoise_levelкаждого приёмника, где уровень не нижеtarget_noise_db; ихattrsзаписывают сетку, поэтомуrasterize()превращаетnoise_levelвRaster.
Заметки
Не моделируются: влияние земли, дифракция через крыши (высоты препятствий не используются), пути вокруг трёх и более углов и отражения высших порядков. Места, куда звук попадает только вокруг трёх и более углов (внутренние дворы, второй ряд зданий), получают только отражённый звук.
Каждая полоса охватывает db_sim_step дБ; приёмники (output="receivers") содержат точный уровень, а objectnat.rasterize() превращает их в непрерывную карту (см. Растры).
Как читать результат. Модель энергетическая: она возвращает усреднённый по времени уровень звука, то есть величину, которую используют шумовые карты и нормативы, а не мгновенное звуковое давление. Поэтому фаза, волновые фронты и интерференция не вычисляются, и уровень плавно убывает с расстоянием. Прямой звук и отражения распространяются по прямым лучам, поэтому проходят в просветы между зданиями прямыми пучками; отражение первого порядка — это поле мнимого источника за стеной, ограниченное лучами, которые проходят через стену. Там, куда уже приходит прямой звук, отражение с коэффициентом поглощения 5 % добавляет не больше 3 дБ. Дифракция заполняет тени. На границе тени уровень падает на 4,8 дБ и убывает дальше по мере роста обхода; предел 20 дБ достигается при обходе 2,4 длины волны, то есть 0,4 м на 2 кГц и 1,7 м на 500 Гц. Поэтому на высоких частотах тени глубже, чем на низких. Сразу за зданием звук огибает два угла и приходит с уровнем до 25 дБ ниже уровня в свободном поле; места, куда звук попадает только вокруг трёх и более углов (внутренние дворы, второй ряд за зданием), получают только отражённый звук.
objectnat.simulate_noise_grid() для дороги (линейный источник, 80 дБ в 1 м, 1 кГц) и двух точечных источников (95 дБ на 2 кГц, 85 дБ на 500 Гц) среди зданий и растительности из примера, grid_step=2, приёмники растеризованы функцией objectnat.rasterize(). target_noise_db=30 показывает звук, который доходит до теней. Слева: непрерывные уровни по всем путям. В центре и справа: прибавка уровня от отражений (для сравнения reflections=False) и от дифракции (diffraction=False); ячейки, куда звук доходит только по этим путям, сравниваются с target_noise_db. Дифракция заполняет тени рядом с пучками и за зданиями возле точечных источников.¶
Моделирование волнового фронта¶
Метод¶
objectnat.simulate_noise() моделирует распространение от точечных источников слоями затухания по db_sim_step дБ. Слой — это территория в пределах расстояния, на котором уровень падает на один шаг, ограниченная полигоном видимости источника. Границы препятствий, до которых доходит звук, становятся вторичными источниками отражённого звука, до reflection_n отражений (по умолчанию 3), с уровнем, уменьшенным на коэффициент поглощения препятствия (absorb_ratio_column, standart_absorb_ratio); отражения не начинаются ближе dead_area_r метров к предыдущему источнику. Растительность (trees, растеризуется с tree_resolution) снижает уровень в секторе тени за полигонами деревьев на зависящую от частоты величину, которая растёт с толщиной пересечённой листвы. Моделирование останавливается на target_noise_db. Для источника внутри препятствия или полигона деревьев source_position_buffer_r вырезает вокруг источника отверстие такого радиуса; use_parallel распределяет работу по процессам.
- objectnat.simulate_noise(source_points, obstacles, source_noise_db=None, geometric_mean_freq_hz=None, **kwargs)[исходный код]¶
Моделирует распространение шума от набора точечных источников с учётом препятствий, деревьев и условий среды.
- Параметры:
source_points (
geopandas.GeoDataFrame) – GeoDataFrame с одной или несколькими точечными геометриями источников шума. Может содержать столбцы „source_noise_db“ и „geometric_mean_freq_hz“ для расчёта по каждой точке.obstacles (
geopandas.GeoDataFrame) – GeoDataFrame препятствий. Если в нём есть столбец с коэффициентами звукопоглощения, его имя нужно передать в аргументе absorb_ratio_column. Отсутствующие значения заполняются standart_absorb_ratio.source_noise_db (
float, optional) – Уровень шума по умолчанию (дБ) для точек без собственного значения. Децибелы — логарифмические единицы интенсивности звука. 20 дБ соответствуют едва слышному шёпоту, а 140 дБ сравнимы с шумом реактивных двигателей.geometric_mean_freq_hz (
float, optional) – Частота по умолчанию (Гц) для точек без собственного значения. Этот параметр влияет на распространение и рассеяние звука среди деревьев. Низкие частоты распространяются дальше высоких. Рекомендуются значения от 63 до 8000 Гц; значения вне этого диапазона приводятся к ближайшей границе при расчёте коэффициента поглощения.
- Именованные аргументы:
absorb_ratio_column (
str, optional) – Имя столбца в GeoDataFrame obstacles с коэффициентами звукопоглощения препятствий. По умолчанию None. Если не задано, все препятствия получают standart_absorb_ratio.standart_absorb_ratio (
float, optional) – Коэффициент звукопоглощения по умолчанию для препятствий без значения в absorb_ratio_column. По умолчанию 0.05 — типичное значение для бетонных стен.trees (
geopandas.GeoDataFrame, optional) – GeoDataFrame с деревьями или густой растительностью на пути звука. Деревья рассеивают и поглощают звук.tree_resolution (
int, optional) – Параметр разрешения для моделирования взаимодействия звука с деревьями. Рекомендуются значения от 2 до 16; большие значения дают более точный результат.air_temperature (
float, optional) – Температура воздуха в градусах Цельсия. Рекомендуемый диапазон — от 0 до 30 градусов, значения вне его обрезаются. Температура влияет на распространение звука в воздухе.target_noise_db (
float, optional) – Целевой уровень шума (дБ) для моделирования. По умолчанию 40 дБ. Меньшие значения могут быть неважны для дальнейшего анализа, так как близки к порогу слышимости.db_sim_step (
float, optional) – Шаг моделирования в децибелах. По умолчанию 1. Для более точного анализа его можно изменить. Если разность между source_noise_db и target_noise_db не делится на шаг, функция выдаёт ошибку.reflection_n (
int, optional) – Максимальное число отражений для каждой звуковой волны. Рекомендуются значения от 1 до 3. Большие значения увеличивают время моделирования.dead_area_r (
float, optional) – Отладочный параметр — радиус «мёртвой зоны» для отражений. Точки в этой зоне не порождают отражений. Это не даёт алгоритму застревать в углах и вдоль стен зданий.source_position_buffer_r (
float, optional) – Радиус в метрах, вырезаемый вокруг исходной точки источника из содержащего её препятствия или дерева. По умолчанию 0: геометрии источников не меняются.use_parallel (
bool, optional) – Использовать ли ProcessPool для распределения задач. По умолчанию True.
- Результат:
Уровни шума (
noise_level, дБ) с геометрией охватываемых ими территорий; результаты всех точечных источников объединены в один GeoDataFrame.- Тип результата:
gpd.GeoDataFrame
objectnat.simulate_noise() для двух точечных источников из примера objectnat.simulate_noise_grid() (95 дБ на 2 кГц, 85 дБ на 500 Гц) среди зданий и растительности примера, reflection_n=2, target_noise_db=40, db_sim_step=5.¶
Упрощённый шумовой каркас¶
Метод¶
objectnat.calculate_simplified_noise_frame() строит огибающую возможного воздействия без моделирования распространения. Линии и полигоны разбиваются на точки (linestring_point_radius, polygon_point_radius), полигон видимости каждой точки ограничивает территорию, куда звук доходит напрямую, а уровень убывает с расстоянием в зависимости от уровня источника, частоты и температуры. Каркас каждого источника — максимум по его точкам, а результат — максимум по источникам. Препятствия служат только масками прямой видимости: поглощение, отражения и растительность не моделируются.
- objectnat.calculate_simplified_noise_frame(noise_sources, obstacles, air_temperature, *, target_noise_db=40, db_sim_step=5, linestring_point_radius=15, polygon_point_radius=5, visibility_max_workers=None)[исходный код]¶
Рассчитывает упрощённый шумовой каркас по статичным геометриям источников, без полного моделирования распространения звуковых волн и отражений.
Функция даёт быструю оценку распространения шума от источников разной геометрии: точек (например, точек измерения транспортного шума), линий (дорог, железных дорог) и полигонов (промышленных зон, зданий). Вместо подробного моделирования волн и отражений она строит огибающую возможного шумового воздействия по полигонам видимости точек, расставленных на источниках, и затуханию с расстоянием, которое зависит от уровня источника, частоты и температуры.
- Параметры:
noise_sources (
geopandas.GeoDataFrame) –GeoDataFrame с геометриями источников шума (Point, LineString или Polygon). У каждого объекта должны быть два столбца:
“source_noise_db“: уровень звука в 1 м от источника, в децибелах (дБ).
“geometric_mean_freq_hz“: характерная частота звука (Гц) для моделирования затухания с расстоянием.
Значения „source_noise_db“ не должны превышать физический максимум 194 дБ. Отсутствующие значения или NaN в обязательных полях вызывают ошибку.
obstacles (
geopandas.GeoDataFrame) – GeoDataFrame физических препятствий (например, зданий, стен). По ним строятся маски видимости, которые определяют, куда может распространяться звук. Для скорости геометрия упрощается с допуском 1 единица.air_temperature (
float) – Температура окружающего воздуха в градусах Цельсия. Она влияет на модель затухания звука в атмосфере. Температуры заметно вне обычного диапазона 0–30 °C могут дать неточный результат.target_noise_db (
float, default40) – Минимальный моделируемый уровень звука (дБ). Значения ниже этого порога считаются несущественными и исключаются из результата. По умолчанию 40 дБ.db_sim_step (
float, default5) – Шаг моделирования (дБ), с которым уровни звука разбиваются на пространственные слои. По умолчанию 5. Меньшие значения дают более подробный результат, но увеличивают время расчёта.linestring_point_radius (
float, default=15) – Шаг (в метрах) при разбиении геометрий LineString на точечные источники. По умолчанию 15. Меньшее значение подробнее передаёт длинные линии.polygon_point_radius (
float, default=5) – Шаг точек (в метрах) при размещении источников внутри геометрий Polygon. По умолчанию 5. Точки ставятся по площади и по контуру полигона, чтобы представить всю излучающую поверхность.visibility_max_workers (
int | None, optional) – Максимальное число потоков для расчёта видимости. None — все ядра.
- Результат:
GeoDataFrame с территориями упрощённого распределения шума. Выходные геометрии — полигоны, каждому из которых соответствует максимальный уровень звука (дБ) на этой территории по перекрывающимся зонам источников. Данные объединяются по уровню шума и возвращаются в исходной системе координат входных источников.
- Тип результата:
gpd.GeoDataFrame
Заметки
Функция не моделирует отражения и дифракцию. Для быстрой оценки она использует видимость по прямой (линии прямой видимости) и послойное затухание с расстоянием.
Препятствия используются только как маски видимости, но не как отражатели или поглотители.
Разрешение и точность результата сильно зависят от типа геометрии и настроек размещения точек.
Результаты подходят для быстрого картирования шума или для первичных огибающих перед более подробным моделированием.
objectnat.calculate_simplified_noise_frame() для улицы (линейный источник, 80 дБ на расстоянии 1 м) и двух точечных источников того же примера, target_noise_db=40, db_sim_step=5. Без отражений и дифракции звук доходит только до мест в прямой видимости источника.¶
Ограничения¶
Ни одна модель не учитывает влияние земли и метеорологическую рефракцию.
objectnat.simulate_noise_grid()учитывает отражения первого порядка и дифракцию на одном или двух вертикальных рёбрах в плане. Высоты зданий в ней не используются, поэтому дифракция через крыши не моделируется, а места, куда звук попадает только вокруг трёх и более углов, получают только отражения, и их уровень может быть занижен.objectnat.simulate_noise()иobjectnat.calculate_simplified_noise_frame()дифракцию не учитывают.Каждый источник описан одним уровнем и одной характерной частотой; спектры не моделируются, и результаты не эквивалентны стандартизованным методам расчёта, таким как ISO 9613-2 или CNOSSOS-EU.
objectnat.simulate_noise()иobjectnat.calculate_simplified_noise_frame()объединяют источники по максимуму полосы;objectnat.simulate_noise_grid()суммирует энергии.
Описание волновой модели есть в вики проекта; справочник API на этой странице описывает текущее поведение.