Обновить
58

Пользователь

1
Рейтинг
51
Подписчики
Отправить сообщение

Это если у них довольно разная длина волны (хотя бы раза в 2), а вот если похожая то будет каша.

Когда у волн схожая частота (длина волны), то они начинают резонировать: гасить либо усиливать друг друга, в зависимости от разности фаз. В слуховом восприятии начинает становиться заметным эффект биений, чем-то напоминающий интерференцию [смотреть и слушать вкладку Resonance в программе].

Если же смоделировать две, три или более волн с одинаковой частотой и амплитудой, то с помощью разности фаз можно регулировать их суммарную амплитуду.

В общем случае любые две волны являются резонирующими, но дело в разрешающей способности приёмника/восприятия [уровню квантования, пикселизации]. Если имеется очень длинный временной кадр [много отсчётов, информации и вычислений], то после БПФ получится спектр с достаточно высоким разрешением, который позволит рассмотреть близлежащие гармоники, однако, при уменьшении длины кадра (но с сохранением прежней частоты дискретизации), рано или поздно на спектре соседние гармоники сольются и разделить их станет куда сложнее, если вообще возможно... Тут начнёт проявляться что-то наподобие принципа неопределённости Гейзенберга из области квановой механики для измерения времени и частоты.

Можно возразить, что, согласно теореме Котельникова-Найквиста-Шеннона, при соблюдении верной частоты дискретизации, иходный сигнал можно востановить с изначальной точностью даже в случае слившихся гармоник, передискретезировать с большей частотой [повысить разрешение] и далее распознать эти гармоники. Однако в наивной интерпретации теоремы выходит, что практически любой сигнал можно восстановить лишь по двум и даже одному отсчёту... Но для этого нам, как минимум, нужны числа с точностью устремящейся в бесконечность, то есть информационная ёмкость одного или двух чисел должна быть эквивалентна большему массиву чисел с меньшей информационной ёмкостью. То есть в абстрактном смысле проблема сводится к вопросам вычислимости, энтропии и информации. Это насколько сам понимаю, в чём-то могу ошибаться.

В практическом рассмотрении ограничения накладываются несовершенством измерительных приборов, погрешностями, округлениями при кодировании и компьютерных вычислениях, а на более фундаментальном физическом - планковскими масштабами.

~

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

Скорость и фронт распространения волн зависят от свойств проводящей среды (плотность, структурный состав, геометрия). На стыке двух сред волна преломляется, разделяется и продвигается уже с разной скоростью дальше, но при этом её частота остаётся прежней. Это вполне может обуславливать появление разности фаз и, как следствие, интерференционной картины (стоячих или бегущих волн), поэтому, предположительно, определённые участки улитки оказываются более или менее воспримчивыми к гармоникам с заданной частотой.

Англоязычный видеоролик на эту тему, возможно, будет интересен:
The more general uncertainty principle, regarding Fourier transforms

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

Нашлась публикация про исследование в области аккустических призм.

Не пробовали ли вы вычислять вторую координату с помощью фазового фильтра, поворачивая фазы на pi/2 (через БПФ или что-нибудь типа преобразования Гильберта)?

Именно такие подходы не исследовал, из описания мне не совсем ясны детали их реализации.

Спасибо за обратную связь! Разработка под Андроид очень специфичное занятие, поскольку нередко случается, что программа работает на одном устройстве, но падает на другом... Если дойдут краш-логи, то по возможности постараюсь ошибку пофиксить.

Десктоп-версия для Windows более надёжная и функциональная, поэтому в качестве альтернативы можно начать изучение с неё.

Оу, честно говоря, БПФ - это прям кроличья нора... На момент написания начальной статьи про точное определение частот аудиосигналов даже не подозревал о её масштабах и глубинах.

