Разница в быстром преобразовании Фурье между wolframalpha и commons-math

У меня вопрос, связанный с быстрым преобразованием Фурье. Я скачал библиотеку "Math Commons 3.2", где находится БПФ. Но результат отличается от того, что я ожидал.

Например, для таких данных, как реальный: 1,0,0,0,0,0,0,0,0 воображаемый: 0,0,0,0,0,0,0,0,0 у меня есть, реальный:1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 воображаемый:0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 тот же результат, что и при использовании этот код (в разделе "public static main" этот пример существует как "тест"), но в wolframalpha все реальные значения равны 1/3, а не 1,0.

Вопрос:
Где/в чем разница и как я могу получить тот же результат, что и в wolframalpha
С уважением
Dawid D


person Dawid D    schedule 14.10.2013    source источник


Ответы (2)


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

Многие реализации ДПФ не являются нормальными; они изменяют величину вектора просто для удобства вычислений. По сути, все дополнения, которые они делают, умножают длину вектора на количество элементов в нем, и реализации никогда не умножают и не делят, чтобы компенсировать это.

Обратите внимание, что длина вектора, возвращенного вам WolframAlpha, равна 1, что совпадает с длиной входного вектора. (Длина представляет собой квадратный корень из суммы квадратов элементов. Длина входного вектора равна sqrt(1+0+0+0+0+0+0+0+0) = 1. Длина выходной вектор равен sqrt(1/9+1/9+1/9+1/9+1/9+1/9+1/9+1/9) = 1.)

В реализациях DFT принято игнорировать нормализацию и возвращать масштабированные результаты. Это работает, потому что большинство операций, используемых с результатами преобразования, не заботятся об абсолютной величине. Кроме того, общий процесс заключается в вычислении одного или нескольких ДПФ, объединении или обработке результатов и вычислении обратного ДПФ. Если масштабирование является частью ДПФ, то оно должно выполняться в каждом ДПФ и каждом обратном ДПФ. Если вы исключите масштабирование из ДПФ, то приложение может в конце объединить все задействованные масштабы в одну операцию масштабирования. Для вычислительной производительности лучше выполнить масштабирование один раз, чем много раз, поэтому это предпочтительнее.

person Eric Postpischil    schedule 14.10.2013

По общему соглашению, БПФ вектора из 1 должен быть 1,0,0,0... Поэтому я бы сказал, что результат Wolfram Alpha не нормализован. Ничего страшного и не совсем «неправильного», но чтобы получить нормализованные результаты от Альфы, вам, по-видимому, придется умножить на 3.

person Ernest Friedman-Hill    schedule 14.10.2013
comment
На самом деле все наоборот. Большинство реализаций DFT ненормализованы; они не масштабируют свои результаты, чтобы они соответствовали математическому значению ортонормированного преобразования. Результат WolframAlpha нормализуется; его выходной вектор имеет ту же длину вектора, что и входной вектор. - person Eric Postpischil; 14.10.2013