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

Исследования в этой области были вдохновлены математическими видео от канала «3Blue1Brown»:

Оказывается, с помощью преобразования Фурье можно кодировать векторные визуальные изображения высокой сложности, раскладывая их на гармонические составляющие на базе комплексных чисел-векторов, что наглядно продемонстрировано в вышеупомянутых видео, а сам алгоритм кодирования более подробно рассмотрен в роликах каналов «Mathologer» и «The Coding Train»:

Рисунок 1: изображения-портреты Жозефа Фурье, выполненные одним росчерком пера, который закодирован в различной детализации с помощью 10, 50 и 250 комплексных чисел-гармоник соответственно
Рисунок 1: изображения-портреты Жозефа Фурье, выполненные одним росчерком пера, который закодирован в различной детализации с помощью 10, 50 и 250 комплексных чисел-гармоник соответственно
Рисунок 2: скриншот из короткого видео процесса рисования
Рисунок 2: скриншот из короткого видео процесса рисования

Больше примеров с другими изображениями можно найти по запросу «epicycle drawing Fourier transform».


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

  • Как будет выглядеть звучание гитарной струны, других музыкальных инструментов, голоса, прочих звуков?

И наоборот

  • Как же будут звучать различные визуальные формы характерные для геометрии в комплексных числах?


Чтобы детальнее раскрыть и исследовать эти таинственные вопросы, было решено на базе приложения для музыкального спектрального анализа SOLFEGGIO реализовать соответствующие модули визуализации...

На текущий момент доступны две ветви программы: десктопная для Windows [Microsoft Store, One Drive] и мобильная для Android [Google Play]. Функционально версии во многом схожи, но десктопная обычно чуть шустрее и удобнее для экспериментов, а также содержит дополнительный мощный модуль визуализации «Лента 3D», который отсутствует в мобильной.

Рисунок 3: визуализация идеального гармонического сигнала в мобильной версии (цветок)
Рисунок 3: визуализация идеального гармонического сигнала в мобильной версии (цветок)
Рисунок 4: визуализация акустического сигнала с микрофона в мобильной версии (цветок + спираль)
Рисунок 4: визуализация акустического сигнала с микрофона в мобильной версии (цветок + спираль)

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

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


КАК ПОЛЬЗОВАТЬСЯ ПРОГРАММОЙ?

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

  1. перейдём в раздел «Сигнал» и выберем профиль «Генератор»

  2. откроем раздел «Генератор» и выберем профиль «Камертон»

sin
Рисунок 5: синусоидальный тон

После выполнения этих шагов в динамиках должен зазвучать чистый синусоидальный тон заданной частоты (по умолчанию 440 Гц). На цветочной визуализации появится окружность, а на спиральной - архимедова спираль. Если поиграть с частотой тона, то будет меняться число витков спирали, значение амплитуды тона будет влиять на её радиус.

Теперь если на 3D-визуализации слегка улететь в строну, то можно обнаружить ленту-пружинку, вертикальная проекция которой на горизонтальную плоскость образует исходную синусоиду.

sin_3d
Рисунок 6: синусоидальный тон 3D

Тут нужно отметить запись на канале «Physics Videos by Eugene Khutoryansky», в которой рассмотрен этот же способ трёхмерной визуализации:

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

Рисунок 7: гармония 3D
Рисунок 7: гармония 3D
lace_3d
Рисунок 8: кружево 3D

Если смотреть на пружинки ровно с торца, то ортонормальная проекция будет представлять собой круговую цветочную геометрию (именно такой способ используется для рисования в видео канала «3Blue1Brown»), в то время как перспективная проекция будет образовывать спиральные формы.

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

forms
Рисунок 9: формы

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


КАК ЭТО РАБОТАЕТ?

В первом приближении алгоритм примерно следующий:

  • выделяется короткий кусочек аудиосигнала длительностью порядка 100 мс (временной кадр);

  • происходит поиск чистых синусоидальных тонов (частот) звучащих в сигнале, вычисляется их амплитуда и фазовый сдвиг с помощью преобразования Фурье;

  • после чего на основе этой информации происхдит постороение и отрисовка геометрии.

