Подтвердить что ты не робот

Почему FFT производит сложные числа вместо реальных чисел?

Все реализованные FFT-реализации, с которыми мы сталкивались, приводят к сложным значениям (с реальными и мнимыми частями), даже если вход в алгоритм был дискретным набором действительных чисел (целых чисел).

Невозможно ли представить частотную область только по действительным числам?

4b9b3361

Ответ 1

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

Например, предположим, что вы FFT - сигнал, содержащий только одну синусоидальную волну. В зависимости от фазы вы можете получить совершенно реальный результат FFT. Но если вы сдвинете фазу своего ввода на несколько градусов, как еще может выводиться вывод FFT этого входа?

edit: Это немного расплывчатое объяснение, но я просто пытаюсь мотивировать интуицию.

Ответ 2

FFT предоставляет вам амплитуду и фазу. Амплитуда кодируется как величина комплексного числа (sqrt (x ^ 2 + y ^ 2)), а фаза кодируется как угол (atan2 (y, x)). Чтобы иметь строго реальный результат от БПФ, входящий сигнал должен иметь четную симметрию (т.е. X [n] = conj (x [N-n])).

Если все, о чем вы заботитесь, - это интенсивность, для комплексного числа достаточно для определения величины комплексного числа.

Ответ 3

Да, можно представить результаты частотной области FFT строго реального ввода с использованием только реальных чисел.

Эти комплексные числа в результате FFT представляют собой всего лишь 2 действительных числа, которые необходимы для того, чтобы дать вам 2D-координаты вектора результата, который имеет как длину, так и угол направления (или величину и фазу). И каждая частотная составляющая в результате FFT может иметь уникальную амплитуду и уникальную фазу (относительно некоторой точки в апертуре БПФ).

Только одно реальное число не может представлять как величину, так и фазу. Если вы выбросите информацию о фазе, которая может легко массировать искажение сигнала, если вы попытаетесь воссоздать его с помощью iFFT (а сигнал не симметричен). Таким образом, для полного результата FFT требуется 2 действительных числа на бит БПФ. Эти 2 действительных числа объединяются вместе в некоторые БПФ в сложном типе данных по общему соглашению, но результат FFT может легко (и некоторые БПФ) просто создавать 2 реальных вектора (один для косинусных координат и один для синусоидальных координат).

Существуют также программы FFT, которые напрямую генерируют амплитуду и фазу, но они работают медленнее, чем БПФ, что создает сложный (или два реальных) векторный результат. Существуют также программы FFT, которые вычисляют только величину и просто отбрасывают информацию о фазе, но они обычно работают не быстрее, чем позволяют вам делать это после более общего БПФ. Возможно, они сохраняют кодер несколькими строками кода за счет того, что они не обратимы. Но многие библиотеки не утруждают себя включением этих медленных и менее общих форм БПФ и просто позволяют кодеру преобразовывать или игнорировать то, что им нужно или не нужно.

Кроме того, многие считают, что математика является лотом более элегантной, используя сложную арифметику.

(Добавлено:) И, еще один вариант, вы можете рассматривать две компоненты каждого бита результата FFT, а не как реальные и мнимые компоненты, как четные и нечетные компоненты, как реальные.

Ответ 4

Если ваш коэффициент FFT для данной частоты f равен x + i y, вы можете посмотреть x как коэффициент косинуса на этой частоте, а y - коэффициент синуса. Если вы добавите эти две волны для определенной частоты, на этой частоте вы получите волну с фазовым сдвигом; величина этой волны sqrt(x*x + y*y), равная величине комплексного коэффициента.

Дискретное косинусное преобразование (DCT) является относительным преобразованием Фурье, которое дает все действительные коэффициенты. Двумерный DCT используется многими алгоритмами сжатия изображений/видео.

Ответ 5

  • Дискретное преобразование Фурье в корне превращается из вектора комплексных чисел в "временной области" в вектор комплексных чисел в "частотной области" (я использую кавычки, потому что, если вы применяете правильные масштабные коэффициенты, ДПФ является его собственным обратным). Если ваши входы реальны, вы можете одновременно выполнить два DFT: взять входные векторы x и y и вычислить F (x + я у). Я забыл, как вы отделите DFT впоследствии, но я подозреваю, что это что-то о симметрии и сложных сопряжениях.

  • дискретный косинус-преобразование позволяет вам представлять "частотную область" с помощью реалов и часто используется в алгоритмах сжатия с потерями (JPEG, MP3). Удивительная вещь (для меня) заключается в том, что она работает, несмотря на то, что она, по-видимому, отбрасывает информацию о фазе, но это также, по-видимому, делает ее менее полезной для большинства целей обработки сигналов (я не знаю о простом способе свертки/корреляции с DCT).

Я, вероятно, неправильно понял некоторые детали;)