Почему БПФ производит комплексные числа вместо действительных чисел?
все реализации БПФ, с которыми мы столкнулись, приводят к комплексным значениям (с реальными и мнимыми частями), даже если вход в алгоритм был дискретным набором действительных чисел (целых чисел).
разве невозможно представить частотную область только в терминах вещественных чисел?
5 ответов:
БПФ-это фундаментальное изменение основы. Основой, на которую БПФ изменяет ваш исходный сигнал, является набор синусоидальных волн. Для того, чтобы этот базис описывал все возможные входы, он должен иметь возможность представлять фазу, а также амплитуду; фаза представлена с использованием комплексных чисел.
например, предположим, что вы БПФ сигнал, содержащий только одну синусоидальную волну. В зависимости от фазы вы вполне можете получить совершенно реальный результат БПФ. Но если вы сдвинете фазу из вашего ввода несколько градусов, как еще выход БПФ может представлять этот вход?
edit: это несколько свободное объяснение, но я просто пытаюсь мотивировать интуицию.
да, можно представить результаты частотной области БПФ строго реального ввода, используя только реальные числа.
эти комплексные числа в результате БПФ-это просто 2 вещественных числа, которые оба необходимы, чтобы дать вам 2D координаты вектора результата, который имеет как длину, так и угол направления (или величину и фазу). И каждая частотная составляющая в результате БПФ может иметь уникальную амплитуду и уникальную фазу (относительно некоторой точки в БПФ апертура.)
одно действительное число само по себе не может представлять как величину, так и фазу. Если вы выбросите информацию о фазе, это может легко массово исказить сигнал, если вы попытаетесь воссоздать его с помощью iFFT (и сигнал не симметричен). Таким образом, полный результат БПФ требует 2 вещественных чисел на БПФ бин. Эти 2 вещественных числа объединены вместе в некоторых БПФ в сложном типе данных по общему соглашению, но результат БПФ может легко (и некоторые БПФ делают) просто произвести 2 вещественных вектора (один для косинусных координат и один для синусоидальных координат).
есть также процедуры БПФ, которые производят величину и фазу непосредственно, но они работают медленнее, чем БПФ, который производит сложный (или два реальных) векторный результат. Также существуют процедуры БПФ, которые вычисляют только величину и просто выбрасывают информацию о фазе, но они обычно работают не быстрее, чем позволяют вам делать это самостоятельно после более общего БПФ. Может быть, они экономят кодер несколько строк кода за счет не быть обратимым. Но многие библиотеки не утруждают себя включением этих более медленных и менее общих форм БПФ, а просто позволяют кодеру конвертировать или игнорировать то, что им нужно или не нужно.
кроме того, многие считают, что математика связана с много более элегантный, используя сложную арифметику.
(добавлено:) и, как еще один вариант, вы можете рассматривать два компонента каждого БПФ результата bin, а не как реальные и мнимые компоненты, как четные и нечетные компоненты, оба реальный.
если ваш коэффициент БПФ для данной частоты
fиx + i y, вы можете посмотретьxкак коэффициент Косинуса на этой частоте, в то время какy- это коэффициент синуса. Если вы добавите эти две волны для определенной частоты, вы получите сдвинутую по фазе волну на этой частоте; величина этой волныsqrt(x*x + y*y), равный величине комплексного коэффициента.The Дискретное Косинусное Преобразование (DCT) является родственником Преобразование Фурье, которое дает все вещественные коэффициенты. Двумерный DCT используется многими алгоритмами сжатия изображений/видео.
дискретное преобразование Фурье в основном представляет собой преобразование из вектора комплексных чисел во" временной области "в вектор комплексных чисел в" частотной области " (я использую кавычки, потому что если вы применяете правильные коэффициенты масштабирования, DFT является его собственным обратным). Если ваши входы реальны, то вы можете выполнить сразу два DFT: возьмите входные векторы x и y и вычислить F(x + Яy). Я забудьте, как вы отделяете DFT после этого, но я подозреваю, что это что-то о симметрии и комплексных сопряжениях.
The дискретное косинусное преобразование sort-of позволяет представлять "частотную область" с реалами и часто используется в алгоритмах сжатия с потерями (JPEG, MP3). Удивительная вещь (для меня) заключается в том, что она работает, хотя она, по-видимому, отбрасывает информацию о фазе, но это также делает ее менее полезной для большинства целей обработки сигналов (Я не знаю простого способа сделать свертку / корреляцию с DCT).
Я, вероятно, получил некоторые детали неправильно ;)
Comments