Алгоритм коррекции частоты по разности фаз у накладывающихся кадров действительно рабочий (реализация на C#), он применялся в Solfeggio ранних версий совместно с грубой дорисовкой пиков.

Но в последующем на основе длительных исследований и экспирементальных наблюдений был выработан алгоритм фазо-амплитудной интерполяции (ФАИ), о котором была опубликована статья «Загадки быстрого преобразования Фурье». На текущий момент статья во многом сохраняет свою актуальность, но сам алгоритм претерпел некоторые усовершенствования. Код текущей релизной версии доступен по ссылкам: GitLab, Bitbucket.

Ролик с псилоцибиновыми грибами на осциллографе опубликовали чуть выше, но ещё есть видео от канала Veritasium с грибами ядерными, по форме весьма напоминающими мухоморы.

Чтобы проникнуться темой и кое-что узнать об истории открытия алгоритма БПФ рекомендую к просмотру

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

На текущий момент в релизной версии проигрывание аудиофайлов отключено, поскольку функционал сырой, но в исходных кодах можно включить поддержку .wav [.pcm] в моноформате. Однако если просто поднести микрофон к источнику звука, то программа его сможет визуализировать.

Зато сейчас в десктопной версии приложения можно сохранять и загружать отдельные кадры, этот функционал доступен в меню главного окна [см. левый нижний угол, значки: ?, ?, ?].

Хороший вопрос, но, насколько сам понимаю, слуховая улитка представляет собой своеобразный аналоговый Фурье- или даже вейвлет-преобразователь.

Упрощённо, в ней расположен ряд костных пластинок и сопутствующих нервных рецепторов для каждого диапазона частот (словно клавиши пианино), физически они расположены в пространстве спирально, за счёт чего, в зависимости от сигнала с барабанной перепонки, с разной интенсивностью начинают вибрировать [резонировать] те либо иные области улитки (конкретные клавиши).

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

Более того, за счёт воспринимаемой разности фаз и интенсивности звуковых частот у многих живых существ в той или иной степени развита способность к стереоскопическому слышанию, а у некоторых видов эта способность по точности и остроте восприятия сопоставима со световым стереоскопическим зрением.

Что касается визуализации периодических сигналов, то при соблюдении критерия Котельникова (Найквиста — Шеннона) сигнал в частотной области визуализируется весьма точно.

Благодарю, красивые и очень наглядные видео!

Спасибо большое! Очень рад, что статья заинтересовала!

Классный способ визуализации! Но обычно для рисования сложной графики на осциллоскопах используется другой алгоритм: за основу берётся стереосигнал, где один канал отвечает за смещение луча по горизонтальной оси X, второй по вертикальной Y, - в результате получается что-то наподобие векторного телевизора, а звук с каналов смешивается.

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

Хотя нужно отметить, что по запросу oscilloscope drawing встречаются видеозаписи с характерными рисунками-мандалами, возможно, при их рисовании применяется схожая математика.

P.S. Тоже очень вдохновляляет тема аудиорисования на осциллоскопе, с неё в своё время у меня и начались более углубленные поиски-исследования в направлении визуализации сигналов.

Мне трудно говорить за других, но могу немного сориентировать по теме и инересным для меня ресурсам.

У вышеупомянутого проекта 3Blue1Brown есть веб-сайт
https://www.3blue1brown.com/about

Также в открытом доступе выложен движок для создания математических видео Manim на языке Python и документация к нему
https://github.com/3b1b/manim

При желании можно изучить этот фреймворк и создать визуализацию самостоятельно.

Из знакомых мне ресурсов выделю:

МАТЕМАТИКА
3Blue1Brown (англ.)
Number_Cruncher (англ.)
Numberphile (англ., но есть русские переводы)
Tibees (англ.)
LinesThatConnect (англ.)
HexagonVideos (англ.)
Eric Rowland (англ.)
Маткульт-привет! :: Алексей Савватеев и Ко (рус.)
VitalMath (рус.)

ФИЗИКА-МАТЕМАТИКА
EugeneKhutoryansky (англ.)

ФИЗИКА
GetAClass - Physics in experiments (рус.)
Гервидс Валериан Иванович (рус.)

ОБЩЕНАУЧНОЕ
veritasium (англ.)
VertDiderScience (русскоязычные переводы)

Пользуясь случаем, не могу не поделиться и этим видео

Кому интересно, на канале 3Blue1Brown есть великолепное видео (~25 мин, англ.) с введением в теорию групп и замечательной геометрической визуализацией арифметических операций над действительными и комплексными числами

Также доступно видео про пифагоровы тройки с визуализацией возведения в квадрат

И для самых любознательных визуализация дзета-функции Римана

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

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

Вспомнил ещё, что если мы берёмся различать знак/направление у нуля, то с точки зрения программирования при сложении имеет смысл определять знак следующим образом
+|x| add -|x| = +|0|
-|x| add +|x| = -|0|

Это связано с обходом массивов в циклах, например, мы можем определить выбор элементов по смещению следующим образом:
ms[+0] возвращает начальный элемент
ms[+1] возвращает второй элемент
...
ms[-1] возвращает предпоследний элемент
ms[-0] возвращает последний элемент

Так вот, если мы берёмся обходить массив в сторону нуля при таких условиях
for (offset = +ms.Length; offset >= +0; offset--)
for (offset = -ms.Length; offset <= -0; offset++)
то чтобы не происходило скачков на завершающих элементах, сложение должно работать, как предложено чуть выше.

Кстати, в компьютерах вещёственный ноль имеет знак и его можно различать! Но сложение и вычитание определено иначе, всегда в сторону положительного нуля:
+|x| add -|x| = +|0|
-|x| add +|x| = +|0|
+|x| sub -|x| = +|0|
-|x| sub +|x| = +|0|

Так что вопрос имеет место быть!

Умножение на +1 - "копирует" стрелочку без изменений, на -1 - переворачивает стрелочку (как бы на 180 градусов), сохраняя её длину. Другие числа при умножении масштабируют длину стрелочки, например, натуральные [модуль] растягивают её в N раз (как если бы мы взяли N одинаковых стрелочек и циклично склеили их вместе, получив одну длинную), а добавление знака указывает, в каком направлении смотрят эти N стрелочек и итоговая.

* Дальше материал для исследований со звёздочкой

Интересно, что в такой системе можно определить полярный ноль, умножение на +0 сжимает в точку, сохраняя направление, умножение на -0 тоже сжимает в точку, но отражая направление.

+|x| mul +|0| = +|0|
-|x| mul +|0| = -|0|
+|x| mul -|0| = -|0|
-|x| mul -|0| = +|0|

вот со сложением поинтереснее, не совсем ясно, какой вариант предпочтительней
+|x| add -|x| = +|0|
-|x| add +|x| = -|0|
или
+|x| add -|x| = -|0|
-|x| add +|x| = +|0|
может, знак/направление "теряется"
+|x| add -|x| = |0|
а, может, стрелочка вовсе получается хоть и точечная, но двунаправленная, что указывает на наличие чисел с неопределённым знаком
+|x| add -|x| = ~|0|
то есть можно придумать такую систему:

  • отрезок |x| - беззнаковое число

  • стрелочка вправо +|x| - положительное

  • стрелочка влево -|x| - отрицательное

  • двунаправленная ~|x| - неопределённо-знаковое число

Дальше можно поразвлекаться в изобретении арифметики для таких чисел
(~;

Для школьного объяснения каждому значению на числовой прямой сопоставляется вектор (стрелочка) из начала координат, при этом естественным образом получается, что знак числа соответсвует направлению этой стрелочки.

Для более продвинутого объяснения каждое число задаёт характеристики геометрического преобразования точек прямой на плоскости. Например, сложение с +1 или -1 соответствует преобразованию сдвига, которое перемещает каждую точку на место соседней с целочисленным значением вправо или влево соответственно. При умножении на +1 или -1 каждая точка прямой переходит в саму себя либо в зеркально-сопряжённую относительно начала координат.

Для меня в геометрической интерпретации законы арифметики визуально наглядные и как-то интуитивно ясно, почему умножение/деление минус на минус даёт плюс.

При этом визуально легко представить почему сложение двух отрицательных чисел всегда даёт отрицательное (ведь минусы могли бы тоже "сгорать" в плюс, как при умножении), но что ещё интереснее, почему сложение/вычитание отрицательного и положительного иногда может давать как положительное, так и отрицательное (в зависимости от меры числа/длины вектора)!

Школьными словами, когда две стрелочки сталкиваются, то более длинная стрелочка побеждает более короткую, но при этом сама становится короче (как в тетрисе сгорает её часть), когда же стрелочки сонаправлены, то они сливаются в одну ещё более длинную, при этом сохраняя направление.

Предпочитаю пользоваться регулярными выражениями с именованными группами.

Преимущества:

  • легко распарсить документ/строку с невалидной структурой

  • не требуется внешних библиотек-зависимостей

  • хорошая производительность и низкое потребление памяти во множестве распространённых сценариев

  • лаконичность

Недостатки:

  • чуть более высокий порог вхождения

На мой взгляд, относительно наблюдателя зеркало меняет зад и перед, зато другие направления наоборот сохраняет (-;

Информация

В рейтинге
2 027-й
Зарегистрирован
Активность