Но при детальном рассмотрении всё становится чуть сложнее: вычислительный дискретный алгоритм быстрого преобразования Фурье (БПФ) имеет некоторые особенности, которые затрудняют высокоточный анализ сигналов. Для устранения этих затруднений дополнительно применяется алгоритм фазо-амплитудной интерполяции (ФАИ), который более развёрнуто рассмотрен в статье ЗАГАДКИ БЫСТРОГО ПРЕОБРАЗОВАНИЯ ФУРЬЕ.

В основе финальных геометрических построений лежит следующий алгоритм на языке программирования C#:

	public class GeometryPresenter
	{
		public static IEnumerable<Point> Draw(
			IList<Bin> peaks, int sampleSize, double sampleRate,
			double approximation = 1d, double spiralStep = 0d, double phaseAngle = 0d
			)
		{
			if (peaks.Count.Is(0))
				yield break;

			var spiralScale = 1d;
			var pointsCount = (int)(sampleSize / approximation);
			var convertToPhase = approximation * Pi.Double / sampleRate;

			for (var i = 0; i < pointsCount; i++, spiralScale -= spiralStep)
			{
				var a = 0d;
				var b = 0d;

				for (var j = 0; j < peaks.Count; j++)
				{
					var peak = peaks[j];
				//	var w = Pi.Double * peak.Frequency;
				//	var t = approximation * i / sampleRate;
					var wt = peak.Frequency * i * convertToPhase; // w * t
					var phase = peak.Phase + wt + phaseAngle;
					var magnitude = peak.Magnitude * spiralScale;

					a += magnitude * Math.Cos(phase);
					b += magnitude * Math.Sin(phase);
				}

				yield return new(a, b);
			}
		}
	}

Исходный код алгоритма трёхмерной визуализации доступен по ссылке.


ДЛЯ РАЗМЫШЛЕНИЙ

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

Это напоминает голографические снимки и стереоскопические картинки, когда плоские изображения при верном рассмотрении магическим образом обретают объём.

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


ЗЕРКАЛА СТАТЬИ

EN: gitlab, habr

RU: gitlab, habr


ДОПОЛНИТЕЛЬНЫЕ МАТЕРИАЛЫ

