Чтение математической литературы может быть увлекательнее любого детектива.
Сначала — завязка. Поставлена понятная задача и показано решение. Интересно, открываем.
Функция s(x) на интервале [a, b] называется сплайном степени k на сетке с горизонтальными узлами
Что за g, почему 2k? Интрига. Но уже в следующем предложении интрига раскрывается, заодно показывая несколько иллюстраций, из которых понятно, что «ну это всё просто!». Расслабляемся и читаем дальше.
Строго говоря, они должны доставлять минимум функции
Хмм… Похоже на метод наименьших квадратов. Приятно чувствовать, что какие-то знания у меня есть. И тут вдруг — неожиданный поворот сюжета:
Для удобства запишем в матричном виде:
Что за палочки, что за цифры, нас такому не учили! Страшно. И хотя дальше матрица в привычном представлении присутствует, чувство тревоги не уходит. И вот:
Тогда вся задача и все предыдущие формулы сводятся к решению простой системы линейных уравнений:
Звучит как очевидный факт, но мне же это совсем не очевидно! Расстроившись, я пошёл пить чай.
(спустя некоторое время)
Хм… Минимизировать разницу между производными для обеспечения гладкости — это сильно!
(спустя ещё некоторое время)
Что-то формул всё больше и больше. Посмотрю-ка я пока просто картинки, а к формулам попозже вернусь.
…
(финал)
О, код на питоне! Написан вроде неплохо. Значит, теперь в формулы не обязательно вникать, можно же и отладчиком прогнать, если вдруг что. Облегчение.
(вместо заключения)
Многие авторы математических алгоритмов не прикладывают к своим статьям никакого кода, считая, что для программиста его математические выкладки должны быть очевидными. К сожалению, это редко когда так. Для программиста конструкция for(){for(){...}} более понятна, чем Σ Σ, даже если знать, что Σ — это сумма, и несмотря на то, что она длиннее. Поэтому автору отдельный респект за код.
В своё время пытался подобным образом решать аналогичную задачу, но не осилил, заткнулся на выборе узлов. Решил её другим способом — последовательной аппроксимацией функцией a*sin(k*x)+b*cos(k*x)
Мне кажется, Microsoft ненавидят всё же сильнее и намного бо́льшее количество народа. Но было бы странным читать жалобы Билл Гейтса на это. Жалоба — проявление слабости, показатель преобладания эмоций над разумом. Какой эффект вызывает эта статья, захотелось ли кому-то перейти на Babel или приобщиться к JS-сообществу? Мне — нет.
А когда эта цель будет достигнута, окажется, что она совсем уже и не нужна. Потому что она была нужна в 20 лет, а в 40, по её достижении, и ценности, и приоритеты, и сама жизнь поменялись.
Редкий случай, когда всё по делу. Только меня смутил пункт «35. Кофеин помогает убеждать» — есть ли доказательство, что причина именно в кофеине, а не в самом факте совместного распития напитка (неважно какого)?
Есть и более бюджетные варианты — серия VOX Valvetronix, например. И играть с перегрузом вовсе не обязательно — тёплую ламповость хорошо слышно и на обычной акустике с пьезодатчиком.
На ютубе разницу действительно сложно услышать. А вот вживую разница между ламповым комбиком и Guitar Rig через бытовую акустику более чем очевидна даже для самого непритязательного слушателя.
Был я недавно на оркестре симфонической музыки. И вот что я вам скажу — никакая аппаратура не сможет воспроизвести это дома. Потому что — размеры и форма комнаты не позволят. В настоящем, правильно спроектированном концертном зале звук вообще совсем совершенно другой. Невозможно воспроизвести звучание оркестра в помещении, где музыканты не смогут даже просто разместиться.
Преобразование Фурье определено в поле комплексных чисел. Какие сигналы имеют комплексную природу? Для каких комплексных данных оно используется на практике? (Аналитический сигнал не считается, поскольку он изначально является искусственным).
mayorovp, в последнее время мне уже несколько раз встречались комментарии в стиле «хабр уже не тот» потому что «никто не пишет комментарии по существу». Вот комментарии по существу, с ссылками и графиками, а не саркастическими тегами и мёртвыми котятами. Обсуждается тема, традиционно сложная для понимания. Рассмотрение её с диаметрально противоположных сторон оставляет возможность для дискуссии. Возможно, случайный Читатель сможет почерпнуть из этих комментариев (не только моих) чуть больше, чем из основной статьи.
Допустим, мы анализируем колебания цен на хлеб. Сегодня он стоит 20 р., вчера — 19р., а 30 лет назад — 20 коп. Однако не было момента сегодня ночью, когда он стоил 19.594р. Также как и много лет ранее не было момента, когда он стоил 0 р.
Вот что например пишут про преобразование Фурье вот здесь:
В спектральном анализе исследуются периодические модели данных. Цель анализа — разложить комплексные временные ряды с циклическими компонентами на несколько основных синусоидальных функций с определенной длиной волн. Термин «спектральный» — своеобразная метафора для описания природы этого анализа. Предположим, вы изучаете луч белого солнечного света, который, на первый взгляд, кажется хаотически составленным из света с различными длинами волн. Однако, пропуская его через призму, вы можете отделить волны разной длины или периодов, которые составляют белый свет. Фактически, применяя этот метод, вы можете теперь распознавать и различать разные источники света. Таким образом, распознавая существенные основные периодические компоненты, вы узнали что-то об интересующем вас явлении. В сущности, применение спектрального анализа к временным рядам подобно пропусканию света через призму. В результате успешного анализа можно обнаружить всего несколько повторяющихся циклов различной длины в интересующих вас временных рядах, которые, на первый взгляд, выглядят как случайный шум.
Наиболее известный пример применения спектрального анализа — циклическая природа солнечных пятен (например, см. Блумфилд, 1976 или Шамвэй, 1988). Оказывается, что активность солнечных пятен имеет 11-ти летний цикл. Другие примеры небесных явлений, изменения погоды, колебания в товарных ценах, экономическая активность и т.д. также часто используются в литературе для демонстрации этого метода.
На вашей картинке в самом начале стоит «аналоговый сигнал». Однако преобразование Фурье — это чисто математическая операция, которая переводит time domain в frequency domain и к никаким сигналам по умолчанию не привязана.
Я не ввожу никаких новых новых определений, а всего лишь использую готовые и устоявшиеся. Мне лично совершенно всё равно, говорить «спектр» или «frequency domain», однако «спектральный анализ» применительно к результату ДПФ используется повсеместно.
Ну, я бы не назвал операцию умножения на окно «банальной».
В соответствии с всё той же теоремой о свёртке, умножение во временной области равносильно свёртке в частотной. А поскольку сворачиваются именно комплексные частоты, а не их модули (амплитуды), результат может довольно сильно отличаться от ожидаемого.
Возьмём к примеру вот такой сигнал длиной 500 семплов:
При умножении его на окно Ханна и дополнении нулями до 1024 получим следующее (красным):
Как видно, результирующая АЧХ весьма слабо напоминает оригинальную.
Вернёмся к вашему примеру.
Имеем 10 точек синусоиды 15.34 Гц с частотой дискретизации 100 Гц (фиолетовый), они же, дополненные нулями до 1024 (красный), и для сравнения, та же синусоида, но 1024 точки (синий):
Видно, что максимум сигнала с дополненными нулями находится достаточно близко к оригинальной частоте.
А теперь возьмём и добавим ещё одну синусоиду с частотой 24.99 Гц:
Видно, что максимум сместился от первоначального положения.
А теперь добавим ещё больше нулей, до 8192:
Видно, что на точность это никак не повлияло.
А теперь самое интересное.
И в первом, и во втором случае мы имеем 5 локальных максимумов. Как отличить, являются эти максимумы лепестками или же реальными частотными составляющими?
Сначала — завязка. Поставлена понятная задача и показано решение. Интересно, открываем.
Что за g, почему 2k? Интрига. Но уже в следующем предложении интрига раскрывается, заодно показывая несколько иллюстраций, из которых понятно, что «ну это всё просто!». Расслабляемся и читаем дальше.
Хмм… Похоже на метод наименьших квадратов. Приятно чувствовать, что какие-то знания у меня есть. И тут вдруг — неожиданный поворот сюжета:
Что за палочки, что за цифры, нас такому не учили! Страшно. И хотя дальше матрица в привычном представлении присутствует, чувство тревоги не уходит. И вот:
Звучит как очевидный факт, но мне же это совсем не очевидно! Расстроившись, я пошёл пить чай.
(спустя некоторое время)
Хм… Минимизировать разницу между производными для обеспечения гладкости — это сильно!
(спустя ещё некоторое время)
Что-то формул всё больше и больше. Посмотрю-ка я пока просто картинки, а к формулам попозже вернусь.
…
(финал)
О, код на питоне! Написан вроде неплохо. Значит, теперь в формулы не обязательно вникать, можно же и отладчиком прогнать, если вдруг что. Облегчение.
(вместо заключения)
Многие авторы математических алгоритмов не прикладывают к своим статьям никакого кода, считая, что для программиста его математические выкладки должны быть очевидными. К сожалению, это редко когда так. Для программиста конструкция for(){for(){...}} более понятна, чем Σ Σ, даже если знать, что Σ — это сумма, и несмотря на то, что она длиннее. Поэтому автору отдельный респект за код.
Преобразование Фурье определено в поле комплексных чисел. Какие сигналы имеют комплексную природу? Для каких комплексных данных оно используется на практике? (Аналитический сигнал не считается, поскольку он изначально является искусственным).
В соответствии с всё той же теоремой о свёртке, умножение во временной области равносильно свёртке в частотной. А поскольку сворачиваются именно комплексные частоты, а не их модули (амплитуды), результат может довольно сильно отличаться от ожидаемого.
Возьмём к примеру вот такой сигнал длиной 500 семплов:
При умножении его на окно Ханна и дополнении нулями до 1024 получим следующее (красным):
Как видно, результирующая АЧХ весьма слабо напоминает оригинальную.
Имеем 10 точек синусоиды 15.34 Гц с частотой дискретизации 100 Гц (фиолетовый), они же, дополненные нулями до 1024 (красный), и для сравнения, та же синусоида, но 1024 точки (синий):
Видно, что максимум сигнала с дополненными нулями находится достаточно близко к оригинальной частоте.
А теперь возьмём и добавим ещё одну синусоиду с частотой 24.99 Гц:
Видно, что максимум сместился от первоначального положения.
А теперь добавим ещё больше нулей, до 8192:
Видно, что на точность это никак не повлияло.
А теперь самое интересное.
И в первом, и во втором случае мы имеем 5 локальных максимумов. Как отличить, являются эти максимумы лепестками или же реальными частотными составляющими?
(на видео тест наушников за 2749$)