В военное время значение синуса может достигать четырех
(С) Willebrord Snel van Royen, Cyclometricus, 1621
Приветствую вас, глубокоуважаемые!
Представьте, каким был бы наш мир, если бы условия распространения звука в нем были бы несколько иными. Например, иногда ваш крик был бы не слышен на расстоянии десяти метров, но становился бы вполне различим на сотне-другой и, скажем, на паре километров? А иногда, негромкий разговор или даже шепот разносился бы на километры от вас. Уверен, что пословица слово - не воробей.. - заиграла бы совершенно новыми красками!
А еще, все эти эффекты сильно зависели бы от времени года и суток, погоды и даже наклона вашей головы. Как бы нам жилось в таком мире?
К счастью, нам даже не придется напрягать воображение, потому что такой мир существует рядом с нами и сегодня я немного расскажу о нем.
Для тех, кто услышал мой шепот в современном потоке информации - добро пожаловать под кат, у нас сегодня не только ликбез и культпросвет, но модель с красивыми картинками, исходным кодом на двух языках и онлайн-симулятором, а также видео, где за 15 минут отображаются все научные морские экспедиции с 1961 по 2010 год.
Псевдопритча
Для всех нас должна быть поучительной жизнь и судьба мореплавателя Кристобаля Колона, который четырежды топтал земли нового света, пребывая в упрямой уверенности, что ступает то по благословенной индийской земле, то по беднейшей части восточного Китая. Так до самой смерти и не узнавший, что он стал первым из европейцев, кто бороздил просторы карибского и саргассова морей. Кто знает, может быть его бы и не расстроило, что на тихоокеанскую плиту наползает Северо-Американская, а не Северо-Колумбийская, но вот то, что доливкой кипятка в эспрессо получают Американо, а не Колумбиано - точно бы опечалило.
Поэтому, не то, чтобы необходимо, но исключительно важно:
-
понимать, где ты находишься
-
иметь связь, как минимум, чтобы спросить у того, кто понимает.
Конечно, Америго Веспуччи, или, по другим данным, Ричард Америке обошлись судя по всему и без этого, но это лишь делает им честь, которая на нас автоматически не экстраполируется.
Океан прекрасен, опасен и неясен.
И именно поэтому, так живучи дежурные фразы про то, что большая часть океана до сих пор не исследована, и то, что поверхность марса картирована лучше, чем поверхность земли.
Но почему так происходит? Помимо того, что под водой, как известно, на нас оказывается огромное давление и благодаря эволюции мы утратили жабры, а вместе с ними и возможность дышать растворенным кислородом, под водой практически не распространяются радиоволны, а еще там в основном темно, холодно и страшно.
Все задачи, которые на земле и в воздухе решаются при помощи радиоволн: GPS, радар, спутниковая связь и мобильная связь перекладываются на узкие, рахитичные плечики гидроакустики.
Кратко напомню, что глубина Бездны Челленжера (самой глубокой точки земных океанов) определена с точностью +/- 10 метров - и на сегодняшний день это все, что может современная наука.
А все потому, что скорость звука в океане не остается неизменной: она очень сильно зависит от температуры, солености и глубины. Это приводит к искривлению траектории распространения звуковых волн в вертикальной плоскости, говоря научным языком - к рефракции акустического поля. Сложная стратифицированность присуща не только океанической среде, но вполне наблюдается и в более мелких водоемах - вспомните хотя бы теплый, прогретый слой воды в речке летом.
Кроме этого, ни поверхность ни дно никогда не являются идеально ровными и гладкими границами раздела, все это тоже вносит свой вклад в искажение траектории распространения звуковых колебаний, но сегодня мы ограничимся рассмотрением влияния профиля скорости звука.
Это не наш профиль
В прошлой статье мы уже познакомились с понятием профиля скорости звука: ученые непосредственно измеряют скорость звука по всей глубине, и затем интегрируют (суммируют) времена прохождения звука через слои и таким образом более точно определяют глубину.
Пару слов про источники данных. Наборы измерений CTD (температура/соленость) я брал у NOAA.
Я уже как-то рассказывал про эту кладезь и несметные сокровища в статье "Кто, как и на чем исследовал мировой океан". И было собирался написать вторую статью про эти данные, но утратил интерес. Поэтому предлагаю просто посмотреть результат работы - видео, которое в за пятнадцать минут отображает на карте 49 лет морских экспедиций с 1961 по 2010.
Примерно 20 дней в секунду. Цвет точки - температура поверхности, текущие измерения выделяются яркостью.
Профили могут быть самые разнообразные, и для иллюстрации этого я приведу пару примеров.
Вниз по вертикали направлена ось глубин, желтым отображается температурный профиль, а бирюзовым - профиль солености. Зеленый график - вычисленные по глубине, температуре и солености значения скорости звука.
А что же будет, если нам нужна не простоглубина, а, скажем, горизонтальная дальность? А вот здесь, как сказал поэт, к нам и повернется, черное лицо досуга.
Лучано Поворотти (итал. Luciano Pоvоrotti) - буквально: Луч рефрагирует
Я уже упомянул о изгибании траектории звуковых волн, но давайте сначала порассуждаем на стихийно-бытовом уровне и вспомним школьные уроки физики:
Волны, будь то свет или звук, падая под неким углом на границу раздела сред с разной плотностью преломляются.
Этот феномен описывается законом Снеллиуса, или Снелля. Он гласит, что:
Отношение синусов угла под которым волна падает на границу раздел сред и угла, под которым она покидает границу равно отношению скоростей распространения волны в этих средах.
Пока я не забыл, для нашего рассказа удобно ввести понятие луча - перпендикуляра к касательной, проведенной в какой-либо точке к фронту волны. В курсе школьной физике мы как раз и рисовали лучи. Давайте я нарисую парочку, для демонтсрации закона Снелля.
Если кто-то не помнит, как он выводится, то может заглянуть под спойлер и освяжить память.
Вспомнить все!Осознать закон Снелля очень просто. У нас есть два параллельных луча, которые падают на границу раздела под углом . Очевидно, что время хода второго луча на отрезке АB должно совпадать времени хода первого луча на отрезке АB - в противном случае пришлось бы принять, что они перестали быть параллельными.
Для обоих лучей это время равно отношению длины пройденного пути к скорости распространения волны:
Если взглянуть на два прямоугольных треугольника AAB и ABB, то окажется, что у них общая сторона AB, которую можно выразить двумя способами:
Исключив из выражения отрезки AB и AB получаем закон Снелля, Снеллиуса или закон синусов:
Это очень глубокая штука. Я предлагаю тщательно ее обдумать, ведь фактически, волна решает оптимизационную задачу: она старается двигаться по пути наименьшего (экстремального) времени распространения. (Принцип Ферма).
Запомните это, дальше выяснится, что это приводит к неожиданным результатам.
Если вас пугают следовые количества математики, то можно смело пропустить спойлер ниже и сразу переходить к картинкам и обсуждению. Здесь же я кратко изложу, как и почему такие картинки получаются.
Лучи не боги изгибаютДетали реализации
Недавний случай из жизни
Где-то осенью 2020 года ко мне в линкедин постучался американский молодой разраб, с просьбой помочь ему с трассировкой лучей в подводе. В тот момент я не сильно интересовался темой (почему - станет понятно в конце статьи) и знал только, что качественную трассировку можно сделать винрарным приложением BELLHOP. Я вежливо отнекивался, ведь мне действительно нечем было ему помочь! Я упомянул невзначай про пресловутый BELLHOP, на что получил обескураживающий ответ: у меня не получилось запустить это приложение.
А ведь да, если просто запустить BELLHOP, то просто моргнет черное окно консоли. BELLHOP - утилита, работающая из командной строки, с кучей параметров, берущая на вход один файл и выдающая на выходе другой. По которому можно потом строить красивые картинки в Matlab.
Терпение, мы уже практически полностью вооружены всей необходимой математикой, чтобы это начать.
Нам понадобится только вспомнить совсем простое правило, что:
Угол падения равен углу отражения
И договориться о том, что мы считаем дно и поверхность воды совершенно плоским, но каждый раз, когда звук отражается ото дна или поверхности, энергия, им переносимая уменьшается определенным образом, скажем умножается на какой-нибудь коэффициент от 0 до 1.
Итак, о входных и выходных параметрах.
В качестве входных у нас будут:
-
Профиль скорости звука, как набор значений скорости звука с привязкой к глубине
-
Число лучей
-
Положение источника на оси Z (т.е. глубина)
-
Диаграмма направленности - угол, в пределах которого лучи выходят из источника
-
Интервал интегрирования по глубине
-
Максимальные значения по горизонтальной координате и длине луча - по достижении одного из этих параметров симуляция для данного луча останавливается
-
Коэффициенты отражения для дна и поверхности
С выходом все предельно понятно: мы хотим иметь траектории движения лучей. То есть последовательные наборы точек, где сопоставляются горизонтальная и вертикальные координаты, к которым можно добавить параметр, определяющий энергию луча в данной точек Напомню, в нашей упрощенной модели луч теряет энергию только при отражениях ото дна и от поверхности.
Перед тем, как выполнить симуляцию нужно подготовить профиль скорости звука к удобному виду: доступные по базам NOAA профили собирались в разные годы и зачастую интервал по глубине может отличаться и для двух соседних измерений. Поэтому линейно интерполируем профиль через 0.1 м.
В проекте на C# это выполняется в методе BuildVSSP() класса Simulator.
После этого создаем список экземпляров класса Ray, каждому из которых передаем угол из заданного диапазона:
double dTheta_deg = thetaRange_deg / numRays;double theta_deg = -thetaRange_deg / 2;for (int i = 0; i < numRays; i++){ rays.Add(new Ray(Z0_m, profileZMax_m, theta_deg, GetSoundSpeed)); theta_deg += dTheta_deg; }
Последним параметров в конструктор класса Ray передается функция, возвращающая скорость звука на заданной глубине. Она ищет ближайшее значение в интерполированном профиле и кэширует все возвращаемые значения в словаре для ускорения работы всей симуляции в целом, т.к. как минимум до первого отражения все лучи проходят по одним и тем же слоям.
Сама же симуляция выполняется таким образом:
bool finished = false;while (!finished){ finished = true; foreach (var ray in rays) { if ((ray.XMax_m < maxX_m) && (ray.Path_m < maxPath_m)) { ray.Step(dZ); finished = false; } }}
Сама же логика поведения луча заключена в методе Step() класса Ray, она-то и делает следующий шаг - решает каково будет следующее положение головы луча.
double z = rayPoints[rayPoints.Count - 1].Z_m;double x = rayPoints[rayPoints.Count - 1].X_m;double e = rayPoints[rayPoints.Count - 1].E;double theta_sign = Theta_rad > 0 ? 1 : -1;z += (dZ * theta_sign);if (z > ZMax_m){ if (z >= ZMax_m) { Theta_rad = -Theta_rad; theta_sign = -theta_sign; z = ZMax_m * 2 - z; e *= EtaBottom; // bottom reflection }}else{ if (z <= 0) { Theta_rad = -Theta_rad; theta_sign = -theta_sign; z = -z; e *= EtaSurface; // surface reflection }} double rsn = dZ / Math.Abs(Math.Sin(Theta_rad)); double drn = Math.Sqrt(rsn * rsn - dZ * dZ);Path_m += Math.Abs(rsn);x += drn;c = getSoundSpeed(z); double cosTheta = Math.Cos(Theta_rad);double recipSinTheta = 1.0 / Math.Sin(Theta_rad);double cncp = cosTheta * c / cPrev;if ((Math.Abs(cncp) <= 1) && (!double.IsInfinity(recipSinTheta))){ prevTheta_deg_valid = Theta_rad; Theta_rad = theta_sign * Math.Acos(cncp);}else{ Theta_rad = -prevTheta_deg_valid;} cPrev = c;RayPoint newPoint = new RayPoint(x, z, e);rayPoints.Add(newPoint);return newPoint;
Сама логика достаточно проста. Позволю себе лишь упомянуть, что для удобства мы здесь переходим от угла падения (угол, который луч образует с вертикалью) к углу скольжения (угол, который луч образует с горизонталью) - мне просто удобнее так мыслить, коль скоро процесс у нас развивается слева направо. Закон синусов у нас в связи с этим заменяется на закон косинусов - синус угла падения это есть косинус угла скольжения.
В остальном там нет никаких высоких материй: берется самая последняя точка и последнее значение угла скольжения, в зависимости от его знака, вертикальная координата приращивается или вверх или вниз. Проверяется условие пересечения поверхности или дна.
Один скользкий момент связан с тем случаем, когда угол скольжения становится близок к вертикали или горизонтали. Лучевая теория решительно не может нам здесь адекватно помочь: согласно ей тут происходит фокусировка и уровень сигнала стремится к бесконечности. В реальности, конечно, такого произойти не может.
Чтобы избежать деления на ноль или попыток взять арккосинус от значения, большего по модулю чем единица, мы, во-первых, всегда сохраняем предыдущее адекватное значение угла, а во-вторых, когда дело начинает пахнуть керосином, берем это предыдущее значение, но с противоположным знаком. Это приводит к тому, что угол, стремящийся к горизонтали, как бы отразится от нее и начнет изменяться в противоположную сторону. Так же дело обстоит и при стремлении угла к вертикали.
Ну что ж, достаточно о реализации. Скучная часть окончена, перейдем к картинкам.
Все, что угодно за ваши лучезарные улыбки
Взяв на себя смелость я быстренько накидал простое приложение на С#, который мне ближе всего при разработке чего-нибудь для десктопа. Проект, как обычно, положил на наш гихаб.
И собрался было уже писать статью, как вспомнил, что на одну из таких статей с исходниками и скомпиленным релизом кто-то написал в комментариях: Открыл ссылку - а там win exe :(
Мне очень хотелось, чтобы поиграться с моделью для читателей было бы совсем просто, настолько, насколько я вообще могу себе представить. Вооружившись блокнотом я погрузился на пару дней в чуждый для меня мир JavaScript. Этим я как бы покупаю у вас индульгенцию на неряшливый код :)
Результатом стала онлайн версия трассировщика лучей.
Так давайте же уже запустим это!
Устанавливаю в поле Z значение 0.1 (глубина первого профиля всего 38 метров и разрешение по умолчанию в 1 метр нам будет недостаточно) и загружаем предустановленный профиль GR-553 при помощи одноименной кнопки.
В заголовке профиля указано где, когда и кем он был получен:
NODC Cruise ID ,,GR-553 ,,,Latitude ,, 39.682,decimal degrees,,Longitude ,, 19.8750,decimal degrees,,Year ,, 1991,,,Month ,, 9,,,Day ,, 5,,,Time ,, 13.17,decimal hours (UT),,METADATA,Country ,, GR,NODC code,GREECEPlatform ,, 9628.,OCL code,AEGAEO (R/V;call sign SXYY;built 12.1985;ex.AEGAIO 10.1994;IMO8412429),Institute ,, 1445.,NODC code,HELLENIC CENTRE FOR MARINE RESEARCH (HCMR); former NATIONAL CMR (06.2003),Bottom depth ,, 38.,meters,,
Профиль был получен славными эллинами, 5 сенября 1991 года на вот этом исследовательском судне вот здесь.
Оно кстати, до сих пор бороздит просторы.
Нажимаем кнопку RUN SIMULATION и через некоторое время скрипт генерирует такую красоту:
Сентябрь, греческий Корфу, жаркий (наверное) полдень - теплая вода у поверхности и прохладная у дна. Я не был в греции, но могу сказать, что у нас на р. Пичуга под Волгоградом в самое июльское пекло на 15-20 метрах температура обычно 13-14С.
Слева мы видим сам профиль, значения скорости звука (зеленый график) почти 1 в 1 повторяют график температуры. Соленость не влияет совсем, т.к. меняется лишь незначительно от 38.3 до 38.5 PSU. Скорость звука же уменьшается от 1537 м/с на поверхности, достигая минимума в 1528 м/с у дна.
Все это приводит к тому, что звук, от расположенного на глубине Z0 = 2 метра источника, придет к поверхности не далее чем в 400 метрах от положения этого самого источника. Это будут т.н. прямые лучи. Все остальное - отражения от дна и многократные поверхность-дно-поверхность.
Мы видим, что лучи загибаются вниз. А что там такого, что им туда так хочется попасть? Вот здесь мы подходим к самому основному, фактически, это самый минимум, который я хочу, чтобы вы запомнили. Из этого выводится все остальное.
Траектории лучей загибаются в сторону уменьшения скорости звука.
Такие условия, когда минимум скорости звука лежит у дна называются отрицательной рефракцией. Это одни из самых неудобных условий для гидроакустической связи.
А помните, я обращал ваше внимание на то, что суть закона Снелля в том, что при преодолении границы раздела сред, волна идет путем экстремального (минимального) времени распространения? Ирония состоит в том, что волна, локально сокращая время распространения всегда стремится в область с меньшей скоростью звука, что в глобальном смысле наоборот увеличивает время распространения.
Чтобы закрепить, откроем следующий профиль NA-35, но немного изменим параметры симуляции: максимум по оси X установим равным 2000 метров. Что же мы видим?
Ого, глубина уже лодочная! А температура падает от 16С у поверхности до 6С у дна. И снова отрицательная рефракция, и снова звук стремится ко дну.
21 июня 1996 года. В России вовсю свирепствуют девяностые, я закончил 6 класс и наверное отдыхаю на даче с братьями, а судно под названием Dr. Fridtjof Nansen берет CTD пробы у берегов Намибии.
Необычайно прохладная для этих мест вода обязана холодному течению Бенгела.
Почему это важно? Мы, например, производим гидроакустические модемы, у которых среди характеристик указана т.н. энергетическая дальность - дальность, на которой два таких модема могут передать данные между собой. Для самых маленьких наших модемов она составляет 1000 метров. Длины лучей на картинке выше как раз и ограничены одним километром.
И сложно не заметить, что максимум, что можно получить опустив модемы чуть ниже поверхности воды - метров 400. А учитывая волнение и вовсе не гладкую поверхность воды - десятки метров. А вот если опустить приемник хотя бы метров на 10-20, можно уверенно получить фактическую дальность в районе километра.
Ладно, надоела уже эта отрицательная рефракция. Поехали дальше.
Профиль US-32437. Я поставил предел по оси Х и максимальную длину луча равными 2000 метров. Остальные условия те же.
30 января 2009 года. Исследовательское судно NOAA Delaware II на своем 41 году жизни берет пробы у восточной оконечности Лонг-Айленда. Невероятно, но факт: marinetraffic сообщает, что Delaware II до сих пор в строю в свои 53 года. Правда называется теперь Med Surveyor и ходит под флагом Панамы.
Ситуация с точностью до наоборот: минимум скорости звука на поверхности. В этом нет ничего удивительного: 30 января, северная атлантика. В нью-йорке, говорят, иногда идет снег. Когда упоминается Нью-Йорк, в моей голове сразу возникает Let it snow, let it snow, let it snow голосом Фрэнка Синатры.
Так вот, сверху летит сноу и возможно даже небольшой минус, а у дна вода не остыла, плюс это все-таки атлантика. Все это приводит к тому, что звук в таких условиях загибается наоборот - к поверхности.
Но иногда, это даже хуже: при обсуждении предыдущего профиля я привел совсем уж невероятный пример. И правда: зачем кому-то связываться по гидроакустике на километре в двух метрах ото дна? Вот например, связаться с каким-нибудь роботом или осуществлять его трекинг какой-нибудь навигационной системой - это реалистичный сценарий.
И что же мы видим на картинке? Если наш робот находится глубже 30 метров и отошел от нас метров на 400 - связь может стать очень неустойчивой и даже полностью пропасть. На дальности более 1000 метров и глубине более 20 ничего, кроме возможных отражений от поверхности мы не поймаем. Кстати, большой привет тем, кто работает с УКБ и использует вертикальный угол прихода сигнала для определения глубины объекта.
Но скорее всего не поймаем даже эти отражения: январь, атлантика. Наверняка ветрено и большие волны, они явно больше длины волны нашего сигнала - вот и на отражения от поверхности можно не рассчитывать.
Тем временем, мы подходим к следующему профилю из онлайн-трассировщика. Я уменьшил угол диаграммы направленности до 60 и установил глубину источника в 60 метров. Вот что получается:
Этот профиль особенно примечателен. Мы видим, что график скорости звука (и температуры) имеет экстремумы. То есть главный минимум находится ни у дна ни у поверхности. К чему это приводит?
Звук, как мы уже выяснили, загибается в сторону уменьшения скорости распространения. И, будучи излученным под небольшими углами скольжения в области минимума скорости звука оказывается заперт: он обречен постоянно пересекать горизонт минимума и постоянно возвращаться к нему. Такую область называют каналом, а условия распространения - канальными.
Впервые описали и объяснили условия канального распространения звука в океане в 1947 году советские ученые во главе с академиком Бреховских и доктором технических наук Розенбергом.
Иногда упоминают, что на звукоподводный канал был открыт и описан немного раньше, в 1944 году Американскими учеными, правда, все было описано в закрытых работах.
Но вернемся к нашему профилю.
19 ноября 1996, легкий ледокол George R. Pearkes 1986 года постройки (все еще в строю) брал пробы в дельте реки Сент-Лоуренс, где она впадает в одноименный залив.
Давайте попробуем поугадывать, откуда взялся такой интересный профиль с двумя впадинами. Я бы сказал, что теплый летний слой не успел еще исчезнуть совсем (ноябрь все-таки), а вода у поверхности уже начала значительно охлаждаться. А еще, если обратить внимание на профиль солености - она значительно ниже у поверхности, что по всей видимости, связано с впадением пресной речной воды в океанические воды.
А теперь посмотрим, что происходит с лучами в канале. Для этого я увеличу предел по оси Х и максимальную длину луча до, скажем, 20 километров.
Вот что мы получим:
Лучи, вышедшие из источника под небольшими углами к горизонту остаются в пределах канала, не касаясь ни дна ни поверхности: звукоподводный канал на мелководье!
Звук распространяется совсем неглубоко и в верхней точки выходит на глубины порядка 20-25 метров. Так он может проходить десятки километров. Напомню: по оси Z всего около 170 метров, а по оси Х - 20 000. То есть фактическое соотношение сторон у графика более 1:100, это примерно как столешница, или лужа на асфальте.
Мы переходим к заключительному профилю, самому глубокому из рассмотренных нами: SU-7464.
22 апреля 1991 года. Судно "Прилив" (на marinetraffic я его не нашел), еще под советским флагом, управляющая организация - Тихоокеанский Океанологический Институт, г. Владивосток. Место взятия проб - камчатский залив.
Этот профиль и выполненная по нему симуляция иллюстрируют еще один занимательный феномен: так называемый, приповерхностный звуковой канал. Такое бывает, когда самые холодные слои воды находятся под поверхностью, что приводит к формированию приповерхностного слоя с минимальной скоростью звука между немного прогретым поверхностным и более теплыми глубокими слоями. Здесь мы также можем наблюдать пресловутый слой скачка - резкого изменения скорости звука, от которого как от зеркала отражаются лучи, идущие под пологими и средними углами к горизонту.
Луч - линия имеющая начало, но не имеющая конца
Наш луч, вопреки определению из школьного курса геометрии, здесь окончательно теряет энергию и вежливо намекает на то, что пора бы подвести итоги.
Что же у нас в сухом остатке?
-
Звук распространяется в водоемах не по прямым линиям, а изгибается в виду наличия слоев воды разной плотности, а соответственно - с разной скоростью звука
-
Звук всегда поворачивает в сторону минимума скорости звука, от чего при определенных условиях в водоемах могут образовываться каналы
-
Примерный (примерный!) характер траекторий звуковых волн можно получить используя очень простые закономерности
-
Диапазон условий необычайно широк, а конкретные условия в конкретном месте склонны иногда к быстрым изменениям
Добавлю, что мало знать профиль скорости звука, нужно знать условия на поверхности, профиль и материал дна. Еще хорошо бы понимать где на пути вашего сигнала проплывает косяк макрели, или какие-то другие объемные неоднородности, на которых звук рассеивается.
Профиль же сам по себе не дает никаких гарантий: он взят вот в этой конкретной точке, а реальное распределение параметров в океане меняется непрерывно в пространстве и времени. Если вы не знаете какую-то часть исходных данных, то трассировка - это не путь, а только направление и поэтому не очень применима на практике.
Закончить свое повествование хочу такими аналогиями:
-
Гидроакустическая связь, особенно на дальние расстояния, это всегда немножко попытка скинуть ключи с балкона 16 этажа человеку с завязанными глазами.
-
А гидроакустическая навигация - попытка измерять что-то постоянно извивающейся или как минимум провисшей рулеткой =)
P.S.
Традиционно благодарю за внимание, буду признателен за конструктивную критику и указание на ошибки.
Обратная связь позволяет не думать о своем труде, как о напрасном.