Преобразования фурье для Форекс
Как использовать преобразование Фурье в трейдинге?
Преобразование Фурье – это, если говорить простым языком, операция, превращающая одну функцию в другую. А говоря ещё более просто, преобразование Фурье изменяет изначальный график функции в совсем другой график. По аналогии с тем, как подобное преобразование выполняет функция дифференцирования.
Что касается формулы, по которой происходит преобразование Фурье, то она весьма сложна. Те, кто хорошо разбираются в математике, могут ознакомиться с ней на иллюстрации снизу.
Однако и тем, кто не является профессором математики, волноваться нечего. Всё, что нам нужно знать – это то, что преобразование Фурье, как уже говорилось, изменяет один график в другой график. Над тем, как именно это происходит, задумываться вовсе не обязательно, так же как и над тем, каким именно образом электрический ток вашей розетки преобразуется в цветовые пиксели на экране вашего монитора.
Что же касается преобразования, то на графике ниже вы можете увидеть, как выглядела функция (и её график) до преобразования Фурье и как – после.
Даже невооружённым глазом не-специалиста хорошо видно, что разница существенная.
Поговорим теперь о том, что даёт преобразование Фурье и зачем его можно использовать.
О цикличности и спектрально-нейросетевом анализе
Говоря о преобразовании Фурье, нельзя не затронуть тему спектрального анализа хотя бы потому, что преобразование Фурье является всего лишь частью этого анализа. Специалисты считают, что спектральный анализ является вершиной современной науки о трейдинге.
Спектральный анализ базируется на следующих постулатах:
• Всё в природе циклично и повторяемо.
• Исходя из этого, синусоида является одним из оптимальных выражений каждого цикла.
• Каждая синусоида (цикл) разделяется на несколько этапов: начало, развитие, вершина, спад.
При этом каждая синусоида имеет несколько параметров:
• Амплитуда (ширина по оси Y).
• Период (ширина по оси Х).
• Фаза (при рассмотрении синусоиды в конкретный момент времени можно сказать, в какой фазе она находится).
Всё это применимо к огромному количеству сфер, начиная от астрономии (восход солнца, фазы луны, движение звёзд) и заканчивая экономикой (экономические циклы, кризисные циклы, сезонность в бизнесе). Трейдинг тем более не является исключением, так как в нём графический анализ играет огромную роль.
Суть спектрального анализа сводится к тому, что происходит разложение одной большой волны на несколько волн меньшего масштаба.Этот принципы известен трейдерам, так как существуют волны Эллиотта, который по праву может считаться человеком, первым применившим данный принцип.
Суть преобразования Фурье состоит в том, чтобы вычленить из любого цикла всё наиболее важное, в то же время отбросив малозначимые колебания. В случае с трейдингом отброшен окажется так называемый «рыночный шум».
Что касается нейросетевого анализа, то он хорошо сочетается с теми принципами, на которых построен спектральный анализ. Некоторые продвинутые трейдеры пытаются не только использовать преобразование Фурье, но и передавать результаты работы этой функции на нейросеть, чтобы та принимала решение о входе в рынок. Это, несомненно, технология завтрашнего дня, но на сегодняшний день она ещё не настолько развита, чтобы работать бесперебойно. Все опыты проводятся в основном в режиме тестирования и эксперимента.
Преимущества преобразования Фурье
Первым преимуществом является то, что такой анализ позволяет суммировать разные колебания в один хорошо заметный вектор.
В трейдинге, как и в любой другой сфере, часто приходится иметь дело с циклами, наложенными друг на друга. При этом специалисты заметили, что многие из этих циклов обладают свойством гармоничности и синхронности, а именно склонны завершаться одновременно, даже если они имеют совсем разные параметры периода.
Ещё одно важное свойство циклов – пропорциональность, то есть прямая зависимость амплитуды (размаха) от периода, то есть временного масштаба рассматриваемой синусоиды.
Недостатки преобразования Фурье
Главным недостатком можно назвать тот факт, что преобразование Фурье мало учитывает параметр времени. То есть, при использовании данного преобразования на график любой функции мы получаем изменённый график, на котором виден вектор движения синусоиды и её текущая фаза, что позволяет сделать предположение о том, какой будет следующая фаза. В случае с трейдингом – будет ли иметь место дальнейшее восхождение к вершине, или же вершина уже достигнута, и тренд будет падать.
В то же время, отсутствие чёткой корреляции с временной осью приводит к невозможности точно сказать, когда именно будет иметь место переход к следующей фазе тренда.
Помимо этого, нельзя забывать, что финансовые рынки отличаются, к примеру, от радиоволн, электромагнитных импульсов и других явлений физического мира тем, что не настолько предсказуемы. Любая волна, достигая апогея своей силы, неизбежно начинает затухать. В случае с финансовыми рынками это не обязательно будет именно так, поскольку тот тренд, который мы рассматриваем, может оказаться составной частью ещё более мощного тренда, который на нашем графике не отображён, или даже коррекцией этого тренда.
Не говоря уже о том, что на рынки часто оказывают влияние внешние события, никак не связанные с финансовыми рынками, а связанные исключительно с реальной жизнью.
Индикатор для использования преобразования Фурье на практике
Если переходить к практике, то на многих брокерских платформах существуют специальные индикаторы, позволяющие применить преобразование Фурье в собственной торговле. Например, индикатор Fourier.
Индикатор на графике цены выглядит как две линии. В них нетрудно узнать скользящие средние – быструю и медленную, то есть стандартный набор. Однако также бросается в глаза и тот факт, что эти линии имеют необычную форму, по сравнению со стандартными скользящими средними. В них нет привычной для СС «волнистости», и это как раз по причине того, что линии Фурье не просто представляют собой смещённый и растянутый/сжатый график, но являются суммирующей функцией сразу для нескольких микроволн, входящих в состав текущей синусоиды.
Что касается сигналов индикатора Фурье, то они не отличаются от сигналов стандартных скользящих средних:
• Сделка на покупку совершается, когда быстрая линия пересекает медленную снизу вверх.
• Сделка на продажу – когда медленная пересекает быструю снизу вверх.
Ещё одним вариантом использования сигналов данного индикатора является отслеживание пересечений линий с самой ценой. Особое внимание эксперты советуют обращать на выход из коридора, образуемого линиями индикатора, так как это может быть началом мощного тренда.
В целом индикатор Фурье несложен для использования, в отличие от той математической теории, которая за ним стоит. Однако следует потратить время на его настройку, чтобы добиться оптимального эффекта.
Fourier Extrapolator (экстраполятор Фурье) – прогноз тренда форекс.
Прогнозирование тренда на forex является основополагающей задачей для любого трейдера или аналитика, ее успешное решение всегда приносит не малую прибыль. Оказывается, решить данную задачу можно и при помощи средств технического анализа, таких как индикатор Fourier Extrapolator (экстраполятор Фурье).
Данный программный продукт призван осуществить прогноз дальнейшего движения цены на заданном временном промежутке. Что позволяет определится с направлением открываемых ордеров.
Инструмент построен на основании теории Фурье, что позволяет превратить его в полноценную версию динамического экстраполятора, который продлевает существующую линию тренда в будущее.
Торгуй по крупному только с ведущим брокером
Предсказание обычно не выходит за время одного дня, поэтому данный индикатор можно использовать только для внутридневной торговли.
На графике валютной пары данные программы преобразуются в оранжевую линию, которая просто продлевает существующую линию тренда до определенного придела.
В основе прогнозов лежит довольно известная теория, основанная на повторении волнового движения, все расчеты базируются на истории поведения цены в прошлом, поэтому при использовании данного инструмента в торговле желательно исключить действие внешних фундаментальных факторов.
Для этого, прежде чем запускать программу свертись с экономическим календарем, не произойдет ли в ближайшей перспективе выход какой либо из важных финансовых новостей.
Кроме этого будет не лишним установить на график индикатор новостей, настроенный на выход новостей по торгуемым валютам, так вы сможете быстрее среагировать на изменение тренда, чем об этом сигнализирует Fourier Extrapolator.
Большинство основных параметров уже корректно настроены, но если вы хотите произвести настройку по собственной схеме, можете воспользоваться инструкцией по настройке, она находится в архиве.
Индикатор отлично подходит для скальпинга, именно поэтому большинство его параметров уже настроены по умолчанию для торговли на самых коротких временных промежутках, таких как М1 или М5. При желании можно конечно и увеличить продолжительность рабочего тайм фрейма, но после этого прогноз теряет свою точность.
Для повышения эффективности использования рекомендуется так же установить на график индикатор тренда, который показывает его силу.
Предупреждение о рисках.
Начиная торговлю CFD на любом из финансовых рынков вы должны четко понимать, что такой вид деятельности может привести не только к прибыли, но и к убыткам.
Консультации по торговле на форекс и других биржевых площадках России
Экстраполятор Фурье – прогнозируем правильно рынок Форекс
Каждому трейдеру, который торгует на рынке Форекс, предоставляется сложная задача – предугадывание действия валютных пар и прогнозирование тренда. Для этого многие торгующие используют индикатор фурье форекс, который является аналитическим техническим средством.
Как известно, линия тренда является важной и решающей при торговле. Человеческий мозг не может проделывать быстрый и глубокий анализ подъёма или спада валютной пары, поэтому на помощь пришёл метод Фурье, который способен предвидеть движение рынка.
Особенности метода Фурье
Методика основана на внедрении самостоятельной версии динамического анализа. Торговля с помощью «робота Фурье» рассчитана на среднесрочный и краткосрочный (или дневной график). Если трейдер торгует на долгосрочном периоде, то придётся знакомиться с другим индикатором.
Рассматриваемый нами метод включает в себя всем нам известные приёмы работы с графиком – повторение волновых движений, история стоимости валюты в прошлом, повторение основной гармоники через каждые T1 (Т2)=2П/ω0 периода.
Однако необходимо знать и помнить, что рынок Форекс предугадать очень сложно, а действия индикатора лучше рассматривать как «рекомендацию» к открытию ордера. Так, при выходе экономических новостей график может резко пойти вверх или вниз, тем самым показывая свою непредсказуемость. Когда ожидаются серьёзные новости (такую информацию вам может дать форекс-брокер), то лучше переждать момент и не начинать торговлю; то же самое касается открытых позиций – старайтесь их закрыть, если знаете, что скоро будут важные мировые извещения. Если вы по каким-нибудь причинам не смогли закрыть позицию, то и тут методика Фурье придёт вам на помощь: индикатор ощущает резкие толчки графика, рост или падение валют в обратную сторону.
Индикатор рассчитан для скальпинга. С помощью него можно смело входить в рынок на графике М1 и М5. При увеличении времени таймфера метод теряет свою точность и в некоторых случаях может выдать ошибочную рекомендацию.
Гипотеза индикатора: если на спокойном графике три волны идут друг за другом, то ожидается и четвёртая, на которой и следует открывать позицию.
Экстраполятор Фурье – отличный помощник на рынке форекс. С помощью него вы сможете совершать торговлю, при этом избегая убыточных моментов. Однако не стоит забывать, что прежде, чем открыть позицию, необходимо совершать самостоятельный анализ, так как рынок Форекс непредсказуем и даже машина может выдать ложную подсказку.
Финансовый Анализ и Финансовый Менеджмент
Анализ Фурье валютного рынка Форекс
Анализ Фурье валютного рынка Форекс
Любой человек, который начинает задумаваться о прогнозирование курса валюты на бирже Форекс, сразу же вспоминает старый добрый Фурье-анализ. Мы тоже не были исключением из этого правила и первое, что нам пришло в голову это сделать анализ Фурье поведения какой-нибудь валютной пары.
Идея Фурье-анализа очень простая. Надо взять как можно больший интервал исторических данных поведения какой-нибудь валютной пары, посчитать коэффициенты дискретного Фурье-разложения, например, для цен закрытия, построить график Амплитудно-Частотной Характеристики (АЧХ) и найти на каких частотах бывают максимумы АЧХ. Эти частоты и будут соответствовать основным периодам изменения валютной пары. Поняв, через какие времена поведение валютной пары регулярно повторяется, можно уже прогнозировать поведение этой валютной пары в будущем. Как видите, на первый взгляд все выглядит очень просто.
Но с самого начала нас смущала только одна мысль, а почему до этого не додумались еще лет 100 назад или хотя бы несколько десятилетий назад, когда появились компьютеры. Поэтому мы были уже как бы готовы к тому, что получится какая-нибудь фигня. Просто очень хотелось взглянуть на эту фигню самим. И оценить эту фигню непредвзятым глазом. Для непредвзятого взгляда мы даже не стали искать в Интернете никаких материалов по данной теме, чтобы они не повлияли на наше видение результата.
В краце, результаты полученного АЧХ были следующими:
- Большая полоса белого шума со снижающейся амплитудой при увеличении частоты.
- На фоне полосы белого шума имеется нескольк более или менее четко выраженных пиков.
- Положение пиков на АЧХ и их выраженность непостоянны.
- Пики занимают то или иное положение в зависимости от того, какой временной интервал мы исследовали, как от длины интервала, так и от его расположения.
- Выраженность пиков также зависит от того, какой временной интервал мы исследовали, как от длины интервала, так и от его расположения.
- Пики вообще иогут на некоторых исследуемых интервалах исчезать.
- При последовательном изменении какого-нибудь интервала исследования можно наблюдать, как некоторые пики постепенно исчезат утонув в шуме, другие, наоборот, вылезают из шума.
- При последовательном изменении какого-нибудь интервала исследования можно наблюдать, как некоторые пики постепенно сливаются друг с другом, или, наоборот, какой-нибудь пик делится на два пика.
Но самое плохое состояло в том, что мы не могли предсказать, как будут вести себя эти резононсные пики в будущем. Будет ли данный конкретный пик смещаться в область более высоких частот, если до этого он на данном конкретном фиксированном по длине интервале исследования смещался в область более высоких частот?
Поэтому на основе простого Фурье-анализа невозможно сказать, что через столько-то биржевых дней валютная пара снова поведет себя так-то и так-то. В нестационарности процесса заключается главная причина фиаско метода Фурье для прогнозирования курса валют на бирже Forex.
В целом, по поводу Фурье-разложения надо заметить следующее. Фурье-анализ хорошо работает там, где есть некоторая трансляционная симметрия процесса, в данном случае по времени. Даже, если просесс сильно утонул в случайных шумах, так что никакой периодичности на глаз почти не видно и/или исказился до неузнаваемости разного рода полиномиальными трендами, так что никакой периодичности в поведении снова не ощущается, все равно Фурье-анализ с высокой степенью отфильтрует все периодические составляющие этого процесса. В нашем случае можно сказать, что такие такие периодические тренды на валютной бирже Форекс присутствуют, но нестационарность приводит к тому, что амплитуда и период этих колебаний постоянно меняются. Мало того, сами эти колебательные тренды на бирже Forex могут зарождаться и уничтожаться. И этот процесс рождения и уничтожения новых колебаний происходит там постоянно.
Итак, если Фурье-разложение хорошо работает для анализа функций с трансляционной симметрией, то как быть с функциями без трансляционной симметрии?
В теории функционального анализа утверждается, что любую непрерывную квадратично интегрируемую на каком-то интервале функцию можно разложить на этом интервале в ряд по бесконечному набору линейно независимых ортонормированных функций. Для случая не непрерывной, а дискретной функции можно разложить в конечную сумму по конечному набору ортонормированных функций.
Классический ряд Фурье это один из примеров такого разложения. Например, если на каком-то интервале у нас есть какая-то функция, которая описывает, скажем, колебания натянутой струны на этом интервале, то классическое разложение в ряд Фурье такой функции дает разложение амплитуды колебаний по гармоникам колебаний струны. У нас на интервале может укладываться только целое число полуволн синуса или косинуса (конкретно синус или косинус, это зависит от граничных условий). Интеграл от произведения любых двух несовпадающих гармоник равен нулю, то есть все гармоники ортогональны друг другу. Для дискретной функции (не непрерывная струна, а конечное число частиц) все то же самое, только разложение идет не по бесконечному ряду, а по конечной сумме, так как в такой системе у нас конечное число степеней свободы (конечное число гармоник).
В зависимости от симметрии функции разложение может быть более удобным не по синусам и косинусам, а по другому ортонормированному набору функций. Например, функции с цилиндрической симметрией более удобно разлагать в ряд по набору функций Бесселя, а функции со сферической симметрией лучше разлагать в ряды по полиномам Лежандра и т.п. Все эти наборы ортонормированных функций являются собственными функциями операторов соответствующих симметрий. Например, синусы и косинусы это собственные функции трансляционного оператора d/dx.
Вот эта вещь в дальнейшем оказалась для нас очень продуктивной. Надо разложить исторический временной ряд валютной пары по ортонормированному набору функций оператора эволюции данного ряда.
Преобразования фурье для Форекс
Сегодня мы с вами познакомимся с индикатором, который в буквальном смысле слова способен заглядывать в будущее. Многие скажут, что это невозможно, однако индикатор показывает совершенно иные результаты. Он, исходя из собственных вычислений и просмотра истории начинает дорисовывать ваш график, то есть он предвидит события, которые произойдут на рынке в самое ближайшее время.
Создателем индикатора можно по праву считать знаменитого в узких кругах физика – Фурье, конечно создавая свою теорию в то время, он не задумывался о том, что его идею, когда-нибудь будут использовать на мировом валютном рынке. Однако Форекс индикатор Фурье является одним из лучших на данный момент помощником в вашей торговле.
Именно эти предсказания способствую открытию ордеров, причем верному открытию сделок в правильном направлении, которые принесут вам определенный доход. Использовать индикатор лучше всего на коротких промежутках времени, так как на больших таймфреймах могут быть серьезные огрехи, которые будут приносить убытки.
Этот инструмент создан на базе экстраполятора, собственно именно эта система Фурье помогает определить дальнейшее движение тренда.
Если вы собираетесь использовать именно этот индикатор, то вам придется исключить все методы анализа, связанные с экономикой, то есть фундаментальный анализ можно полностью исключить, так как индикатор Фурье основан на том, что история всегда повторяется, собственно вся торговля на рынке Форекс основывается на этом правиле, и исходя из прошлых котировок индикатор делает определенные выводы по поводу того, куда будет направлена цена в будущем.
Зачастую индикатором пользуются в первозданном виде, так как его параметры достаточно оптимально настроены и менять их можно только, если вы точно уверены, что, изменив тот или иной параметр, ваша торговля действительно улучшиться. Чтобы поменять настройки вам придется воспользоваться инструкцией, которая в большинстве случаев уже находится в скачиваемом архиве вместе с самим индикатором, если же ее нет, то на просторах интернета подобную инструкцию найти довольно просто.
Очень часто данным индикатором пользуются именно скальперы, так как он хорош для коротких промежутков времени, то бишь для таймфреймов М1 и М5, вы можете поэкспериментировать и использовать данный индикатор для более высоких временных отрезков, однако, как я уже писал выше, на более высоких ТФ сигналы будут неточными.
Индикатор Fourier (индикатор Фурье)
Overton
Преобразование Фурье — одна из краеугольных форум математики, с помощью которой раскладывают базовую функцию на гармонические колебания. На рынке Форекс мы также можем наблюдать одни и теже повторяющиеся паттерны не только во времени, но и на разных таймфреммах исходя их этой концепции автор индикатора Fourier попытался применить формулы Фурье для прогнозирования дальнейшего движения цены.
В архиве в конце сообщения по ссылке Вы найдете следующие файлы:
- Fourier_v1.ex4 и Fourier_v1.ex4 необходимо установить как индикаторы.
- lib_FFT.ex4 — необходимо поместить в папку путь в вашему терминалуMQL4\Libraries
- f1.tpl, f1.tpl, f1&f2.tpl — шаблоны, можно использовать на свое усмотрение.
Сигналы индикатора Fourier
- HistoryBars — количество баров для анализа
- FutureBars — количество баров, на которые линия отрисовывается в будущее
- Smoothness — коэффициент сглаживания.
- Comments — отображение комментариев на графике.
Сигналы индикатора Fourier
На график помещаем два индикатора Fourier_v1 и Fourier_v2, которые на первый взгляд выглядят как скользящие средние, протянутые вперед на заданное в настройках количество баров.
- Сигнал : Быстрая линия пересекает медленную
Стоп при этом рекомендуется ставить при развороте быстрой линии (это хорошо видно, идет прорисовка в будущее) , но так как индикатор Fourier указывает лишь направление на смену тенденции а не ценовые уровни, stoploss и takeprofit лучше ставить на основе сигналов других инструментов торговой системы.
Система фурье на форексе.
proggi
Активный участник
Я около года назад стал проникаться идеей гармонических колебаний цены на рынке, в частности рынок форекс.
Как оказалось, не все так идеально как мне казалось на первый момент, в интернете достаточно много индикаторов по методу фурье, есть видео и прочее.
Далее я стал вникать все глубже и глубже, и выяснил что все эти индикаторы просто напросто не могут работать.
Основная причина кроется как оказалось в самой методике, а именно в фурье. Оригинальные построения исходят из того что начальная функция изначально должна быть периодичной, тоесть иметь период колебания, что возможно лиш в строгом боковом диапазоне.
Получается что и без построения и анализа становится ясно, что фурье, покрайней мере в чистом виде, не применим.
Далее оказалось, что для построения корректных гармоник дужна примерно одинаковая волотильность рынка, но, у нас бывают ночные сессии, бывают праздники в странах участниках валютной пары, и прочее.
Я частично решил данную проблему изменив периоды графиков, и углы наклона фурье, а также применив кореляцию исходных данных (цен) к получившимуся графику гармонических колебаний.
Преобразования фурье для Форекс
О быстром преобразовании Фурье
На следующей неделе начнётся Moscow International Workshop ACM ICPC. Я буду вести на этих сборах лекцию по быстрому преобразованию Фурье, в связи с чем я подготовил конспект, в котором описал большую часть того, что нужно знать про него для использования в контестах. Даже если вы считаете, что знаете FFT, советую посмотреть, там всё ещё могут быть новые идеи для вас. Ближе к лекции также будет английский вариант 🙂
P.S. Пользуясь случаем, напоминаю о том, что я сейчас веду паблик вконтакте, в который выкладываю какие-то интересные и новые для меня идеи. Наиболее важные я дублирую в постах здесь, но всякая другая мелочь, не всегда связанная со спортивным программированием, остаётся именно на страницах паблика. В частности, часть конспекта сделана на основе материала, который я раньше выкладывал в него. В планах есть некоторое расширение, как перевод на английский и открытие канала в telegram.
UPD: Добавлена английская версия. Также в русской версии добавлен параграф про вычисление последовательностей методом разделяй и властвуй.
Преобразование Фурье
Преобразование Фурье
Преобразование Фурье – это семейство математических методов, основанных на разложении исходной непрерывной функции от времени на совокупность базисных гармонических функций (в качестве которых выступают синусоидальные функции) различной частоты, амплитуды и фазы. Из определения видно, что основная идея преобразования заключается в том, что любую функцию можно представить в виде бесконечной суммы синусоид, каждая из которых будет характеризоваться своей амплитудой, частотой и начальной фазой.
Рис.1. Функция, которая определена на временном интервале, и ее отображение на частотном интервале
Преобразование Фурье является основоположником спектрального анализа. Спектральный анализ – это способ обработки сигналов, который позволяет охарактеризовать частотный состав измеряемого сигнала. В зависимости от того, каким образом представлен сигнал, используют разные преобразования Фурье. Различают несколько видов преобразования Фурье:
– Непрерывное преобразование Фурье (в англоязычной литературе Continue Time Fourier Transform – CTFT или, сокращенно, FT);
– Дискретное преобразование Фурье (в англоязычной литературе Discrete Fourier Transform – DFT);
– Быстрое преобразование Фурье (в англоязычной литературе Fast Fourier transform – FFT).
Непрерывное преобразование Фурье
Преобразование Фурье является математическим инструментом, применяемым в различных научных областях. В некоторых случаях его можно использовать как средство решения сложных уравнений, описывающих динамические процессы, которые возникают под воздействием электрической, тепловой или световой энергии. В других случаях оно позволяет выделять регулярные составляющие в сложном колебательном сигнале, благодаря чему можно правильно интерпретировать экспериментальные наблюдения в астрономии, медицине и химии. Непрерывное преобразование фактически является обобщением рядов Фурье при условии, что период разлагаемой функции устремить к бесконечности. Таким образом, классическое преобразование Фурье имеет дело со спектром сигнала, взятым во всем диапазоне существования переменной.
Существует несколько видов записи непрерывного преобразования Фурье, отличающихся друг от друга значением коэффициента перед интегралом (две формы записи):
где и — Фурье-образ функции или частотный спектр функции ;
Следует отметить, что разные виды записи встречаются в различных областях науки и техники. Нормировочный коэффициент необходим для корректного масштабирования сигнала из частотной области во временную. Нормировочный коэффициент уменьшает амплитуду сигнала на выходе обратного преобразования для того чтобы она совпадала с амплитудой исходного сигнала. В математической литературе прямое и обратное преобразование Фурье умножаются на множитель , в то время как в физике чаще всего при прямом преобразовании множитель не ставят, а при обратном ставят множитель . Если последовательно рассчитать прямое преобразование Фурье некоторого сигнала, а после взять обратное преобразование Фурье, то результат обратного преобразования должен полностью совпадать с исходным сигналом.
• Если функция нечетная на интервале (−∞, +∞), то преобразование Фурье может быть представлено через синус-функцию:
• Если функция четная на интервале (−∞, +∞), то преобразование Фурье может быть представлено через косинус-функцию:
Таким образом, непрерывное преобразование Фурье позволяет представить непериодическую функцию в виде интеграла функции, представляющей в каждой своей точке коэффициент ряда Фурье для непериодической функции.
Преобразование Фурье является обратимым, то есть если по функции был рассчитан ее Фурье-образ , то по Фурье-образу можно однозначно восстановить исходную функцию . Под обратным преобразованием Фурье понимают интеграл вида (две формы записи):
где — Фурье-образ функции или частотный спектр функции ;
• Если функция нечетная на интервале (−∞, +∞), то обратное преобразование Фурье может быть представлено через синус-функцию:
• Если функция четная на интервале (−∞, +∞), то обратное преобразование Фурье может быть представлено через косинус-функцию:
В качестве примера, рассмотрим следующую функцию . График исследуемой экспоненциальной функции представлен ниже.
Рис.2. График исследуемой экспоненциальной функции
Поскольку функция является четной функцией, то непрерывное преобразование Фурье будет определяться следующим образом:
В результате получили зависимость изменения исследуемой экспоненциальной функции на частотном интервале (см. ниже).
Рис.3. Фурье-образ исследуемой экспоненциальной функции
Дискретное преобразование Фурье
Непрерывное преобразование Фурье используют, как правило, в теории при рассмотрении сигналов, которые изменяются в соответствии с заданными функциями, но на практике обычно имеют дело с результатами измерений, которые представляют собой дискретные данные. Результаты измерений фиксируются через равные промежутки времени с определённой частотой дискретизации, например, 16000 Гц или 22000 Гц. Однако в общем случае дискретные отсчёты могут идти неравномерно, но это усложняет математический аппарат анализа, поэтому на практике обычно не применяется.
Рис.4. Исходный аналоговый сигнал и дискретный сигнал
Существует важная теорема Котельникова (в иностранной литературе встречается название «теорема Найквиста-Шеннона», «теорема отсчетов»), которая гласит, что аналоговый периодический сигнал, имеющий конечный (ограниченный по ширине) спектр (0…fmax), может быть однозначно восстановлен без искажений и потерь по своим дискретным отсчётам, взятым с частотой, большей или равной удвоенной верхней частоте спектра — частота дискретизации (fдискр >= 2*fmax). Другими словами, при частоте дискретизации 1000 Гц из аналогового периодического сигнала можно восстановить сигнал с частотой до 500 Гц. Следует отметить, что дискретизация функции по времени приводит к периодизации ее спектра, а дискретизация спектра по частоте приводит к периодизации функции.
Дискретное преобразование Фурье — это одно из преобразований Фурье, широко применяемых в алгоритмах цифровой обработки сигналов.
• Прямое дискретное преобразование Фурье ставит в соответствие временной функции , которая определена N-точками измерений на заданном временном интервале, другую функцию , которая определена на частотном интервале. Следует отметить, что функция на временном интервале задается с помощью N-отсчетов, а функция на частотном интервале задается с помощью K-кратного спектра.
N ˗ количество значений сигнала, измеренных за период, а также кратность частотного спектра;
k ˗ индекс частоты.
Частота k-го сигнала определяется по выражению
где T — период времени, в течение которого брались входные данные.
Прямое дискретное преобразование может быть переписано через вещественную и мнимую составляющие. Вещественная составляющая представляет собой массив, содержащий значения косинусоидальных составляющих, а мнимая составляющая представляет собой массив, содержащий значения синусоидальных составляющих.
Из последних выражений видно, что преобразование раскладывает сигнал на синусоидальные составляющие (которые называются гармониками) с частотами от одного колебания за период до N колебаний за период.
Дискретное преобразование Фурье имеет особенность, так как дискретная последовательность может быть получена суммой функций с различным составом гармонического сигнала. Другими словами, дискретная последовательность раскладывается на гармонические переменные – неоднозначно. Поэтому при разложении дискретной функции с помощью дискретного преобразования Фурье во второй половине спектра возникают высокочастотные составляющие, которых не было в оригинальном сигнале. Данный высокочастотный спектр является зеркальным отображением первой части спектра (в части частоты, фазы и амплитуды). Обычно вторая половина спектра не рассматривается, а амплитуды сигнала первой части спектра — удваиваются.
Рис.5. «Зеркальный эффект» на спектре частоты для дискретного сигнала
Следует отметить, что разложение непрерывной функции не приводит к появлению зеркального эффекта, так как непрерывная функция однозначно раскладывается на гармонические переменные.
Амплитуда постоянной составляющей является средним значением функции за выбранный промежуток времени и определяется следующим образом:
Амплитуды и фазы частотных составляющих сигнала определяются по следующим соотношениям:
Полученные значения амплитуды и фазы называют полярным представлением (polar notation). Результирующий вектор сигнала будет определяться следующим образом:
Рассмотрим алгоритм преобразования дискретно заданной функции на заданном интервале (на заданном периоде) с количеством исходных точек
Рис.6. Д искретное преобразование Фурье
В результате преобразования получаем вещественное и мнимое значение функции , которая определена на частотном диапазоне.
• Обратное дискретное преобразование Фурье ставит в соответствие частотной функции , которая определена K-кратным спектром на частотном интервале, другую функцию , которая определена на временном интервале.
N ˗ количество значений сигнала, измеренных за период, а также кратность частотного спектра;
k ˗ индекс частоты.
Как уже было сказано, дискретное преобразование Фурье N-точкам дискретного сигнала ставит в соответствие N-комплексных спектральных отсчетов сигнала . Для вычисления одного спектрального отсчета требуется N операций комплексного умножения и сложения. Таким образом, вычислительная сложность алгоритма дискретного преобразования Фурье является квадратичной, другими словами требуется операций комплексного умножения и сложения.
Быстрое преобразование Фурье
Быстрое преобразование Фурье (БПФ, Fast Fourier transform — FFT) представляет собой определенный алгоритм вычисления, который позволяет уменьшить количество производимых действий относительно прямого (по формуле) вычисления ДПФ. В основе алгоритма заложено разбиение заданной последовательности отсчетов дискретного сигнала на несколько промежуточных последовательностей. Следует отметить, что алгоритм БПФ точнее стандартного ДПФ, т.к. при сокращении операций снижаются суммарные ошибки округления.
В настоящее время известны несколько алгоритмов быстрого преобразования Фурье, которые являются частными случаями единого алгоритма, базирующегося на задаче разбиения одного массива чисел на два с последующим рекурсивном вычислении каждого массива чисел по дискретному преобразованию Фурье и объединении результатов расчетов.
Рассмотрим алгоритм БПФ с прореживанием по времени. В качестве исходных данных задан N-отсчетный сигнал . Исходный сигнал разбиваем на два массива чисел с -отсчетов: четные отсчеты и нечетные отсчеты . В результате функция , которая определяется на частотном интервале, будет определяться следующим соотношением:
Последнее выражение можно преобразовать в следующий вид:
В результате можно получить два выражения для определения функции на первом частотном интервале и втором частотном интервале :
Последнее выражение получено в соответствии со следующими двумя выражениями:
Таким образом, алгоритм вычисления заключается в разбиении входного сигнала на два массива чисел и , составленных соответственно из четных и нечетных отсчетов. После этого для каждого массива чисел рассчитывается ДПФ с образованием двух функций и . На заключительном шаге выполняются базовые операции сложения и вычитания с умножением одного из компонентов на экспоненциальный множитель . В результате выполнения данных операций получаем функцию . Граф алгоритма БПФ с прореживанием по времени представлен ниже.
Рис.7. Граф алгоритма БПФ с прореживанием по времени при делении исходного сигнала на четные и нечетные отсчеты
Из полученного графа видно, что при делении исходного сигнала пополам для вычисления функции , которая определена на частотном интервале, требуется около комплексных умножений, т.е. вдвое меньше по сравнению с прямым вычислением. Операцию разбиения можно повторить, вычисляя вместо — отсчетного ДПФ два — отсчетных ДПФ и сокращая объем вычислений приблизительно в два раза. Эту рекурсию можно продолжать, пока возможно разбить входную последовательность на две.
На структурной схеме базовую операцию сложения и вычитания с умножением одного из компонентов на экспоненциальный множитель принято показывать сигнальным графом, который в цифровой технике называется «бабочкой».
Рис.8. Операция «бабочка», используемая при реализации алгоритма БПФ
Сигнальный граф показывает каким образом два входных числа А и В объединяются для получения двух выходных чисел X и Y. Изображенный на графе множитель со стрелкой обозначает один из двух компонентов, который умножается на экспоненциальный множитель.
Рассмотрим алгоритм БПФ с прореживанием по частоте. В качестве исходных данных задан N-отсчетный сигнал . Исходный сигнал разобьём пополам на два массива чисел с — отсчетными сигналами.
В результате функция , которая определяется на частотном интервале, будет определяться следующим соотношением:
Последнее выражение можно преобразовать в следующий вид:
В результате можно записать два выражения для четных и нечетных отсчетов:
Таким образом, алгоритм вычисления заключается в разбиении входного сигнала пополам с образованием двух массивов чисел и . После этого выполняются базовые операции сложения и вычитания с умножением двух компонентов на экспоненциальный множитель . На заключительном шаге рассчитывается ДПФ для четных и нечетных отсчетов с объединением результатов расчета. Граф алгоритма БПФ с прореживанием по частоте представлен ниже.
Рис.9. Граф алгоритма БПФ с прореживанием по частоте при делении исходного сигнала пополам
Из полученного графа видно, что при делении исходного сигнала пополам для вычисления функции , которая определена на частотном интервале, требуется около комплексных умножений, т.е. вдвое меньше по сравнению с прямым вычислением. Операцию разбиения можно повторить, представляя вместо — отсчетного ДПФ два — отсчетных ДПФ и сокращая объем вычислений приблизительно в два раза. Эту рекурсию можно продолжать, пока возможно разбить входную последовательность на две.
Основное отличие рассмотренных алгоритмов быстрого преобразования Фурье заключается в последовательности выполнения базовой операции: в алгоритме БПФ с прореживанием по времени комплексное умножение выполняется перед операцией вычитания, а в алгоритме БПФ с прореживанием по частоте комплексное умножение выполняется после операции вычитания. Рассмотренные алгоритмы быстрого преобразования Фурье получили наибольшее распространение из-за их высокой эффективности и относительной простоты программной реализации.
В обоих рассмотренных алгоритмах быстрого преобразования Фурье для вычисления функции , которая определена на частотном интервале, из заданного дискретного сигнала с N-количеством значений требуется выполнить операций комплексного умножения, сложения и вычитания.
Для того, чтобы добавить Ваш комментарий к статье, пожалуйста, зарегистрируйтесь на сайте.
Фурье, преобразование. Быстрое преобразование Фурье. Дискретное преобразование Фурье
Преобразование Фурье – преобразование, сопоставляющее функции некой вещественной переменной. Данная операция выполняется каждый раз, когда мы воспринимаем различные звуки. Ухо производит автоматическое «вычисление», выполнить которое наше сознание способно только после изучения соответствующего раздела высшей математики. Орган слуха у человека строит преобразование, в результате которого звук (колебательное движение условных частиц в упругой среде, которые распространяются в волновом виде в твердой, жидкой или газообразной среде) предоставляется в виде спектра последовательно идущих значений уровня громкости тонов разной высоты. После этого мозг превращает данную информацию в привычный всем звук.
Математическое преобразование Фурье
Преобразование звуковых волн или других колебательных процессов (от светового излучения и океанского прилива и до циклов звездной или солнечной активности) можно проводить и с помощью математических методов. Так, пользуясь данными приемами, можно разложить функции, представив колебательные процессы набором синусоидальных составляющих, то есть волнообразных кривых, которые переходят от минимума к максимуму, затем снова к минимуму, подобно морской волне. Преобразование Фурье – преобразование, функция которого описывает фазу или амплитуду каждой синусоиды, отвечающей определенной частоте. Фаза представляет собой начальную точку кривой, а амплитуда – ее высоту.
Преобразование Фурье (примеры приведены на фото) является весьма мощным инструментарием, который применяется в разнообразных областях науки. В отдельных случаях он используется в качестве средства решения довольно сложных уравнений, которые описывают динамические процессы, возникающие под воздействием световой, тепловой или электрической энергии. В иных случаях он позволяет определять регулярные составляющие в сложных колебательных сигналах, благодаря этому можно верно интерпретировать различные экспериментальные наблюдения в химии, медицине и астрономии.
Историческая справка
Первым человеком, применившим данный метод, стал французский математик Жан Батист Фурье. Преобразование, названное впоследствии его именем, изначально использовалось для описания механизма теплопроводности. Фурье всю свою сознательную жизнь занимался изучением свойств тепла. Он внес огромный вклад в математическую теорию определения корней алгебраических уравнений. Фурье являлся профессором анализа в Политехнической школе, секретарем Института египтологии, состоял на императорской службе, на которой отличился во время строительства дороги на Турин (под его руководством было осушено более 80 тысяч квадратных километров малярийных болот). Однако вся эта активная деятельность не помешала ученому заниматься математическим анализом. В 1802 году им было выведено уравнение, которое описывает распространение тепла в твердых телах. В 1807 году ученый открыл метод решения данного уравнения, которое и получило название «преобразование Фурье».
Анализ теплопроводности
Ученый применил математический метод для описания механизма теплопроводности. Удобным примером, в котором не возникает трудностей с вычислением, является распространение тепловой энергии по железному кольцу, погруженному одной частью в огонь. Для проведения опытов Фурье накалял докрасна часть этого кольца и закапывал его в мелкий песок. После этого проводил замеры температуры на противоположной его части. Первоначально распределение тепла является нерегулярным: часть кольца — холодная, а другая — горячая, между данными зонами можно наблюдать резкий градиент температуры. Однако в процессе распространения тепла по всей поверхности металла она становится более равномерной. Так, вскоре данный процесс приобретает вид синусоиды. Сначала график плавно нарастает и так же плавно убывает, точно по законам изменения функции косинуса или синуса. Волна постепенно выравнивается и в результате температура становится одинаковой на всей поверхности кольца.
Автор данного метода предположил, что начальное нерегулярное распределение вполне можно разложить на ряд элементарных синусоид. Каждая из них будет иметь свою фазу (первоначальное положение) и свой температурный максимум. При этом каждая такая компонента изменяется от минимума к максимуму и обратно на полном обороте вокруг кольца целое число раз. Составляющая, имеющая один период, была названа основной гармоникой, а значение с двумя и более периодами – второй и так далее. Так, математическая функция, которая описывает температурный максимум, фазу или позицию называет преобразованием Фурье от функции распределения. Ученый свел единую составляющую, которая трудно поддается математическому описанию, к удобному в обращении инструменту – рядам косинуса и синуса, в сумме дающим исходное распределение.
Суть анализа
Применяя данный анализ к преобразованию распространения тепла по твердому предмету, имеющему кольцевую форму, математик рассудил, что повышение периодов синусоидальной компоненты приведет к ее быстрому затуханию. Это хорошо прослеживается на основной и второй гармониках. В последней температура дважды достигает максимального и минимального значений на одном проходе, а в первой — только один раз. Получается, что расстояние, преодолеваемое теплом во второй гармонике, будет вдвое меньше, чем в основной. Кроме того, градиент во второй также будет вдвое круче, чем у первой. Следовательно, поскольку более интенсивный тепловой поток проходит расстояние вдове меньшее, то данная гармоника будет затухать в четыре раза быстрее, чем основная, как функция времени. В последующих данный процесс будет проходить еще быстрее. Математик считал, что данный метод позволяет рассчитать процесс первоначального распределения температуры во времени.
Вызов современникам
Алгоритм преобразования Фурье стал вызовом теоретическим основам математики того времени. В начале девятнадцатого века большинство выдающихся ученых, в том числе и Лагранж, Лаплас, Пуассон, Лежандр и Био, не приняли его утверждение о том, что начальное распределение температуры раскладывается на составляющие в виде основной гармоники и более высокочастотные. Однако академия наук не могла проигнорировать результаты, полученные математиком, и удостоила его премии за теорию законов теплопроводности, а также проведение сравнения ее с физическими экспериментами. В подходе Фурье главное возражение вызывал тот факт, что разрывная функция представлена суммой нескольких синусоидальных функций, которые являются непрерывными. Ведь они описывают разрывающиеся прямые и кривые линии. Современники ученого никогда не сталкивались с подобной ситуацией, когда разрывные функции описывались комбинацией непрерывных, таких как квадратичная, линейная, синусоида либо экспонента. В том случае, если математик был прав в своих утверждениях, то сумма бесконечного ряда тригонометрической функции должна сводиться к точной ступенчатой. В то время подобное утверждение казалось абсурдным. Однако, несмотря на сомнения, некоторые исследователи (например Клод Навье, Софи Жермен) расширили сферу исследований и вывели их за пределы анализа распределения тепловой энергии. А математики тем временем продолжали мучиться вопросом о том, может ли сумма нескольких синусоидальных функций сводиться к точному представлению разрывной.
200-летняя история
Данная теория развивалась на протяжении двух столетий, на сегодняшний день она окончательно сформировалась. С ее помощью пространственные или временные функции разбиваются на синусоидальные составляющие, которые имеют свою частоту, фазу и амплитуду. Данное преобразование получается двумя разными математическими методами. Первый из них применяется в том случае, когда исходная функция является непрерывной, а второй – в том случае, когда она представлена множеством дискретных отдельных изменений. Если выражение получено из значений, которые определены дискретными интервалами, то его можно разбить на несколько синусоидальных выражений с дискретными частотами – от наиболее низкой и далее вдвое, втрое и так далее выше основной. Такую сумму принято называть рядом Фурье. Если начальное выражение задано значением для каждого действительного числа, то его можно разложить на несколько синусоидальных всех возможных частот. Его принято называть интегралом Фурье, а решение подразумевает под собой интегральные преобразования функции. Независимо от способа получения преобразования, для каждой частоты следует указывать два числа: амплитуду и частоту. Данные значения выражаются в виде единого комплексного числа. Теория выражений комплексных переменных совместно с преобразованием Фурье позволила проводить вычисления при конструировании различных электрических цепей, анализ механических колебаний, изучение механизма распространения волн и другое.
Преобразование Фурье сегодня
В наши дни изучение данного процесса в основном сводится к нахождению эффективных методов перехода от функции к ее преобразованному виду и обратно. Такое решение называется прямое и обратное преобразование Фурье. Что это значит? Для того чтобы определить интеграл и произвести прямое преобразование Фурье, можно воспользоваться математическими методами, а можно и аналитическими. Несмотря на то что при их использовании на практике возникают определенные трудности, большинство интегралов уже найдены и внесены в математические справочники. С помощью численных методов можно рассчитывать выражения, форма которых основывается на экспериментальных данных, либо функции, интегралы которых в таблицах отсутствуют и их сложно представить в аналитической форме.
До появления вычислительной техники расчеты таких преобразований были весьма утомительными, они требовали ручного выполнения большого количества арифметических операций, которые зависели от числа точек, описывающих волновую функцию. Для облегчения расчетов сегодня существуют специальные программы, позволившие реализовать новые аналитические методы. Так, в 1965 году Джеймс Кули и Джон Тьюки создали программное обеспечение, получившее известность как «быстрое преобразование Фурье». Оно позволяет экономить время проведения расчетов за счет уменьшения числа умножений при анализе кривой. Метод «быстрое преобразование Фурье» основан на делении кривой на большое число равномерных выборочных значений. Соответственно количество умножений снижается вдвое при таком же снижении количества точек.
Применение преобразования Фурье
Данный процесс используется в различных областях науки: в теории чисел, физике, обработке сигналов, комбинаторике, теории вероятности, криптографии, статистике, океанологии, оптике, акустике, геометрии и других. Богатые возможности его применения основаны на ряде полезных особенностей, которые получили название «свойства преобразования Фурье». Рассмотрим их.
1. Преобразование функции является линейным оператором и с соответствующей нормализацией является унитарным. Данное свойство известно как теорема Парсеваля, или в общем случае теорема Планшереля, или дуализм Понтрягина.
2. Преобразование является обратимым. Причем обратный результат имеет практически аналогичную форму, как и при прямом решении.
3. Синусоидальные базовые выражения являются собственными дифференцированными функциями. Это означает, что такое представление изменяет линейные уравнения с постоянным коэффициентом в обычные алгебраические.
4. Согласно теореме «свертки», данный процесс превращает сложную операцию в элементарное умножение.
5. Дискретное преобразование Фурье может быть быстро рассчитано на компьютере с использованием «быстрого» метода.
Разновидности преобразования Фурье
1. Наиболее часто данный термин используется для обозначения непрерывного преобразования, предоставляющего любое квадратично интегрируемое выражение в виде суммы комплексных показательных выражений с конкретными угловыми частотами и амплитудами. Данный вид имеет несколько различных форм, которые могут отличаться постоянными коэффициентами. Непрерывный метод включает в себя таблицу преобразований, которую можно найти в математических справочниках. Обобщенным случаем является дробное преобразование, посредством которого данный процесс можно возвести в необходимую вещественную степень.
2. Непрерывный способ является обобщением ранней методики рядов Фурье, определенных для различных периодических функций или выражений, которые существуют в ограниченной области и представляют их как ряды синусоид.
3. Дискретное преобразование Фурье. Этот метод используется в компьютерной технике для проведения научных расчетов и для цифровой обработки сигналов. Для проведения данного вида расчетов требуется иметь функции, определяющие на дискретном множестве отдельные точки, периодические или ограниченные области вместо непрерывных интегралов Фурье. Преобразование сигнала в таком случае представлено как сумма синусоид. При этом использование «быстрого» метода позволяет применять дискретные решения для любых практических задач.
4. Оконное преобразование Фурье является обобщенным видом классического метода. В отличие от стандартного решения, когда используется спектр сигнала, который взят в полном диапазоне существования данной переменной, здесь особый интерес представляет всего лишь локальное распределение частоты при условии сохранения изначальной переменной (время).
5. Двумерное преобразование Фурье. Данный метод используется для работы с двумерными массивами данных. В таком случае сначала преобразование производится в одном направлении, а затем — в другом.
Заключение
Сегодня метод Фурье прочно закрепился в различных областях науки. Например, в 1962 году была открыта форма двойной ДНК-спирали с использованием анализа Фурье в сочетании с дифракцией рентгеновских лучей. Последние фокусировались на кристаллах волокон ДНК, в результате изображение, которое получалось при дифракции излучения, фиксировались на пленке. Данная картинка дала информацию о значении амплитуды при использовании преобразования Фурье к данной кристаллической структуре. Данные о фазе получили путем сопоставления дифракционной карты ДНК с картами, которые получены при анализе подобных химических структур. В результате биологи восстановили кристаллическую структуру — исходную функцию.
Преобразования Фурье играют огромную роль в изучении космического пространства, физики полупроводниковых материалов и плазмы, микроволновой акустике, океанографии, радиолокации, сейсмологии и медицинских обследованиях.
Предсказывающие индикаторы на Форекс. Тест опережающих индикаторов.
Многие начинающие трейдеры в самом начале обучения попадают в ловушку стереотипов, изложенных в популярной литературе по техническому анализу, одним из которых является постулат о том, что «история повторяется».
Разумеется, некоторые модели действительно не меняют своей формы и пропорций уже около века, но сегодня речь пойдёт про предсказывающие индикаторы, об которые спотыкается практически каждый начинающий спекулянт. В целом, всю совокупность индикаторов предсказателей можно разделить на две группы:
- абсолютно бесполезные варианты, к которым можно отнести 90% всех платных и бесплатных алгоритмов;
- индикаторы подтверждения, в основу которых заложены математические законы.
Для того, чтобы увести читателей от замкнутого круга бесконечного тестирования и поисков, сразу рассмотрим первую группу. Очень часто на форумах можно встретить темы, посвящённые индикаторам XprofuterOverlay и CTG StructureX. Причем, порой удивляет степень настойчивости некоторых пользователей, которые готовы месяцами тестировать данные алгоритмы.
На рисунке выше представлен пример сценария, который нарисовал упомянутый предсказывающий индикатор. Да, это не лексическая ошибка, он именно нарисовал картинку, а не проанализировал рынок, так как просто перевернул и спроецировал историю на будущее. Чтобы не быть голословными, проекция на графике специально была перевёрнута и наложена на исторические котировки.
Справедливости ради отметим, что индикаторы будущего под общим названием CTG StructureX (их несколько версий) не до такой степени абсурдны, можно сказать, даже иногда полезны, но способ их практического применения не имеет ничего общего с изначальной целью разработки. В настройках самой популярной версии обязательно необходимо настроить несколько параметров:
- Xdist – горизонт прогнозирования (количество смоделированных свечей);
- Bars1 – глубина истории, на которой индикатор ищет точки отсчёта для построения структур.
Фактически, предсказывающий индикатор CTG- StructureX отличается от своего примитивного коллеги XprofuterOverlay тем, что выдаёт не просто зеркальное отражение истории, а пытается найти в прошлом похожие на текущую ситуацию формации, запоминает несколько прогнозов, усредняет их и только после этого выводит на график смоделированные бары. Например, для фунта стерлингов возможный сценарий представлен ниже:
Рекомендую обратить внимание на вот эти индикаторы:
Как уже упоминалось, данный алгоритм практически бесполезен для прогнозирования точных цен в будущем, но если рассчитанные бары рассматривать не в качестве конкретной рекомендации, а лишь как вероятность движения цены, то можно попробовать построить интересные стратегии. В частности, если совместить подобный подход с временными зонами Фибоначчи, получится достаточно надёжная методика определения точки и силы разворота тренда.
Тем не менее, даже не смотря на возможные комбинации с другими стратегиями, перечисленные индикаторы будущего на Форекс всё равно остаются «баловством», так как просто подгоняют будущее под прошлое без серьёзных на то оснований. В данном ключе перейдём к принципиально иному алгоритму под названием Fourier Extrapolator.
Как можно понять из названия, авторы попытались применить спектральный анализ к валютному рынку. Формула в упомянутый алгоритм заложена нетривиальная, если говорить кратко, то данный индикатор будущего анализирует амплитуды колебаний на исторических участках, для каждого из них определяет гармоники третьего порядка, проецирует их на будущее (на один период) и выводит средний прогноз на график. Чтобы не путать читателя, обратим внимание на рабочее окно:
Таким образом, трейдер не имеет никакого отношения к сложным вычислениям, достаточно лишь задать период расчёта и Fourier Extrapolator сам опубликует основной сценарий на чистой математике без лишних линий и объектов. Ниже перечислим основные сильные стороны, которые делают преобразование Фурье намного эффективнее, рассмотренных предсказателей в начале статьи:
- размеченный однажды прогноз не перерисовывается;
- в основу заложены фундаментальные законы, которые, пусть и с большим допущением, могут работать на финансовых рынках;
- практически не грузит терминал.
К слову, все перечисленные плюсы Fourier Extrapolator являются характерными минусами для большинства других предсказывающих индикаторов, например, CTG-StructureX ужасно тормозит и временами приводит к зависанию терминала, плюс не фиксирует свои прогнозы и регулярно их перерисовывает. Поэтому, если уж выбирать индикатор будущего, то лучше сразу остановиться на преобразовании Фурье, которое позволит избежать множества проблем.
Варианты стоп ордеров на рынке Форекс.
Подробности об ордерах Sell Stop и Buy Stop, а так же их применение в трейдинге.
Хороший бесплатный самоучитель для Форекс-трейдеров в форме видеоуроков.
© 2013-2020 RATINGS Forex, Все права защищены
АНАЛИЗ ФУРЬЕ: БЫСТРОЕ ПРЕОБРАЗОВАНИЕ ФУРЬЕ
Анализ Фурье считается идеальным инструментом обнаружения циклических явлений в физике. Аналитик, обладающий достаточным образованием и хорошим запасом математических знаний, скорее всего, захочет применить метод и к рыночным данным. Основная сложность заключается в заметной хаотичности рыночных данных, отличающей их от упорядоченных данных естественных наук. Рынок мало похож на часовой механизм. Несмотря на то что с помощью анализа Фурье мы в состоянии получить аккуратные и наукообразные результаты, мы не можем полностью положиться на лежащие в основе метода предположения, а значит, не имеем возможности судить о точности прогнозов. Проведенное нами исследование показало, что применение анализа Фурье к циклическим явлениям финансового рынка оказывается не слишком плодотворным.
По мнению Ричарда Може и Джека Швагера («Швагер о фьючерсах и техническом анализе», John Wiley & Sons, Inc., New York, 1996, 775 стр., стр. 591-592), «цикл – это только одна из сил, ее действие нередко сводится на нет другими влияниями рынка. Кроме того, даже самый мощный цикл в реальности будет отличаться от своей математической модели. Именно поэтому применение строгих правил проецирования циклов для принятия торговых решений (в отсутствие прочих методов) – верный путь к катастрофе».
Преобразование Фурье (ПФ) – это математическая операция, позволяющая представить некоторый временной процесс как совокупность волн различной частоты. Преобразование Фурье предназначено для изучения повторяющихся явлений. Операция названа по имени французского математика и физика Жана Батиста Жозефа Фурье (1768-1830), чьи исследования тепловых явлений оказали заметное влияние на математическую физику и функциональный анализ. В 1822 году Фурье первым представил любую математическую функцию как сумму бесконечного количества синусоидальных волн. ПФ разлагает функцию на синусоиды различной частоты, которые при сложении дают исходную фигуру. Преобразование Фурье – это интегральное преобразование, ставящее в соответствие одной функции f другую функцию F. При определенных условиях ПФ может быть обращено. Преобразование Фурье для f(x), может быть записано как
Быстрое преобразование Фурье (БПФ) – это эффективный алгоритм, позволяющий подсчитать численные значения преобразования Фурье. Быстрое преобразование составлено таким образом, что позволяет совершить вычисления за несколько секунд. Фазовые отношения в БПФ не учитываются, значение имеют только длина цикла и амплитуда. Преимущество БПФ заключается в способности обнаруживать доминирующий цикл во временных рядах, таких, например, как цены на акции.
Знаете ли Вы, что: через брокерские организации Intrade.bar и Binary.com Вы можете торговать бинарными опционами в режиме 24х7 (без выходных).
Быстрое преобразование Фурье сконструировано на основе гипотезы о том, что любые конечные, упорядоченные во времени группы данных могут быть аппроксимированы определенной комбинацией синусоидальных волн. Каждая синусоидальная волна имеет специфическую частоту, амплитуду и фазу. Поскольку БПФ было разработано для периодических данных, в которых отсутствует тренд, а цены на акции являются данными с трендовой составляющей, из необработанных ценовых данных должен быть в первую очередь удален тренд. Как правило, это делают с помощью метода линейной регрессии. Заметим также, что данные о ценах на акции не являются полностью периодическими, поскольку ценные бумаги не торгуются по выходным и праздникам. Разрывы этого рода должны быть удалены путем использования сглаживающей функции, например функции «окно Хамминга», основанной на двоичном коде, корректирующем трансмиссионные ошибки на основании гипотезы о том, что вероятность очень высокой доли ошибок ничтожно мала.
Компьютерная программа MetaStock с помощью быстрого преобразования Фурье выделяет доминирующий цикл из ценовых данных и показывает период и амплитуду (силу) цикла. Скопируйте следующую формулу в окно создания индикаторов (Indicator Builder) программы MetaStock:
Максимум на полученном графике (по оси Y) является «типичной» длиной доминирующего цикла. Опыт показывает, что величину продолжительности цикла не следует интерпретировать как буквальное указание на количество дней; речь, скорее, идет о приблизительном значении – плюс-минус несколько дней, поскольку рыночные циклы имеют обыкновение заметно варьироваться.
На своем веб-сайте (www.mesasoftware.com) Джон Ф. Элерс, профессиональный инженер и исследователь рыночных циклов, размещает информацию о правилах корректного использования преобразования Фурье: проведение данной операции, в первую очередь, требует наличия относительно длинной базы данных, причем данных стационарных. На коротких базах данных, по замечанию этого специалиста, «использование быстрого преобразования Фурье для совершения сделок нежелательно». Для идентификации коротких циклов на небольших базах данных Элерс предлагает использовать разработанную им самим компьютерную программу на основе метода спектрального анализа максимальной энтропии (MESA), являющуюся для данных целей инструментом более эффективным, нежели преобразование Фурье.
Используя данные о дневных ценах закрытия промышленного индекса Доу-Джонса за последние 100 лет – с 1900 по 2000 годы, а также формулу БПФ для программы MetaStock, получаем длину доминирующего цикла для промышленного индекса Доу-Джонса за истекшее столетие, равную приблизительно 22,57 дня (плюс-минус несколько дней).
В столбце 3 приведенной таблицы мы проводим БПФ на базе дневных цен закрытия промышленного индекса Доу-Джонса. Удаление тренда из данных включено здесь в нашу формулу БПФ.
В столбце 4 проводим предварительное удаление тренда из текущих значений промышленного индекса Доу-Джонса, деля дневную цену закрытия на ЭСС цены закрытия длиной 170 дней; затем мы тестируем полученное отношение (см. раздел Экспоненциальное скользящее среднее). Формула БПФ с помощью линейной регрессии удаляет тренд из этого отношения цены закрытия и ее экспоненциального скользящего среднего. Таким образом, необработанные данные дважды подвергаются операции удаления тренда. Исследования, проведенные специалистами, позволяют предположить, что второй способ (метод, при котором тренд удаляется дважды) дает более стабильные и менее подверженные вариациям данные о длине цикла.
Из таблицы видно, как длина цикла, полученная в ходе проведения БПФ на разных временных периодах, изменялась в течение последних 70 лет. Мы разбили базу данных на 14 перекрывающихся периодов. Все тестируемые периоды заканчиваются 8 сентября 2000 года. Каждый период начинается 2 января обозначенного в таблице года. Проведя тестирование самого длинного окна (начало периода 02.01.1930), мы затем каждый раз смещались на 5 лет вперед, проверяя таким образом, как именно изменение начальной даты тестового окна повлияет на длину доминирующего цикла.
H Практическое применение преобразования Фурье для обработки сигналов в черновиках Из песочницы
Книги и публикации по цифровой обработке сигналов пишут авторы зачастую не догадывающиеся и не понимающие задач, стоящих перед разработчиками. Особенно это касается систем, работающих в реальном времени. Эти авторы отводят себе скромную роль бога, существующего вне времени и пространства, что вызывает некоторое недоумение у читателей подобной литературы. Данная публикация имеет целью развеять недоумения, возникающие у большинства разработчиков, и помочь им преодолеть «порог вхождения», для этих целей в тексте сознательно используется аналогии и терминология сферы программирования.
Данный опус не претендует на полноту и связность изложения.
Добавлено после прочтения комментариев.
Публикаций о том как делать БПФ немеряно, а о том как сделать БПФ, преобразовать спектр, и собрать сигнал заново, да еще и в реальном времени, явно не хватает. Автор пытается восполнить этот пробел.
Часть первая, обзорная
Существуют два основных способа построения дискретных линейных динамических систем. В литературе, такие системы принято называть цифровыми фильтрами, которые подразделяются на два основных типа: фильтры с конечной импульсной характеристикой (КИХ) и фильтры с бесконечной импульсной характеристикой (БИХ).
Алгоритмическая сущность фильтра с КИХ заключается в дискретном вычислении интеграла свертки:
Где x(t) – входной сигнал
y(t) – выходной сигнал
h(t) – импульсная характеристика фильтра или реакция фильтра на дельта функцию. Импульсная характеристика является обратным преобразованием Фурье комплексной частотной характеристики фильтра K(f).
Для формирования ясной картины у читателя, приведем пример дискретного вычисления интеграла свертки на языке С в реальном времени.
Вызывая данную функцию через определенные интервалы времени T и передавая ей в качестве аргумента входной сигнал, на выходе мы получим выходной сигнал, соответствующий реакции фильтра с импульсной характеристикой вида:
h(t)=1 при 0 >alfa);, но в этом случае происходит потеря alfa значащих разрядов. Рекуррентное выражение фильтра, из примера кода, построено таким образом, чтобы избежать потери значащих разрядов. Именно конечная точность вычислений может испортить всю прелесть цифрового фильтра с бесконечной импульсной характеристикой. Особенно это заметно на фильтрах высоких порядков, отличающихся высокой добротностью. В реальных динамических системах такая проблема не возникает, наша Матрица производит вычисления с невероятной для нас точностью.
Синтезу подобных фильтров посвящена масса литературы, также имеются готовые программные продукты (см. выше).
Часть вторая. Фурье – фильтр
Из вузовских курсов (у вашего покорного слуги это был курс ОТЭЦ) многие собравшие помнят два основных подхода к анализу линейных динамических систем: анализ во временной области и анализ в частотной области. Анализ во временной области — это решение дифференциальных уравнений, интегралы свертки и Дюамеля. Эти методы анализа дискретно воплотились в цифровых фильтрах БИХ и КИХ.
Но существует частотный подход к анализу линейных динамических систем. Иногда его называют операторным. В качестве операторов используются преобразование Фурье, Лапласа и т.п. Далее мы будем говорить только о преобразовании Фурье.
Данный метод анализа не получил широкого распространения при построении цифровых фильтров. Автору не удалось найти вменяемых практических рекомендаций по построению подобных фильтров на русском языке. Единственное краткое упоминание такого фильтра в практической литературе [Рабинер Л., Гоулд Б., Теория и применение цифровой обработки сигналов 1978], но в данной книге рассмотрение подобного фильтра очень поверхностно. В указанной книге данная схема построения фильтра называется: «свертка в реальном времени методом БПФ», что, по моему скромному мнению, совершенно не отражает сути, название должно быть коротким, иначе времени на отдых не останется.
Реакция линейной динамической системы есть обратное преобразование Фурье от произведения изображения по Фурье входного сигнала x(t) на комплексный коэффициент передачи K(f):
В практическом плане, данное аналитическое выражение предполагает следующий порядок действий: берем преобразование Фурье от входного сигнала, умножаем результат на комплексный коэффициент передачи, выполняем обратное преобразование Фурье, результатом которого является выходной сигнал. В реальном дискретном времени такой порядок действий выполнить невозможно. Как брать интеграл по времени от минус до плюс бесконечности?! Его можно взять только находясь вне времени…
В дискретном мире для выполнения преобразования Фурье существует инструмент — алгоритм быстрого преобразования Фурье (БПФ). Именно его мы и будем использовать при реализации нашего Фурье-фильтра. Аргументом функции БПФ является массив временных отсчетов из 2^n элементов, результатом два массива длинной 2^n элементов соответствующие действительной и мнимой части преобразования Фурье. Дискретной особенностью алгоритма БПФ является то, что входной сигнал считается периодичным с интервалом 2^n. Это накладывает некоторые ограничения на алгоритм Фурье-фильтра. Если взять последовательность выборок входного сигнала, провести от них БПФ, умножить результат БПФ на комплексный коэффициент передачи фильтра и выполнить обратное преобразование …ничего получится! Выходной сигнал будет иметь огромные нелинейные искажения в окрестности стыков выборок.
Для решения этой проблемы необходимо применить два приема:
- 1. Выборки необходимо обрабатывать преобразованием Фурье с перекрытием. То есть, каждая последующая выборка должно содержать часть предыдущей. В идеальном случае выборки должны перекрываться на (2^n-1) отсчетов, но это требует огромных вычислительных затрат. На практике, с лихвой, достаточно трехчетвертного (2^n-2^(n-2)), половинного (2^(n-1)) и даже четвертного перекрытия (2^(n-2)).
- 2. Результаты обратного преобразования Фурье, для получения выходного сигнала, необходимо, перед наложение друг на друга, умножить на весовую функцию (массив весовых коэффициентов). Весовая функция должна удовлетворять следующим условиям:
- 2.1 Равна нулю везде, кроме интервала 2^n.
- 2.2 На краях интервала стремится к нулю.
- 2.3 И, самое главное, сумма весовых функций Fv(t), сдвинутых на интервал перекрытия k должна быть постоянна:
Такие функции широко применяются в технике цифровой обработки сигналов, и называть их принято — окнами. По скромному мнению автора лучшим, с практической точки зрения, является окно имени Хана:
На рисунке приведены графики иллюстрирующие свойства окна Хана длинной 2^n=256. Экземпляры окна построены с половинным перекрытием k=128. Как видно все оговоренные выше свойства имеются в наличии.
По просьбам трудящихся, на следующем рисунке приведена схема вычислений Фурье-фильтра, при длине выборки 2^n=8, количество выборок 3. На подобных рисунках очень сложно отобразить процесс вычислений, особенно тяжело показать его цикличность, поэтому мы и ограничились количеством выборок равным трем.
Входной сигнал разбивается на блоки длинной 2^n=8 с перекрытием 50%, от каждого блока берется БПФ, результаты БПФ подвергаются нужной трансформации, берется обратное БПФ, результат обратного БПФ скалярно умножается на окно, после умножения блоки складываются с перекрытием.
При выполнение трансформаций спектра, не стоит забывать о главном свойстве массива БПФ действительных сигналов, первая половина массива БПФ комплексно сопряжена со второй половиной, т.е Re[i]=Re[(1 реальное время, БПФ, преобразование фурье, обработка сигналов
Fast Fourier transform
A fast Fourier transform (FFT) is an algorithm that computes the discrete Fourier transform (DFT) of a sequence, or its inverse ( >[1] This operation is useful in many fields, but computing it directly from the definition is often too slow to be practical. An FFT rap >[2] As a result, it manages to reduce the complexity of computing the DFT from O ( N 2 ) <\displaystyle O(N^<2>)> , which arises if one simply applies the definition of DFT, to O ( N log N ) <\displaystyle O(N\log N)>, where N <\displaystyle N>is the data size. The difference in speed can be enormous, especially for long data sets where N may be in the thousands or millions. In the presence of round-off error, many FFT algorithms are much more accurate than evaluating the DFT definition directly or indirectly. There are many different FFT algorithms based on a wide range of published theories, from simple complex-number arithmetic to group theory and number theory.
Fast Fourier transforms are w >[1] In 1994, Gilbert Strang described the FFT as «the most important numerical algorithm of our lifetime», [3] [4] and it was included in Top 10 Algorithms of 20th Century by the IEEE magazine Computing in Science & Engineering. [5]
The best-known FFT algorithms depend upon the factorization of N, but there are FFTs with O(N log N) complexity for all N, even for prime N. Many FFT algorithms only depend on the fact that e − 2 π i / N <\displaystyle e^<-2\pi i/N>> is an N-th primitive root of unity, and thus can be applied to analogous transforms over any finite field, such as number-theoretic transforms. Since the inverse DFT is the same as the DFT, but with the opposite sign in the exponent and a 1/N factor, any FFT algorithm can easily be adapted for it.
Contents
History [ edit ]
The development of fast algorithms for DFT can be traced to Gauss’s unpublished work in 1805 when he needed it to interpolate the orbit of astero >[6] [7] His method was very similar to the one published in 1965 by Cooley and Tukey, who are generally credited for the invention of the modern generic FFT algorithm. While Gauss’s work predated even Fourier’s results in 1822, he did not analyze the computation time and eventually used other methods to achieve his goal.
Between 1805 and 1965, some versions of FFT were published by other authors. Frank Yates in 1932 published his version called interaction algorithm, which prov >[8] Yates’ algorithm is still used in the field of statistical design and analysis of experiments. In 1942, G. C. Danielson and Cornelius Lanczos published their version to compute DFT for x-ray crystallography, a field where calculation of Fourier transforms presented a form >[9] [10] While many methods in the past had focused on reducing the constant factor for O ( N 2 ) <\displaystyle O(N^<2>)> computation by taking advantage of «symmetries», Danielson and Lanczos realized that one could use the «periodicity» and apply a «doubling trick» to get O ( N log N ) <\displaystyle O(N\log N)>runtime. [11]
James Cooley and John Tukey published a more general version of FFT in 1965 that is applicable when N is composite and not necessarily a power of 2. [12] Tukey came up with the >[13] Garwin gave Tukey’s >[14] Cooley and Tukey published the paper in a relatively short time of six months. [15] As Tukey did not work at IBM, the patentability of the idea was doubted and the algorithm went into the public domain, which, through the computing revolution of the next decade, made FFT one of the indispensable algorithms in digital signal processing.
Definition [ edit ]
To illustrate the savings of an FFT, cons >2 complex multiplications and N(N−1) complex additions, of which O ( N ) <\displaystyle O(N)>operations can be saved by eliminating trivial operations such as multiplications by 1, leaving about 30 million operations. On the other hand, the radix-2 Cooley–Tukey algorithm, for N a power of 2, can compute the same result with only (N/2)log2(N) complex multiplications (again, ignoring simplifications of multiplications by 1 and similar) and N log2(N) complex additions, in total about 30,000 operations — a thousand times less than with direct evaluation. In practice, actual performance on modern computers is usually dominated by factors other than the speed of arithmetic operations and the analysis is a complicated subject (see, e.g., Frigo & Johnson, 2005), [17] but the overall improvement from O ( N 2 ) <\displaystyle O(N^<2>)> to O ( N log N ) <\displaystyle O(N\log N)>remains.
Algorithms [ edit ]
Cooley–Tukey algorithm [ edit ]
By far the most commonly used FFT is the Cooley–Tukey algorithm. This is a div >[18] ).
This method (and the general >[12] but it was later discovered [1] that those two authors had independently re-invented an algorithm known to Carl Friedrich Gauss around 1805 [19] (and subsequently rediscovered several times in limited forms).
The best known use of the Cooley–Tukey algorithm is to div >[1] ). These are called the radix-2 and mixed-radix cases, respectively (and other variants such as the split-radix FFT have their own names as well). Although the basic idea is recursive, most traditional implementations rearrange the algorithm to avoid explicit recursion. Also, because the Cooley–Tukey algorithm breaks the DFT into smaller DFTs, it can be combined arbitrarily with any other algorithm for the DFT, such as those described below.
Other FFT algorithms [ edit ]
There are other FFT algorithms distinct from Cooley–Tukey.
Cornelius Lanczos did pioneering work on the FFT and FFS (fast Fourier sampling method) with G. C. Danielson (1940).
For N = N1N2 with coprime N1 and N2, one can use the prime-factor (Good–Thomas) algorithm (PFA), based on the Chinese remainder theorem, to factorize the DFT similarly to Cooley–Tukey but without the tw >[20] is a Cooley–Tukey-like factorization but with purely imaginary tw >[20] and QFT algorithms were proposed for power-of-two sizes, but it is possible that they could be adapted to general composite N. Bruun’s algorithm applies to arbitrary even composite sizes.) Bruun’s algorithm, in particular, is based on interpreting the FFT as a recursive factorization of the polynomial z N − 1, here into real-coefficient polynomials of the form z M − 1 and z 2M + az M + 1.
Another polynomial viewpoint is exploited by the Winograd FFT algorithm, [21] [22] which factorizes z N − 1 into cyclotomic polynomials—these often have coefficients of 1, 0, or −1, and therefore require few (if any) multiplications, so Winograd can be used to obtain minimal-multiplication FFTs and is often used to find efficient algorithms for small factors. Indeed, Winograd showed that the DFT can be computed with only O(N) irrational multiplications, leading to a proven achievable lower bound on the number of multiplications for power-of-two sizes; unfortunately, this comes at the cost of many more additions, a tradeoff no longer favorable on modern processors with hardware multipliers. In particular, Winograd also makes use of the PFA as well as an algorithm by Rader for FFTs of prime sizes.
Rader’s algorithm, exploiting the existence of a generator for the multiplicative group modulo prime N, expresses a DFT of prime size N as a cyclic convolution of (composite) size N−1, which can then be computed by a pair of ordinary FFTs via the convolution theorem (although Winograd uses other convolution methods). Another prime-size FFT is due to L. I. Bluestein, and is sometimes called the chirp-z algorithm; it also re-expresses a DFT as a convolution, but this time of the same size (which can be zero-padded to a power of two and evaluated by radix-2 Cooley–Tukey FFTs, for example), via the identity
Hexagonal Fast Fourier Transform aims at computing an efficient FFT for the hexagonally sampled data by using a new addressing scheme for hexagonal grids, called Array Set Addressing (ASA).
FFT algorithms specialized for real and/or symmetric data [ edit ]
In many applications, the input data for the DFT are purely real, in which case the outputs satisfy the symmetry
and efficient FFT algorithms have been designed for this situation (see e.g. Sorensen, 1987). [23] [24] One approach consists of taking an ordinary algorithm (e.g. Cooley–Tukey) and removing the redundant parts of the computation, saving roughly a factor of two in time and memory. Alternatively, it is possible to express an even-length real-input DFT as a complex DFT of half the length (whose real and imaginary parts are the even/odd elements of the original real data), followed by O(N) post-processing operations.
It was once believed that real-input DFTs could be more efficiently computed by means of the discrete Hartley transform (DHT), but it was subsequently argued that a specialized real-input DFT algorithm (FFT) can typically be found that requires fewer operations than the corresponding DHT algorithm (FHT) for the same number of inputs. [23] Bruun’s algorithm (above) is another method that was initially proposed to take advantage of real inputs, but it has not proved popular.
There are further FFT specializations for the cases of real data that have even/odd symmetry, in which case one can gain another factor of (roughly) two in time and memory and the DFT becomes the discrete cosine/sine transform(s) (DCT/DST). Instead of directly modifying an FFT algorithm for these cases, DCTs/DSTs can also be computed via FFTs of real data combined with O(N) pre/post processing.
Computational issues [ edit ]
Bounds on complexity and operation counts [ edit ]
Unsolved problem in computer science: |
A fundamental question of longstanding theoretical interest is to prove lower bounds on the complexity and exact operation counts of fast Fourier transforms, and many open problems remain. It is not even rigorously proved whether DFTs truly require Ω(N log N) (i.e., order N log N or greater) operations, even for the simple case of power of two sizes, although no algorithms with lower complexity are known. In particular, the count of arithmetic operations is usually the focus of such questions, although actual performance on modern-day computers is determined by many other factors such as cache or CPU pipeline optimization.
Following pioneering work by Winograd (1978), [21] a tight Θ(N) lower bound is known for the number of real multiplications required by an FFT. It can be shown that only 4 N − 2 log 2 2 N − 2 log 2 N − 4 <\displaystyle 4N-2\log _<2>^<2>N-2\log _<2>N-4> irrational real multiplications are required to compute a DFT of power-of-two length N = 2 m <\displaystyle N=2^
A tight lower bound is not known on the number of required additions, although lower bounds have been proved under some restrictive assumptions on the algorithms. In 1973, Morgenstern [27] proved an Ω(N log N) lower bound on the addition count for algorithms where the multiplicative constants have bounded magnitudes (which is true for most but not all FFT algorithms). This result, however, applies only to the unnormalized Fourier transform (which is a scaling of a unitary matrix by a factor of N <\displaystyle <\sqrt
A third problem is to minimize the total number of real multiplications and additions, sometimes called the «arithmetic complexity» (although in this context it is the exact count and not the asymptotic complexity that is being cons > 4 N log 2 N − 6 N + 8 <\displaystyle 4N\log _<2>N-6N+8> real multiplications and additions for N > 1. This was recently reduced to ∼ 34 9 N log 2 N <\displaystyle \sim <\frac <34><9>>N\log _<2>N> (Johnson and Frigo, 2007; [16] Lundy and Van Buskirk, 2007 [30] ). A slightly larger count (but still better than split radix for N≥256) was shown to be provably optimal for N≤512 under additional restrictions on the possible algorithms (split-radix-like flowgraphs with unit-modulus multiplicative factors), by reduction to a satisfiability modulo theories problem solvable by brute force (Haynal & Haynal, 2011). [31]
Most of the attempts to lower or prove the complexity of FFT algorithms have focused on the ordinary complex-data case, because it is the simplest. However, complex-data FFTs are so closely related to algorithms for related problems such as real-data FFTs, discrete cosine transforms, discrete Hartley transforms, and so on, that any improvement in one of these would immediately lead to improvements in the others (Duhamel & Vetterli, 1990). [32]
Approximations [ edit ]
All of the FFT algorithms discussed above compute the DFT exactly (i.e. neglecting floating-point errors). A few «FFT» algorithms have been proposed, however, that compute the DFT approximately, with an error that can be made arbitrarily small at the expense of increased computations. Such algorithms trade the approximation error for increased speed or other properties. For example, an approximate FFT algorithm by Edelman et al. (1999) [33] achieves lower communication requirements for parallel computing with the help of a fast multipole method. A wavelet-based approximate FFT by Guo and Burrus (1996) [34] takes sparse inputs/outputs (time/frequency localization) into account more efficiently than is possible with an exact FFT. Another algorithm for approximate computation of a subset of the DFT outputs is due to Shentov et al. (1995). [35] The Edelman algorithm works equally well for sparse and non-sparse data, since it is based on the compressibility (rank deficiency) of the Fourier matrix itself rather than the compressibility (sparsity) of the data. Conversely, if the data are sparse—that is, if only K out of N Fourier coefficients are nonzero—then the complexity can be reduced to O(K log(N)log(N/K)), and this has been demonstrated to lead to practical speedups compared to an ordinary FFT for N/K > 32 in a large-N example (N = 2 22 ) using a probabilistic approximate algorithm (which estimates the largest K coefficients to several decimal places). [36]
Accuracy [ edit ]
Even the «exact» FFT algorithms have errors when finite-precision floating-point arithmetic is used, but these errors are typically quite small; most FFT algorithms, e.g. Cooley–Tukey, have excellent numerical properties as a consequence of the pairwise summation structure of the algorithms. The upper bound on the relative error for the Cooley–Tukey algorithm is O(ε log N), compared to O(εN 3/2 ) for the naïve DFT formula, [18] where ε is the machine floating-point relative precision. In fact, the root mean square (rms) errors are much better than these upper bounds, being only O(ε √ log N ) for Cooley–Tukey and O(ε √ N ) for the naïve DFT (Schatzman, 1996). [37] These results, however, are very sensitive to the accuracy of the twiddle factors used in the FFT (i.e. the trigonometric function values), and it is not unusual for incautious FFT implementations to have much worse accuracy, e.g. if they use inaccurate trigonometric recurrence formulas. Some FFTs other than Cooley–Tukey, such as the Rader–Brenner algorithm, are intrinsically less stable.
In fixed-point arithmetic, the finite-precision errors accumulated by FFT algorithms are worse, with rms errors growing as O( √ N ) for the Cooley–Tukey algorithm (Welch, 1969). [38] Moreover, even achieving this accuracy requires careful attention to scaling to minimize loss of precision, and fixed-point FFT algorithms involve rescaling at each intermediate stage of decompositions like Cooley–Tukey.
To verify the correctness of an FFT implementation, rigorous guarantees can be obtained in O(N log N) time by a simple procedure checking the linearity, impulse-response, and time-shift properties of the transform on random inputs (Ergün, 1995). [39]
Multidimensional FFTs [ edit ]
As defined in the multidimensional DFT article, the multidimensional DFT
In two dimensions, the xk can be viewed as an n 1 × n 2 <\displaystyle n_<1>\times n_<2>> matrix, and this algorithm corresponds to first performing the FFT of all the rows (resp. columns), grouping the resulting transformed rows (resp. columns) together as another n 1 × n 2 <\displaystyle n_<1>\times n_<2>> matrix, and then performing the FFT on each of the columns (resp. rows) of this second matrix, and similarly grouping the results into the final result matrix.
In more than two dimensions, it is often advantageous for cache locality to group the dimensions recursively. For example, a three-dimensional FFT might first perform two-dimensional FFTs of each planar «slice» for each fixed n1, and then perform the one-dimensional FFTs along the n1 direction. More generally, an asymptotically optimal cache-oblivious algorithm consists of recursively div > ( n 1 , … , n d / 2 ) <\displaystyle (n_<1>,\ldots ,n_
Other generalizations [ edit ]
An O(N 5/2 log N) generalization to spherical harmonics on the sphere S 2 with N 2 nodes was described by Mohlenkamp, [41] along with an algorithm conjectured (but not proven) to have O(N 2 log 2 (N)) complexity; Mohlenkamp also prov >[42] A spherical-harmonic algorithm with O(N 2 log N) complexity is described by Rokhlin and Tygert. [43]
The fast folding algorithm is analogous to the FFT, except that it operates on a series of binned waveforms rather than a series of real or complex scalar values. Rotation (which in the FFT is multiplication by a complex phasor) is a circular shift of the component waveform.
Various groups have also published «FFT» algorithms for non-equispaced data, as reviewed in Potts et al. (2001). [44] Such algorithms do not strictly compute the DFT (which is only defined for equispaced data), but rather some approximation thereof (a non-uniform discrete Fourier transform, or NDFT, which itself is often computed only approximately). More generally there are various other methods of spectral estimation.
Applications [ edit ]
The FFT is used in digital recording, sampling, additive synthesis and pitch correction software. [45]
The FFT’s importance derives from the fact that it has made working in the frequency domain equally computationally feasible as working in the temporal or spatial domain. Some of the important applications of the FFT include: [15] [46]
- Fast large-integer and polynomial multiplication
- Efficient matrix-vector multiplication for Toeplitz, circulant and other structured matrices
- Filtering algorithms (see overlap-add and overlap-save methods)
- Fast algorithms for discrete cosine or sine transforms (e.g., fast DCT used for JPEG and MP3/MPEG encoding/decoding)
- Fast Chebyshev approximation
- Solving difference equations
- Computation of isotopic distributions. [47]
Research areas [ edit ]
Language reference [ edit ]
Language | Command/Method | Pre-requisites |
---|---|---|
R | stats::fft(x) | None |
Octave/MATLAB | fft(x) | None |
Python | fft.fft(x) | numpy |
Mathematica | Fourier[x] | None |
Julia | fft(A [,dims]) | FFTW |
See also [ edit ]
- ALGLIB – C++ and C# library with real/complex FFT implementation.
- FFTW «Fastest Fourier Transform in the West» – C library for the discrete Fourier transform (DFT) in one or more dimensions.
- FFTS – The Fastest Fourier Transform in the South.
- FFTPACK – another Fortran FFT library (public domain)
- Math Kernel Library
- cuFFT — FFT for GPU accelerated CUDA
- Overlap add/Overlap save – efficient convolution methods using FFT for long signals
- Odlyzko–Schönhage algorithm applies the FFT to finite Dirichlet series.
- Schönhage–Strassen algorithm — asymptotically fast multiplication algorithm for large integers
- Butterfly diagram – a diagram used to describe FFTs.
- Spectral music (involves application of FFT analysis to musical composition)
- Spectrum analyzer – any of several devices that perform an FFT
- Time series
- Fast Walsh–Hadamard transform
- Generalized distributive law
- Mult >References [ edit ]
Преобразование Фурье
Преобразование Фурье (символ ℱ) — операция, сопоставляющая одной функции вещественной переменной другую функцию вещественной переменной. Эта новая функция описывает коэффициенты («амплитуды») при разложении исходной функции на элементарные составляющие — гармонические колебания с разными частотами (подобно тому, как музыкальный аккорд может быть выражен в виде суммы музыкальных звуков, которые его составляют).
Разные источники могут давать определения, отличающиеся от приведённого выше выбором коэффициента перед интегралом, а также знака «−» в показателе экспоненты. Но все свойства будут те же, хотя вид некоторых формул может измениться.
Кроме того, существуют разнообразные обобщения данного понятия (см. ниже).
Содержание
Свойства [ править | править код ]
Хотя формула, задающая преобразование Фурье, имеет ясный смысл только для функций класса L 1 ( R ) <\displaystyle L_<1>(\mathbb
Это свойство позволяет по непрерывности распространить определение преобразования Фурье на всё пространство L 2 ( R ) <\displaystyle L_<2>(\mathbb
Эта формула может быть распространена и на случай обобщённых функций.
Из этой формулы легко выводится формула для n <\displaystyle n>-й производной:
( f ( n ) ) ^ = ( i ω ) n f ^ .
Формулы верны и в случае обобщённых функций.
- Преобразование Фурье и сдвиг.
f ( x − x 0 ) ^ = e − i ω x 0 f ^ ( ω ) .
Эта и предыдущая формула являются частными случаями теоремы о свёртке, так как сдвиг по аргументу — это свёртка со сдвинутой дельта-функцией δ ( x − x 0 ) <\displaystyle \delta (x-x_<0>)> , а дифференцирование — свёртка с производной дельта-функции.
Ключевым свойством этого пространства является то, что это инвариантное подпространство по отношению к преобразованию Фурье.
Например, вычислим преобразование Фурье дельта-функции:
Таким образом, преобразованием Фурье дельта-функции является константа 1 2 π <\displaystyle <\frac <1><\sqrt <2\pi >>>> .
Применения [ править | править код ]
Преобразование Фурье используется во многих областях науки — в физике, теории чисел, комбинаторике, обработке сигналов, теории вероятностей, статистике, криптографии, акустике, океанологии, оптике, геометрии и многих других. В обработке сигналов и связанных областях преобразование Фурье обычно рассматривается как декомпозиция сигнала на частоты и амплитуды, то есть обратимый переход от временно́го пространства (time domain) в частотное пространство (frequency domain). Богатые возможности применения основываются на нескольких полезных свойствах преобразования:
- Преобразования являются линейными операторами и, с соответствующей нормализацией, унитарными (свойство, известное как теорема Парсеваля, или, в более общем случае, как теорема Планшереля, или, в наиболее общем, как дуализм Понтрягина).
- Преобразования обратимы, причём обратное преобразование имеет практически такую же форму, как и прямое преобразование.
- Синусоидальные базисные функции (вернее, комплексные экспоненты) являются собственными функциямидифференцирования, что означает, что данное представление превращает линейные дифференциальные уравнения с постоянными коэффициентами в обычные алгебраические. (Например, в линейной стационарной системе частота — консервативная величина, поэтому поведение на каждой частоте может решаться независимо).
- По теореме о свёртке, преобразование Фурье превращает сложную операцию свёртки в простое умножение, что означает, что они обеспечивают эффективный способ вычисления основанных на свёртке операций, таких как умножение многочленов и умножение больших чисел.
- Дискретная версия преобразования Фурье может быть быстро рассчитана на компьютерах с использованием алгоритма быстрого преобразования Фурье (БПФ, англ. FFT ).
Разновидности [ править | править код ]
Многомерное преобразование [ править | править код ]
Преобразование Фурье функций, заданных на пространстве R n <\displaystyle \mathbb
Замечание относительно области задания преобразования Фурье и его основные свойства остаются справедливыми и в многомерном случае, со следующими уточнениями:
Ряды Фурье [ править | править код ]
Непрерывное преобразование само фактически является обобщением более ранней идеи рядов Фурье, которые определены для 2 π <\displaystyle 2\pi >-периодических функций и представляют собой разложение таких функций в (бесконечную) линейную комбинацию гармонических колебаний с целыми частотами:
Разложение в ряд Фурье применимо также к функциям, заданным на ограниченных промежутках, поскольку такие функции могут быть периодически продолжены на всю прямую.
Ряд Фурье является частным случаем преобразования Фурье, если последнее понимать в смысле обобщённых функций. Для любой 2 π <\displaystyle 2\pi >-периодической функции имеем
Иными словами, преобразование Фурье периодической функции представляет собой сумму точечных нагрузок в целых точках, и равно нулю вне их.
Дискретное преобразование [ править | править код ]
Дискретное преобразование Фурье — преобразование конечных последовательностей (комплексных) чисел, которое, как и в непрерывном случае, превращает свёртку в поточечное умножение. Используется в цифровой обработке сигналов и в других ситуациях, где необходимо быстро выполнять свёртку, например, при умножении больших чисел.
Оконное преобразование [ править | править код ]
Классическое преобразование Фурье имеет дело со спектром сигнала, взятым во всём диапазоне существования переменной. Нередко интерес представляет только локальное распределение частот, в то время как требуется сохранить изначальную переменную (обычно время). В этом случае используется обобщение преобразования Фурье, так называемое оконное преобразование Фурье. Для начала необходимо выбрать некоторую оконную функцию W <\displaystyle W>, эта функция должна иметь хорошо локализованный спектр.
На практике дискретный спектральный анализ реализован в современных цифровых осциллографах и анализаторах спектра. Используется, как правило, выбор окна из 3—10 типов окон. Применение окон принципиально необходимо, поскольку в реальных приборах исследуется всегда некоторая вырезка из исследуемого сигнала. При этом разрывы сигнала вследствие вырезки резко искажают спектр из-за наложения спектров скачков на спектр сигнала.
Некоторые анализаторы спектра используют быстрое (или кратковременное) оконное преобразование. При нём сигнал заданной длительности разбивается на ряд интервалов с помощью скользящего окна того или иного типа. Это позволяет получать, исследовать и строить в виде спектрограмм динамические спектры и анализировать их поведение во времени. Спектрограмма строится в трёх координатах — частота, время и амплитуда. При этом амплитуда задаётся цветом или оттенком цвета каждого прямоугольника спектрограммы. Подобные анализаторы спектра называют анализаторами спектра реального времени. Основным их производителем является корпорация Keysight Technologies (США), Rohde & Schwarz (Германия), Tektronix (США). Такие анализаторы появились в конце прошлого века и ныне бурно развиваются. Частотный диапазон исследуемых ими сигналов достигает сотен гигагерц.
Указанные методы спектрального анализа реализуются и в системах компьютерной математики, например, Mathcad, Mathematica, Maple и MATLAB.
Другие варианты [ править | править код ]
Эти разновидности преобразования Фурье могут быть обобщены на преобразования Фурье произвольных локально компактных абелевых топологических групп, которые изучаются в гармоническом анализе; они преобразуют группу в её дуальную группу. Эта трактовка также позволяет сформулировать теорему свёртки, которая устанавливает связь между преобразованиями Фурье и свёртками. См. также дуализм Понтрягина.
Интерпретация в терминах времени и частоты [ править | править код ]
В терминах обработки сигналов преобразование берёт представление функции сигнала в виде временны́х рядов и отображает его в частотный спектр, где ω <\displaystyle \omega >— угловая частота. То есть оно превращает функцию времени в функцию частоты; это разложение функции на гармонические составляющие на различных частотах.
Когда функция f <\displaystyle f>является функцией времени и представляет физический сигнал, преобразование имеет стандартную интерпретацию как спектр сигнала. Абсолютная величина получающейся в результате комплексной функции F <\displaystyle F>представляет амплитуды соответствующих частот ( ω <\displaystyle \omega >), в то время как фазовые сдвиги получаются как аргумент этой комплексной функции.
Однако преобразования Фурье не ограничиваются функциями времени и временными частотами. Они могут в равной степени применяться для анализа пространственных частот, также как для практически любых других функций.
ФУРЬЕ ПРЕОБРАЗОВАНИЕ (FOURIER TRANSFORM)
Первоначально преобразования Фурье разрабатывались как метод научного исследования повторяющихся явлений, таких как вибрация струн музыкальных инструментов или крыла самолета в полете. В качестве инструмента технического анализа преобразования Фурье применяются для выявления циклических закономерностей в движении цен.
Подробное объяснение анализа Фурье выходит за рамки настоящей книги. Дополнительные сведения по данному вопросу можно найти в следующих номерах журнала Technical Analysis of Stocks and Commodities: т. 1, № 2,4 и 7; т. 2, № 4; т. 3, № 2 и 7 (Understanding Cycles);
т.4, № 6; т. 5, № 3 (In Search of the Cause of Cycles) и 5 (Cycles and Chart Patterns); т. 6, № 11 (Cycles).
Общая теория анализа Фурье называется спектральным анализом. Мы рассмотрим лишь так называемое быстрое преобразование Фурье (Fast Fourier Transform («FFT»)). FFT — это сокращенная процедура расчета, которая выполняется в считанные минуты. FFT не учитывает фазовые соотношения, а рассматривает только периоды циклов и их амплитуды.
FFT позволяет выявлять доминирующий цикл (циклы) в числовом ряду данных (напр., значений индикатора или цен).
Концепция FFT основана на том, что любой конечный, упорядоченный во времени набор данных можно приближенно представить в виде набора синусоидальных волн. Каждая синусоидальная волна имеет определенный период, амплитуду и фазовые соотношения с другими синусоидальными волнами.
Использование FFT для анализа цен осложняется тем, что этот метод разрабатывался применительно к ненаправленным, периодическим данным. Движение же цен часто носит направленный характер, но это препятствие можно устранить путем снятия направленности (detrending) с помощью, например, линии тренда линейной регрессии или скользящего среднего. Кроме того, ценовые данные не являются строго периодическими, поскольку торги не проводятся в выходные и некоторые праздничные дни. Чтобы учесть и это обстоятельство, ценовые данные обрабатываются с помощью сглаживающей функции, называемой «прессующим окном» (hamming window).
Выше уже говорилось, что полное рассмотрение анализа FFT выходит за рамки настоящей книги. Поэтому ограничимся рассмотрением «готового» варианта индикатора быстрого преобразования Фурье (Fast Fourier Transforms FFT) из компьютерной программы MetaStock. Индикатор определяет длительность трех доминирующих циклов и относительную силу каждого из них.
На следующем рисунке представлен готовый индикатор FFT курса акций US Steel. Из графика индикатора видно, что доминирующие циклы в динамике курса акций из US Steel имеют длительность 205, 39и 27торговых дней.
Готовый индикатор FFT всегда показывает наиболее значимый цикл (в данном случае 205дней) слева, а наименее значимый (27дней в данном примере) —справа. Длительность каждого цикла определяется численным значением индикатора (шкалы на оси У по обеим сторонам графика).
Чем дольше индикатор сохраняет определенное значение, тем более выражен соответствующий цикл в рассматриваемом наборе данных. Например, на приведенном выше графике 205дневный цикл в пять раз сильнее 39дневного, поскольку индикатор находился на уровне 205 намного дольше (205приблизительно в пять раз больше, чем 39, но это просто совпадение).
Зная период доминирующего цикла, можно использовать его в качестве параметра для других индикаторов. Например, если ценная бумага имеет 35дневный цикл, можно построить для ее анализа 35дневное скользящее среднее или 35дневный RSI.
БЫСТРОЕ ПРЕОБРАЗОВАНИЕ ФУРЬЕ
Быстрое преобразование Фурье (БГ1Ф) применяется для оценки характеристик систем оцифровки данных в частотной области. Теория этого преобразования довольно сложна, но практическое применение самого метода затруднений не вызывает. В основе преобразования Фурье лежит предположение о том, что сигнал любой формы можно представить в виде суммы некоторого числа синусоидальных сигналов с определёнными амплитудами, частотами и начальными фазами.
Например, последовательность прямоугольных импульсов (меандр) можно представить суммой синусоидальных сигналов sin(x) + */з sin(3x) + ‘/5 sin(5а) + */7 sin(7x). Добавляя каждый раз к основной синусоиде sin(x) гармоники из указанной последовательности, можно приблизить форму полученного сигнала к прямоугольной (Рис. Б.1).
Рис. Б.1. Импульсный сигнал можно получить путём сложения синусоидального колебания основной частоты с нечётными гармониками этого колебания.
Анализ графика БПФ
Для построения графика БПФ необходимо в течение некоторого времени собрать большое число выборок цифрового кода на выходе АЦП. Как правило, производители АЦП при определении характеристик для технической документации подают на вход преобразователя аналоговый сигнал одной частоты с амплитудой полной шкалы; такие условия позволяют исследовать полный динамический диапазон преобразователя. Затем полученные данные преобразуются в график, один из которых показан на Рис. Б.2.
Частотная шкала такого графика всегда берётся линейной от нуля до половины частоты Найквиста. Для БПФ-анализа частота Найквиста выбирается равной частоте преобразования.
Рис. Б.2. Среди основных результатов графика БПФ следует выделить основной входной сигнал (А), величину сигнала по отношению к напряжению полной шкалы (В), отношение сигнал/шум (С), динамический диапазон, свободный от паразитных составляющих (D), и средний уровень шумов (Е).
По оси амплитуд значения изменяются от нуля вниз до соответствующих отрицательных значений, которые зависят от разрядности преобразователя и количества выборок, используемых для построения графика БПФ. Если аналоговый сигнал на входе АЦП преобразуется в цифровой код, равный диапазону полной шкалы, то на графике эта точка будет соответствовать 0 дБ. Для сигналов с амплитудами, меньшими диапазона полной шкалы, можно получить их цифровой код по формулам:
где Доит — десятичное представление цифрового кода, округленное
до ближайшего целого. Амплитуда берётся из графика БПФ (в дБ), Eoutrti — приведённое ко входу АЦП напряжение, соответствующее
цифровому коду на выходе преобразователя. Это напряжение должно соответствовать величине аналогового входного напряжения KIN, п — разрядность АЦП,
FSR — диапазон полной шкалы аналогового входного сигнала (в вольтах).
Особый интерес на графике БПФ представляют пять элементов, отмеченных на Рис. Б.2, которые дают подробную информацию о характеристиках системы.
В чем суть результата быстрого преобразования Фурье?
Здравствуйте, уважаемые хабраобитетели! Прошу, не бейте меня ботинками больно!
Впервые столкнулся в преобразованием Фурье, и надо быстро разобраться.
«Физический» смысл его я понимаю так: есть сигнал, меняющийся во времени определенным образом. После его преобразования получается спектр, т.е. из зависимости амплитуда(время) получается амплитуда(частота).
Полез в Википедию за алгоритмом быстрого преобразования:
Википедия БПФ
сделал ctrl+C, ctrl+V первого примера. На выходе получаю следующий файл:
0.000000 0.000000 0.000000
0.500000 0.000000 0.250000
0.000000 0.000000 0.000000
0.000000 0.000000 0.000000
0.000000 0.000000 0.000000
0.000000 0.000000 0.000000
0.000000 0.000000 0.000000
0.500000 0.000000 0.250000
Первый столбец — вещественная часть, второй — мнимая, третий — сумма квадратов вещественной и мнимой частей.
По коду, на сколько я понял, делается БПФ косинуса с частотой 2*pi/8 что примерно равно 0.785. Назревает глупый вопрос, как этот файл соотносится со спектром косинуса, который должен быть везде нулем, кроме частоты косинуса, в которой он должен быть равен 1?
Объясните, пожалуйста, уважаемые сведущие. Может я не тот пример беру?
PS в файле убрал минусы перед нулевыми значениями, чтобы он смотрелся ровно 🙂
Алгоритмы преобразования Фурье и их применение при анализе звуковой информации
Рубрика: Информационные технологии
Дата публикации: 05.10.2020 2020-10-05
Статья просмотрена: 2846 раз
Библиографическое описание:
Щелбанин А. В., Зинченко Л. А. Алгоритмы преобразования Фурье и их применение при анализе звуковой информации // Молодой ученый. 2020. №20. С. 29-34. URL https://moluch.ru/archive/124/34105/ (дата обращения: 02.10.2020).
В этой статье представлен вашему вниманию обзор алгоритмов преобразования Фурье и их применение при анализе звуковой информации. В статье представлены несколько конкретных реализаций преобразования Фурье, их анализ, а также накладываемые ограничения. В заключении был сделал вывод о возможности применения этих алгоритмов в различных условиях.
В последние годы инженеры-разработчики электронной аппаратуры, инженеры-проектировщики помещений, звукорежиссеры и люди других профессий, так или иначе связанных с обработкой звуковой информации, большое внимание качеству записываемой, хранимой и обрабатываемой звуковой информации. Одним из критериев качества звуковой информации является спектр сигнала, для анализа которого сложились устойчивые методики, некоторые из которых будут освещены в данной статье.
Преобразование Фурье
При анализе звуковой информации одним из наиболее важных параметров исходного звукового сигнала является его спектр. Спектр сигнала — это результат разложения сигнала на более простые в базисе ортогональных функций. В качестве разложения зачастую используется преобразование Фурье, качестве базисных функций спектра используют синусоидальные и косинусоидальные функции.
Преобразование Фурье (ℱ)— операция, ставящая в соответствие каждой функции действительного переменного f(x) её спектр или Фурье-образ :
Виды преобразования Фурье:
– непериодический непрерывный или дискретный сигнал можно разложить в интеграл Фурье;
– непериодический дискретный сигнал можно разложить в интеграл Фурье;
– периодический непрерывный сигнал можно разложить в бесконечный ряд Фурье;
– периодический дискретный сигнал можно разложить в конечный ряд Фурье.
На практике, обычно, используется последний вид преобразований в связи с тем, что компьютеры способны работать с конечным набором данных.
Дискретное преобразование Фурье
Дискретное преобразование Фурье (ДПФ) (DiscreteFourierTransform, DFT) имеет вид:
ДПФ ставит в соответствие N отсчетам сигнала x(n), где n = 0…N — 1, N отсчетов дискретного спектра X(k), при этом предполагается, что и сигнал, и спектр сигнала являются периодическими и анализируются на одном периоде повторения. В связи с тем, что вычисление ДФП требует умножений полиномов и вычислений синусов, использование данного алгоритма на практике может оказаться очень ресурсоемким.
Псевдокод метода, реализующего ДПФ, представлен ниже:
for k 0 to N/2
for i 0 to N
ReX[k] ReX[k] + x[i]∙cos(2πik/N)
ImX[k] ImX[k] – (x[i]∙sin(2πik/N))
returnX[]
Быстрое преобразование Фурье
Когда не хватает ресурсов для вычисления ДФП, переходят к быстрому преобразованию Фурье. В методе БПФ используются коэффициента полинома с четными и нечетными индексами, чтобы определить два новых полинома и с четными и нечетными коэффициентами:
В этом случае содержит все коэффициенты индексами (двоичное представление которых заканчивается цифрой 0), а содержит все коэффициенты с нечетными индексами (двоичное представление которых заканчивается цифрой 1), тогда спектр дискретного сигнала рассчитывается по формуле:
Таким образом, задача вычисления спектра сводится к следующим операциям:
- вычислить два полинома и , имеющие степень не выше n/2 d в точках ;
- вычислить спектр, объединив результаты, используя формулу (5).
Псевдокод метода, реализующего БПФ, представлен ниже:
if n = 1
then returnx[]
fork 0 to n/2 – 1
returna[]
Каждый вызов recursiveFFT, за исключением рекурсивных вызовов, занимает Θ(n), где n — длина исходного набора дискретных отсчетов. В таком случае, рекуррентное соотношение для временной сложности алгоритма выглядит следующим образом:
Самым важным ограничением, при реализации БПФ является то, что число дискретных отсчетов n должно быть степенью двойки. В случае, если это условие не выполняется, анализируемый сигнал можно дополнить нулями до степени двойки.
Помимо «классического» алгоритма БПФ также существует множество его вариаций, основная идея которых также основывается на декомпозиции ДПФ до операций с отдельными точками и последующее объединение полученных результатов:
– БПФ по основанию 2 с прореживанием по времени, БПФ по основанию 2 с прореживание по частоте — в этих алгоритмах используется двоично-инверсная перестановка и умножения результатов укороченного ДПФ на поворотные коэффициенты;
– полифазное БПФ (polyphaseFFT) — алгоритм, позволяющий получить очень высокое разрешение по частоте, по сравнению с другими алгоритмами БПФ;
– алгоритм БПФ Кули-Тьюки (Cooley-TukeyFFTalgorithm) и д. р.
Практическая реализация
В учебных целях был разработан анализатор спектра на микроконтроллере AtmelATmega32–16PU с использованием LCD-дисплея 16х2 на базе контроллера HitachiHD44780 LCD. Было принято решение использовать алгоритм ДПФ для реализации данной задачи в связи со следующими аппаратными и программные ограничениями:
– использование LCD-дисплея 16×2 означает, что имеется возможность визуализировать спектр сигнала с 16 дискретными частотами;
– стек микроконтроллер AtmelATmega32–16PU состоит из двух 8-битных регистров, поэтому, использование алгоритмов БПФ не представляется возможным в связи с возможным переполнением стека из-за рекурсии;
– в качестве лингвистического обеспечения для разработки был выбран язык программирования — C. В связи с этим основным лингвистическим ограничением является невозможность передачи массива в качестве аргумента в функцию, а также возвращать результат вычислений в виде массива в явном виде. В связи с этим ограничением для передачи данных из массива в функцию используются указатели;
– для уменьшения количества вычислительных операций, в память микроконтроллера были записаны возможные значения углов, синусов и косинусов.
Ниже представлен фрагмент кода на языке C, реализующий ДПФ на микроконтроллере ATmega32:
void discrete_fourier_transform (int32_t *x, uint32_t *amp, int n)
int32_t re_x, im_x;
Похожие статьи
Исследование процесса цифровой обработки сигнала при работе.
Проведена оценка преобразования Фурье на примере цифровой обработки сигналов, построены графики и смеси сигнала с шумом, исследован спектр сигнала. Ключевые слова: дискретное Преобразование Фурье, спектр сигнала, белый шум, импульс.
Реализация алгоритмов дискретного преобразования Фурье на.
– 336 с. Сайт Wikipedia. Discrete Fourier Transform.
Основные термины (генерируются автоматически): фазовая характеристика, частотный спектр, звуковой сигнал, свойство преобразования, треугольный сигнал, дискретное преобразование, быстрое.
Разработка программного комплекса для обработки НЧ сигналов
Разрабатываемый программный комплекс САЗСМЧ (спектральный анализ звуковых сигналов мозга человека) (рис. 2) оснащен несколькими программными алгоритмами на основе вейвлет-преобразования Добеши (5) [4] и Морле (6) [5, 6].
Преобразование Фурье как основополагающий частотный метод.
частотная область, преобразование, частотная фильтрация, образ, функция, частота, обработка сигналов, меньший размер, линейная фильтрация, дискретное преобразование.
Анализ нестационарных сигналов с помощью. | Молодой ученый
Преобразование Фурье переводит в частотный спектр амплитудно-временное представление сигнала.
Рис. 3. Нестационарный сигнал тока с присутствием разных частот после дискретного преобразования Фурье.
Преобразование Фурье и преобразование Хартли
Сопоставление составляющих спектра Хартли с действительной и мнимой частью спектра Фурье [3]. Свойства преобразования.
Алгоритмы преобразования Фурье и их применение при анализе звуковой информации.
Предварительная обработка речевых сигналов для системы.
речевой сигнал, программная оболочка, предварительная обработка, сигнал, нейронная сеть, WAV, частотный спектр, Обработка сигнала, амплитудный спектр, быстрое преобразование.
Моделирование особенностей бинаурального слуха.
Моделирование особенностей бинаурального слуха и исследование спектрального состава звуковых сигналов.
Рис. 4. Блок-диаграмма проведения измерений. Рис. 5. Полученные осциллограммы для тонового сигнала с частотой 100Гц.
Исследование принципов работы программ распознавания.
Важную роль в программах распознавания звука имеет такой параметр, как частота дискретизации, так как изначально аналоговый сигнал нужно преобразовать в цифровой для дальнейшей обработки. Микрофон конвертирует звуковые колебания в аналоговый.
ACMLib
Быстрое преобразование Фурье
Мотивировка
Основная задача, которая решается при помощи быстрого преобразования Фурье (Fast Fourier Transform, FFT) — это умножение многочленов за время $O(n \log n)$.
Тривиально (по определению) многочлены степеней $m$ и $n$ умножаются за время $O(nm)$. Долгое время считалось, что быстрее это сделать невозможно, А.Н. Колмогоров даже принимал попытки доказать нижнюю границу, пока в 1960 году А. Карацуба не придумал способ умножать многочлены степени $n$ за время $O(n^<\log_<2>3>)$.
Как известно, многочлен степени строго меньше $n$ однозначно определяется своими значениями в $n$ (вообще говоря комплексных) точках. Действительно, если есть два различных многочлена с одинаковыми значениями в $n$ точках, то их разность имеет $n$ комплексных корней, причём она является ненулевым многочленом степени строго меньше $n$, что противоречит основной теореме алгебры. С другой стороны, интерполяционный многочлен Лагранжа в явном виде предъявляет многочлен степени строго меньше $n$ по значениям в $n$ точках.
Таким образом, многочлены можно хранить не в виде вектора коэффициентов, а в виде набора значений в некоторых точках. Над многочленами в таком виде очень удобно производить арифметические операции, в том числе умножать их за время $O(n)$ (нужно просто перемножить значения в соответствующих точках). С другой стороны, непонятно, как считать значения в других точках, да и знать сами коэффициенты бывает полезно. А воостанавливать коэффициенты по значениям в некотором наборе точек сложно, тот же интерполяционный многочлен Лагранжа вычисляется за время $O(n^2)$. Да и многочлены нам обычно задаются в форме вектора коэффициентов, получить значеня в $n$ произвольных точках вряд ли можно быстрее, чем за $O(n^2)$.
Хитрость FFT в том, что точки, в которых считаются значения многочлена, выбираются отнюдь не произвольным образом.
Описание
Итак, FFT преобразует вектор $\langle a_<0>, a_<1>, \ldots, a_
Тут сразу возникает два вопроса:
- Что делать с многочленами других степеней?
- Почему именно эти точки?
С первым вопросом всё просто: нужно дополнять коэффициенты нулями до ближайшей степени двойки.
Со вторым же вопросом дело чуть хитрее. $\omega_
Разделяй и властвуй
$A_<0>$ и $A_<1>$ — многочлены степени $\frac
$A(\omega_
Осталось определить базу рекурсии — $n=1$. Для этого нужно посчитать значение константного многочлена $A=a_<0>$ в точке $\omega_ <0>= 1$. Это значение, очевидно, равно $a_<0>$.
Таким образом, алгоритм работает за время $T(n) = 2 T(\frac
Обратное преобразование
Хорошо, мы научились по многочлену вычислять его значение в $n$ особых точках за $O(n \log n)$, потом мы можем перемножить значения и получить FFT от произведения многочленов. Но мы пока не умеем восстанавливать многочлен по его FFT.
Можно рассмотреть FFT как линейное преобразование:
Возведём матрицу преобразования в квадрат: $R_
Если $\omega_ = 1$, то $R_
Таким образом, обратное преобразование выглядит следующим образом:
- Применить прямое преобразование
- Разделить все элементы на $n$
- Развернуть массив без первого элемента
Оптимизации
В общем-то, это всё; однако данная реализация работает не очень быстро и потребляет $O(n \log n)$ памяти.
Что мы глобально делаем:
- Переставляем коэффициенты
- Делаем рекурсивные запуски
- Склеиваем результаты
Если один раз в самом начале применить все перестановки индексов, то можно будет сразу двигаться от более глубоких уровней рекурсии в начало.
Как переставляются индексы: в левую часть идут чётные индексы, в правую — нечётные, потом к каждой из половин рекурсивно примерняется то же правило. Если рассмотреть битовую запись числа, то мы сначала сортируем по младшему биту, потом “отрезаем” его и делаем дальше то же самое. Нетрудно догадаться, что мы на самом деле сортируем индексы по реверснутой битовой записи; строгое доказательство проводится мат.индукцией по номеру уровня.
Реверснутую битовую запись всех чисел от $0$ до $2^
Также можно заранее предподсчитать комплексные корни из $1$. Тут есть тонкий момент: синусы и косинусы весьма медленные, в то время как если считать $\omega_
Наконец, можно уменьшить количество умножений комплексных чисел. Вспомним, что
Их можно считать одновременно, это уменьшит количество умножений вдвое.
Умножение многочленов
Размер применяемого FFT должен быть строго больше, чем степень произведения многочленов.
В задачах часто многочлены имеют целочисленные коэффициенты, причём неотрицательные. Понятно, что при таких условиях коэффициенты у произведения будут тоже целыми и неотрицательными.
С таким способом округления следует быть осторожным, он верен только для неотрицательных чисел. Если коэффициенты многочлена могут быть отрицательными, следует округлять аккуратно:
Также нужно помнить, что double имеет точность около $15$ знаков, поэтому расчитывать на точное умножение многочленов можно только если коэффициенты произведения не превосходят $10^<14>$, а лучше и ещё меньше.
Разные мелочи
При реализации я пользовался встроенным классом complex . Чтобы его использовать, нужно подключить заголовочный файл complex .
Разумеется, можно использовать не только complex , но и complex или complex double> . Первый вариант действительно может помочь уменьшить время работы и объём потребляемой памяти.
Удивительно, но написание своего класса Complex также может уменьшить время работы.
В общем случае нам нужно 3 вызова FFT, чтобы перемножить два многочлена. Существуют методы, позволяющие проводить 2 FFT одновременно. Но если у нас есть два набора из $n$ и $m$ многочленов, и мы хотим посчитать попарные произведения, то для этого достаточно $n + m + nm$ вызовов FFT.
Операции по модулю
Часто в задачах просят посчитать что-то по модулю некоторого числа. Это же может относиться и к произведению многочленов. Конечно, в таком случае у нас все коэффициенты целые неотрицательные. Однако если модуль порядка $10^<9>$, то коэффициенты произведения могут получиться порядка $10^<23>$, что нельзя не то что точно сохранить в double , а даже сохранить в long long , чтобы потом взять остаток по модулю. Что же делать?
“Хороший” модуль
Почему мы вообще использовали комплексные числа, если все коэффициенты исходных многочленов были действительными? Дело в том, что нам нужно было $n$ разных корней из $1$, чего действительные числа предоставить не могут. Если бы только был какой-то другой объект с такими свойствами…
Как известно из теории чисел, ненулевые остатки по модулю простого числа $P$ образуют циклическую группу порядка $P-1$ по умножению. Пусть $P-1$ делится на достаточно большую степень двойки, то есть $P-1 = nz$ для некоторого целого $z$. Тогда в этой группе тоже есть $n$ разных корней из $1$ степени $n$, и они тоже обладают всеми необходимыми нам свойствами.
Таким образом, мы можем выполнять все операции по модулю $P$, а комплексные корни из $1$ нужно заменить на корни из $1$ по модулю.
Таким образом, если нам повезло, то всё хорошо. Но нужно понимать, что в рамках соревнований “повезло” — это значит авторы задачи сделали так, чтобы нам повезло. Поэтому если вы видите в задаче “необычный модуль”, это может быть сильным намёком на то, что в задаче требуется FFT. С другой стороны, давать такую огромную подсказку — это нежелательно для авторов. Так или иначе, коротенький список часто встречающихся “необычных модулей”, подходящих для написания FFT по модулю: $7340033 = 7 \cdot 2^ <20>+ 1$, $998244353 = 119 \cdot 2^ <23>+ 1$.
Любой модуль
Тут есть два принципиально разных подхода:
Несколько хороших модулей + Китайская теорема об остатках
Название говорит само за себя. Можно незавсимо выполнить умножение по 3 разным хорошим модулям, а потом узнать искомые коэффициенты при помощи КТО.
Разбить на многочлены с меньшими коэффициентами
Выберем $Q \approx 1000$. Запишем
Коэффициенты многочленов $A_(x)B_
Применение
Понятно, что FFT используется для умножения многочленов, так что это будет скорее описание применений умножения многочленов.
Умножение длинных чисел
Длинные числа умножаются как многочлены (коэффициенты — это цифры), только потом нужно сделать переносы. Однако лучше разбивать цифры на группы по три, то есть рассматривать число в системе счисления по основанию $1000$, — таким образом степени многочленов уменьшаются в три раза.
Вычисление скалярных произведений
Есть массив $A$ длины $n$ и массив $B$ длины $m$ ($m \le n$). Нужно посчитать скалярные произведения $B$ со всеми подотрезками $A$ длины $m$.
Перевернём $B$ и умножим с $A$ как многочлены. Несложно понять, что после переворота скалярное произведение превращается в свёртку. Коэффициенты с $(m-1)$-го по $(n-1)$-й — это ответы.
Нечёткий поиск
Есть строчки $S$ и $P$ над алфавитом $\Sigma$. Для каждой подстроки $S$ длины $ | P | $ найти расстояние Хэмминга (количество позиций, в которых строки отличаются).
Будем считать не расстояние Хэмминга, а $ | P | $ — расстояние, то есть количество совпадающих позиций. Переберём символ из $\Sigma$. В каждой строчке заменим все вхождения данного символа на $1$, а всех остальных — на $0$. Мы свели задачу к предыдущей.
Сложность — $O( | \Sigma | n \log n)$.
Используя эту задачу, можно решать задачи вида “Найдите все вхождения с не более чем $k$ ошибками”.
Все суммы
Есть два множества чисел $A$ и $B$, все числа целые от $0$ до $n$. Выдать все числа из $\lbrace x = a + b \mid a \in A, b \in B \rbrace$.
Динамическое программирование
Иногда в ДП переход выглядит как свёртка, и его можно ускорить при помощи FFT.