Pull to refresh
54
-2.9

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

Send message

Хорошо сформулированному вопросу с помощью современных информационных технологий гарантирован правильный ответ. 

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

https://youtu.be/jP3ceURvIYc

То есть в жизни имеют место явления, на которые невозможно сформулировать «хорошие вопросы».

Область категориальной конкретики постепенно переходит в область вероятностной картины мира, а вероятностная в область неопределённостей.

Среди базовых категорий не отыскал: воля и вера :)

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

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

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

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

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

314159, 271828

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

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

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

Благодарю за видео, красивое! Правда, насколько понял, метод рисования там двухканальный, а не вращательный, как в серии роликов “everything is rotation” и программе Solfeggio.

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

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

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

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

Понимаю, что object-переменные выглядят непривычно, но в целом, думаю, код понятен.

Сразу возникает мысль поменять их на var ;-)

Респект за труд! Правда, такие проекты, скорее, для саморазвития, чем для широкого применения.

Если вдруг кто-то не знаком, есть классный онлайн-сервис от команды разработки C# - SharpLab.io. Позволяет прямо в браузере писать программы/скрипты, на лету их компилировать и выполнять. Очень удобный инструмент, чтобы оформить какой-то небольшой код и поделиться им с другими людьми.

Ещё можно поучаствовать в обсуждении новых фич языка или даже предложить свои Issues · dotnet/csharplang (github.com).

Существует метод рисования, когда один канал направляют на ось X, а другой на Y.

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

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

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

код метода для рисования геометрий
	public static IEnumerable<Point> DrawGeometry(Bin[] peaks, int sampleSize, double sampleRate,
		double centerX = 0d, double centerY = 0d)
	{
		var radiusMax = Math.Max(Math.Min(centerX, centerY), 1d);

		for (var i = 0; i < 4 * sampleSize; i++)
		{
			var a = 0d;
			var b = 0d;

			for (var j = 0; j < peaks.Length; j++)
			{
				var peak = peaks[j];
				var w = Pi.Double * peak.Frequency;
				var t = 0.5 * i / sampleRate;
				var phase = peak.Phase + w * t;
				var radius = peak.Magnitude * radiusMax;
				a += radius * Math.Cos(phase);
				b += radius * Math.Sin(phase);
			}

			yield return new(a + centerX, b + centerY);
		}
	}

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

Если рассмотреть в 3D, то окружность - это ортографическая проекция спирали (пружинки) с торца, а сбоку получится обычная косинусоида/синусоида. То есть полокружность - это половина периода косинусоиды.

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

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

По-моему, интересная тема для исследований... ))

Меня до сих пор вдохновляют некоторые ролики о комплексных числах... Чего только стоит серия "everything is rotation"

и другие по запросу

fourier drawing - YouTube

Во многом благодаря таким роликам в программе Solfeggio появился модуль по геометрии звука (2D цветок и 3D лента)

Геометрия звука
Геометрия звука

В своё время курс по геометрическому введению в теорию групп и другие ролики Алексея Савватеева очень поспособствовали развитию моего математического мышления или представления, кто как назовёт :-)

Геометрия и группы. Алексей Савватеев. Лекция 1.1. Мотивирующий пример - YouTube

Ой, зря вы так, некоторые ролики дают визуализацию и представление о сути таких вещей, которую по формулам уловить чрезвычайно трудно. Это как лекции с очень качественным видеорядом. Есть ряд математических каналов, при просмотре которых мой интерес к красоте этой области знаний очень усилился...

А теорема Гёделя имеет фундаментальное отношение ко всем разделам математики.

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

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

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

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

Линейность - многозначительный термин: если имеется в виду линейная функция от многих переменных, то не вполне уверен, что все формулы удовлетворяют определению таких функций. Но это терминолгические тонкости, сути дела они не меняют :)

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

Причём, из теоремы Гёделя о неполноте следует, что вполне могут существовать и неразрешимые утверждения: их нельзя ни доказать ни опровергнуть, ни даже узнать наверняка, разрешимые они или нет...

Слабое место математики: можно ли доказать всё, что истинно? [Veritasium] - YouTube

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

Погрешность больше 100 Гц.

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

F = 2423.47 Hz, M = 0.71, P = 0.19

То есть погрешность составила около 22 Гц.

Это моё субъективное мнение, но для шага дискретной решётки в

48000 / 32 = 1500 Гц (!)

Погрешность в 100 Гц ещё терпима, а 22 Гц - это очень неплохой результат.

Можно понизить часоту дискретизации, скажем, в 6 раз при прежнем размере блока

8000 / 32 = 250 Гц
F = 2447.52 Hz, M = 1.00, P = 1.56

Тогда для шага решётки в 250 Гц погрешность составит порядка 22 / 6 ~ 3.67 Гц

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

Линейной, да не совсем. Если бы всё было настолько линейно и очевидно, то, скорее всего, способ был бы давно замечен и широко известен в открытом доступе.

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

Но для моих задач соотношение точности и производительности для ФАИ наиболее оптимальное.

С некоторыми вариантами интерполяции можно ознакомиться по ссылкам

Improving FFT Frequency Measurement Resolution by Parabolic and Gaussian Interpolation (cern.ch)

Guitar Pitch Shifter - Algorithm

Pitch Shifting Using The Fourier Transform | Stephan Bernsee's Blog (zynaptiq.com)

Title (eudl.eu)

Не исключаю, что если задействовать векторные инструкции процессора (как в FFTW), то возможно достичь большей скорости вычислений на тех же объёмах.

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

магическим математическим смыслом

Меня очень цепляет этот загадочный смысл. Не могу строго объяснить эти во многом интуитивные формулы и почему алгоритм работает, но он работает и весьма точно!)

---

Используемая вами реализация FFT, кстати, на больших размерах будет врать из-за накопления ошибок в роторе.

Вместо умножений там можно возводить в степень, будет чуть медленнее, но, предположительно, точнее

	//rotor *= rotorBase;
	rotor = Complex.Pow(rotorBase, i + 1);

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

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

Вот интересная иллюстрация про разные картины мира

Самое главное — не надо сидеть и смотреть ковёр, замкнувшись в своей проблеме. Почти всегда проблема может быть решена правильным подбором препаратов.

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

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

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

Спасибо, что глянули! Там в методе EnumeratePeaks небольшая ошибочка закралась.

Вместо

		var count = spectrum.Count / 2 - 3;

нужно

		var count = spectrum.Count - 3;

тогда высокочастотные компоненты не обрезаются. Подправлю это!

Для работы с плотными спектрами рекомендуется уплотнить шаг частотной решётки либо путём понижения частоты дискретизации, либо увеличением размера выборки. Например, для частоты 16000 Гц и длины выборки в 1024 отчсёта шаг решётки составляет 15.625 Гц, а длительность 64 мс, для комбинаций 8000/1024 и 16000/2048 уже 7.8125 Гц и 128 мс.

Тогда на ваших данных погрешности по частоте не превышают 0.2 Гц.

спойлер
F = 899.91 Hz, M = 0.99, P = 0.73
F = 949.90 Hz, M = 1.01, P = 0.79
F = 1000.00 Hz, M = 1.00, P = 0.78
F = 1050.13 Hz, M = 1.01, P = 0.77
F = 1100.10 Hz, M = 0.99, P = -0.34

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

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

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

То есть открывается большая свобода действий по обработке сигнала...

Information

Rating
Does not participate
Registered
Activity