| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Разложение в ряд Фурье |
| Автор: unitto 25.4.2010, 21:23 |
| Доброго времени суток. Полтора часа насилования гугла не помогло найти теоретические сведенья для решения задачи: Виконати чисельний спектральний аналіз і синтез періодичної функції f(t) (за n першими гармоніками розкладання в ряд Фур’є). Результат спектрального синтезу функції та вихідну функцію зобразити графічно. В частности меня интересует как в С++ можно заданую функцию разложить на гармоники ряда Фурье, если можно с сылками на источники. Заранее благодарен. |
| Автор: GoldFinch 25.4.2010, 21:25 |
| гугли FFT |
| Автор: ToTToRo 26.4.2010, 05:40 |
| google в помощь. |
| Автор: xvr 26.4.2010, 12:36 |
| Плохо искал - http://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 |
| Автор: unitto 26.4.2010, 22:05 | ||
есть предложения по работе с формулами на этой странице в с++ ? |
| Автор: bilbobagginz 26.4.2010, 22:18 |
| unitto, если ты не понимаешь математику этого действия, поищи готовые реализации DFT (и в частности FFT) в сети с открытым кодом, и попробуй понять как пример. надо понять общую идею перехода из измерения времени в измерение частоты, http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 надо понять бесконечность ряда произвольной и непрерывной функции. надо понять ограниченность цифрового компьютера с т.з. количества значений, которые он может принимать по уровням и частотам, и то же самое по выходам. потом, в рамках данных ограничений отбросить наименее значимые гармоники. в принципе это и есть идея mp3 (только там еще вычисляют этот ряд кускам сигнала какой-то длинны. |
| Автор: xvr 26.4.2010, 22:30 |
| Есть. #include <complex> далее std::complex<double> для всех величин с 'этой страницы' Или не понятно как перемножать и складывать ряды чисел? |
| Автор: unitto 27.4.2010, 00:00 | ||||
ок, пасибо Добавлено через 1 минуту и 42 секунды
не работал с комплексными числами в с++ и уверен что в этой работе можно обойтись без них... |
| Автор: xvr 27.4.2010, 09:17 | ||
Преобразование Фурье делается в комплексных числах. Но если хочется самому написать всю арифметику комплексных чисел - флаг в руки
|
| Автор: Alexeis 27.4.2010, 09:42 | ||
Чисто случайно, мне удалось добыть фрагмент ультра секретного кода целочисленного FFT под кодовым названием "бабочка"
Добавлено через 2 минуты и 53 секунды Забыл упомянуть что массив im должен быть заполнен нулями перед вызовом функции. В нем будет возвращена комплексная часть спектра. |
| Автор: unitto 27.4.2010, 09:46 |
правильно ли я понял:![]() наша заданая функция f(x) есть сума гармоник fn(x) тогда гармонику можно будет "изьять" "лобовым" делением на e^inx ? |
| Автор: Alexeis 27.4.2010, 10:03 |
Это аналитическая формула. Формула дискретного фурье выглядит так. ![]() |
| Автор: unitto 30.4.2010, 08:33 |
| я так понимаю делать надо с помощью простого фурье с плавающей точкой? |
| Автор: xvr 30.4.2010, 10:36 | ||
Видите в формуле в показателе степени у 'e' стоит такая буква 'i'? Это мнимая единица. Так что с 'простой плавающей точкой' - облом. Не простая она, а комплексная Если хотите простоты - берите мой код, если скорости - код от Alexis, в нем комплексная арифметика расписанна явно (в виде операций отдельно над действительными и мнимыми частями) и измененн алгоритм (вычисляется не Дискретное Преобразование Фурье а Быстрое Преобразование Фурье, результат тот же, но быстрее и запутаннее) Добавлено через 8 минут и 47 секунд Да, если вам просто нужен спектр и не обязательно Фурье - делайте преобразование Хартли, оно без комплексных чисел |