Комментарии (46)


  1. 0Bannon
    14.10.2023 04:44
    +4

    Это просто офигенно.


    1. Makeman Автор
      14.10.2023 04:44
      +1

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


  1. HardWrMan
    14.10.2023 04:44
    +4

    А мы по-старинке балуемся Oscillofun'ом и иже с ними...


    1. Makeman Автор
      14.10.2023 04:44
      +1

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

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

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

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


      1. HardWrMan
        14.10.2023 04:44
        +1

        Всё верно, это фигуры Лиссажу, режим X-Y. Но одно дело просто фигуры, страшно звучащие (например, грибы) а другое - мелодичные. Вот грибы, кто не видел:

        Ну и не стоит забывать про биение частот камеры и отрисовки: эти ролики надо смотреть своими глазами на аналоговых осциллографах. Тогда множество артефактов уйдёт или станут незаметными.

        PS Вот ещё из более-менее мелодичных:


        1. Makeman Автор
          14.10.2023 04:44

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


        1. sterr
          14.10.2023 04:44
          +1

          Самое интересное - красивые осциллограмы - красивые звуки.


          1. HardWrMan
            14.10.2023 04:44

            Так о чём и речь. Это же отдельный вид искусства.


  1. XodzichaLatte07
    14.10.2023 04:44
    +1

    Спасибо за пищу для размышлений! Очень интересная тема, обязательно изучу ее подробнее!


  1. Qvxb
    14.10.2023 04:44
    +2

    Не нашел в программе способа открыть звуковой файл, неужели нет такого?


    1. Makeman Автор
      14.10.2023 04:44

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

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


  1. Qvxb
    14.10.2023 04:44
    +1

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


    1. iShrimp
      14.10.2023 04:44
      +1

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


      1. Qvxb
        14.10.2023 04:44

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

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


    1. Makeman Автор
      14.10.2023 04:44
      +2

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

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

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

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

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


      1. Qvxb
        14.10.2023 04:44
        +2

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

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


        1. Makeman Автор
          14.10.2023 04:44
          +1

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

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


          1. Qvxb
            14.10.2023 04:44
            +1

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

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

            круги на воде относительно беспрепятственно проходят друг сквозь друга

            Если их фронты движутся в разные стороны то да, а вот если такой фронт есть сумма 2-3 фронтов разных волн и все движутся в одну сторону то точно разделить их на отдельные волны до того как они слились скорее всего невозможно.

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

            Да, читал эту статью, но насколько понял это не совсем призма.
            "Each unit-cell can be modelled as series mass and parallel compliance (supporting the right-hand or positive index propagation), combined with series compliance and parallel mass (supporting left-hand or negative index propagation), as explained in Refs. 14 and 17. Thus, it behaves as an acoustic bandpass filter. "
            Это скорее последовательность фильтров, причем как я понимаю суть не столько в фильтрах сколько в размерах "призмы", которая как раз соответствует длинам волн в воздухе , для света эта "призма" была бы чем то вроде трубки со светофильтрами, световая же призма уникальна тем что она есть некое тело проходя через которое свет в зависимости от цвета по разному ведет себя.
            Однако ответ на вопрос как же устроено восприятие разных длин волн у человека скорее всего действительно находится где то в области поведения звуковых волн в улитке.

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


            1. Makeman Автор
              14.10.2023 04:44

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

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

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

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

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

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

              ~

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

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


              1. Qvxb
                14.10.2023 04:44

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

                1) Речь же про улитку в ухе человека, не уверен что там имеется стык двух сред, там скорее ситуация, когда стенка улитки колеблется как мембрана динамика и таким образом передает волны в жидкость в улитке, это как если взять обычный динамик и опустить его в воду, я бы не назвал это переходом волны из одной среды в другую. А следовательно не могу понять о каком преломлении речь.
                2) Не совсем понял, в каком смысле волна разделяется ?
                3) Движется с разной скоростью? Это как ? Первый раз слышу чтобы волны в среде двигались с разной скоростью. Насколько знаю упругие волны в среде всегда распространяются с одной и той же скоростью не зависимо от длины волны.
                4) Частота то может и остается а вот длина волны изменится потому что скорость в жидкости больше чем в воздухе, а значит У = с*Т, Т осталось тоже самое а вот с стало больше.


                1. Makeman Автор
                  14.10.2023 04:44

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

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

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

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


                  1. Qvxb
                    14.10.2023 04:44

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

                    Для световой волны преломление - изменение направления распространения, что вы понимаете под преломлением для продольной волны?

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

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

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


                    1. Makeman Автор
                      14.10.2023 04:44

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

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

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

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


                      1. Qvxb
                        14.10.2023 04:44
                        +1

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

                        Вы наверное имеете в виду отражения от стенок улитки, такое конечно может быть. Но чисто интуитивно сомневаюсь что это явление там срабатывает достаточно значительно. Иначе получится что текущий звук все время будет зашумлен предыдущим.


                      1. Makeman Автор
                        14.10.2023 04:44

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


                      1. Qvxb
                        14.10.2023 04:44
                        +1

                        Вообще сравнивая восприятие звука и результат работы фильтров все больше думаю что восприятие человека не делит исходный сигнал строго по частотам, оно воспринимает звук как бы целиком. Т.е если взять например условный стук, там предположим 6-7 волн значимой амплитуды причем эти волны сильно разной длинны, человеческое восприятие как то лепит из них цельное единственное событие. Преобразует колебания в динамику.


                      1. Makeman Автор
                        14.10.2023 04:44

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

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


                      1. Qvxb
                        14.10.2023 04:44

                        Чем мне не очень нравится ФФТ , так это тем что по его результатам нельзя определить периодический сигнал или нет, оно по сути просто говорит что в таком то окне есть такие то гармоники такой то амплитуды. А вот если посмотреть wave файл то там часто виден паттерн.


          1. alcotel
            14.10.2023 04:44
            +1

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

            В радиотехнике ровно такой-же принцип направленного излучения и приёма применяется в ФАР с частотным сканированием.

            Ближайший оптический аналог такому устройству - не призма, а скорее дифракционная решётка.


    1. alcotel
      14.10.2023 04:44
      +1

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

      На сколько я знаю (несколько лет назад изучал исходники, пытался делать анализ музыки, связанный с распознаванием событий, нот), пока науке не известно, в каком "формате" сигнал из уха идёт в мозг. Что-то ближе к Фурье, или к вейвлету, или к автокорреляции, или всё вместе. Есть несколько теорий, и все где-то не стыкуются с практикой. Зрение, например, гораздо лучше изучено.

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


      1. Qvxb
        14.10.2023 04:44

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

        10 мкс это 1/100000 секунды, если еще вспомнить что стандартная частота дискретизации звука 44100 отсчетов в секунду, то разрешение 10мкс ЯВНО избыточно, более того за пространственные эффекты отвечают волны соответствующие частоте 500гц и ниже на сколько помню, т.е не нужны никакие 10мкс.

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

        Тут вообще никакой проблемы, не нужно нейрону испускать спайки с частотой 20кгц чтобы работать с этой частотой, достаточно иметь много нейронов которые будут скажем 60 раз в секунду копировать в буфер мозга кусок сигнала длинной 1/60 сек.


        1. alcotel
          14.10.2023 04:44

          Про 10 мкс я честно списал из Википедии) При скорости звука 340 м/с и расстоянии между ушами 20 см это даст разрешение по азимуту 1°. Наверное, 1° - это действительно перебор, проверю как-нибудь в аудио-редакторе. Но перемещение источника звука на 5° уже вполне заметно. И даже 50 мкс - это тоже какая-то невероятная для физиологии цифра.

          достаточно иметь много нейронов которые будут скажем 60 раз в секунду копировать в буфер мозга кусок сигнала длинной 1/60 сек

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


          1. Qvxb
            14.10.2023 04:44

            Про 10 мкс я честно списал из Википедии) При скорости звука 340 м/с и расстоянии между ушами 20 см это даст разрешение по азимуту 1°. Наверное, 1° - это действительно перебор, проверю как-нибудь в аудио-редакторе. Но перемещение источника звука на 5° уже вполне заметно. И даже 50 мкс - это тоже какая-то невероятная для физиологии цифра.

            Ну тут надо иметь в виду что сдвиг между каналами никуда не пропадает, т.е например щелчок длительностью 1/4 секунды, пусть приходит с задержкой 50 мкс, но эта задержка справедлива для всего интервала в 1/4 сек.
            Если частота 20 кгц (в принципе некоторые слышат), соответствует периоду 1/20000 = 50мкс, то разрешающая способность нервных клеток вполне себе близка к 50мкс , а далее просто вычитать правый сигнал из левого пока 0 не получим чтобы понять какой временной сдвиг между ними.

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

            На счет синхронизации, в мозге есть альфа/бета/тета ритмы, возможно это и есть "синхроимпульсы" для звуковой/видео систем.
            А точность захвата - в каком смысле? Чтобы в правом и левом канале было одно и тоже? Вероятно в детском возрасте срабатывает какая - нибудь автоматическая калибровка.


            1. alcotel
              14.10.2023 04:44

              А точность захвата - в каком смысле? Чтобы в правом и левом канале было одно и тоже?

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


              1. Qvxb
                14.10.2023 04:44

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

                Человеческий организм симметричный, хотя между правой половиной и левой есть небольшие отличия, но суть в том что обе половины растут одновременно по одинаковому алгоритму. Похожая ситуация со зрением - очевидно что картинки которые дают левый и правый глаза немножко отличаются - по другому не бывает в реальном мире, однако это не мешает получать глубину сравнивая картинки. Я предполагаю что в детском возрасте - еще не сознательном, подсознание настраивает мозг на восприятие мира. Задача выглядит примерно так: есть 2 сигнала очень похожих но не одинаковых, между ними может быть задержка по умолчанию а может не быть, как откалибровать их так чтобы когда источник звука был прямо перед глазами временная разница между ними была бы 0.
                И тут нужен какой-то опорный звук про который точно известно что для него разница между правым и левым каналом = 0. Что это может быть? На ум приходит собственный голос например. Или звук, источник которого рядом. С другой стороны может быть и другой вариант, подсознание научается ориентироваться в пространстве и сопоставляет звуковые сигналы и задержки между ними с координатами источника звука.


  1. iShrimp
    14.10.2023 04:44
    +1

    Интересный способ вычисления точной частоты по БПФ.

    Я в своей программке на Pixilang делал по-другому: использовал два фрейма, перекрывающихся на 3/4 длины, и измерял разницу в фазах. Вот две статьи, описывающие принцип данного алгоритма. Для борьбы с утечкой спектра проще всего использовать окно Хэмминга (y = 0.53836-0.46164*cos(2*pi*x)), оно даёт наиболее узкую полосу и приемлемый уровень шума.

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

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


    1. Makeman Автор
      14.10.2023 04:44

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

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

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

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

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

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


    1. Makeman Автор
      14.10.2023 04:44

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

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


      1. iShrimp
        14.10.2023 04:44

        Вычисляем прямое преобразование Фурье, умножаем спектр на i*sgn(w) и вычисляем обратное преобразование. АЧХ сохраняется, ФЧХ поворачивается на четверть цикла.

        Проще говоря, косинусовые гармоники становятся синусовыми, а синусовые - косинусовыми с обратным знаком. Функция sgn(w) нужна для того, чтобы сохранить сигнал действительным (для этого необходимо, чтобы действительная часть Фурье-образа (косинусы) была чётной функцией, а мнимая часть (синусы) - нечётной функцией).


      1. iShrimp
        14.10.2023 04:44

        Кстати, можно сделать ещё проще: обнуляем отрицательную часть Фурье-образа - и у сигнала появляется мнимая составляющая. Можно сразу выводить на дисплей.


      1. alcotel
        14.10.2023 04:44
        +1

        Вы сейчас из БПФ с помощью чёрной магии находите несколько выделяющихся частот в спектре сигнала. Потом их синтезируете и сдвигаете фазу на 90° вот здесь:

        	a += magnitude * Math.Cos(phase);
        	b += magnitude * Math.Sin(phase);

        @iShrimp предлагает пропустить шаг поиска частот. Вместо этого взять весь спектр, и сдвинуть фазы всех частот на 90°. Раз уж комплексное БПФ посчитано, умножить его на ±i и преобразовать обратно в сигнал. Или сдвинуть фазу исходного сигнала фильтром

        После этого в визуализации, как и сейчас, нарисовать трек сигнала - по оси X отложить исходный сигнал, а по Y обработанный, сдвинутый на 90°.

        Ещё пара моментов: про метод интерполяции частоты и фазы. Сам похожей штукой пользовался, только считал по 3 точкам, а не по 4. Метод вполне можно обосновать аналитически, или хотя-бы графически выявить зависимость соседних комплексных амплитуд от сдвига частоты.

        А вот интерполируя фазу в лоб вот так

          var bcP = bP + (bcF - bF) * (cP - bP) / (cF - bF);

        вы будете получать непредсказуемые результаты при переходе через 180°. Например, интерполяция посередине между cP=+170° и bP=-170° (оно же 190°) вам даст 0°, а на самом деле будет 180°. Намного удобнее продолжать считать в комплексных числах, не вычисляя фазу явно.


        1. Makeman Автор
          14.10.2023 04:44

          Большое спасибо за пояснение, кажется, мне стало понятнее! Есть подозрение, что получится та же геометрическая картинка, но это надо проверить...

          Про переходы фаз - это отдельная головоломка! Но в практических экспериментах следующий алгоритм неплохо справляется и с этой задачей

          		var distance = (cP - bP) / Pi.Single;
          		var turn = Math.Abs(distance + 0.5) > 1.0;
          
          		...
          		var bcP = bP + (bcF - bF) * (cP - bP) / (cF - bF);
          		/* y(x) = y0 + ( x  - x0) * (y1 - y0) / (x1 - x0) */
          
          		if (turn)
          			bcP += Pi.Double * (cF - bcF) / (cF - bF);
          		if (bcP > Pi.Single)
          			bcP -= Pi.Double;
          

          Только не спрашивайте, как его получил... Долго эксперементировал - и вывелось из наблюдений интуитивно!


        1. Makeman Автор
          14.10.2023 04:44

          только считал по 3 точкам, а не по 4

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


  1. unclegluk
    14.10.2023 04:44
    +1

    На андроиде на программу падучая напала. Все падает и падает. А когда работает, то ничего не понятно.


    1. Makeman Автор
      14.10.2023 04:44

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

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


  1. ka4ep
    14.10.2023 04:44
    +1

    Не про программирование, но муз.теорию вспомнилась одноимённая книга Geomerty of Music.