Ряды Фурье в C++ ImGui

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

В следующей статье я использую прямоугольную волну, форма которой может быть составлена ​​путем добавления синусоидальных сигналов в соответствии со следующей формулой (в частотной области). Другую функцию вы найдете здесь (Таблица обычных рядов Фурье) — в нашем примере мы используем функцию № 6 (см. таблицу).

Синусоиду можно сравнить с точкой, вращающейся по окружности с радиусом r, который связан с амплитудой синусоидального сигнала. Скорость вращения точки на окружности равна периоду синусоидального сигнала P (один оборот - один период).
Добавляя дополнительные синусоидальные волны, мы можем лучше аппроксимировать наш опорный сигнал (здесь прямоугольная волна). Больше синусоидального сигнала заставляет нас добавлять больше кругов с меньшим радиусом.
Уменьшение радиуса окружности влияет на скорость вращения точки вокруг исходной окружности (чем меньше окружность, тем быстрее вращается точка.
Эти вращающиеся окружности встречаются чаще и в нечетном количестве. Функция, которая мы начали с того, что становится ближе, когда добавляются дополнительные круги (больше синусов) (моделирование в C++ ImGui).

Знакомство с C++ ImGui и информацию о компиляции и сборке программ вы найдете в одной из моих предыдущих статей.

Исходный код вы найдете на моем GitHub.

Симуляторы

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

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

Спасибо за чтение.