Чому ШПФ виробляє комплексні числа замість дійсних?


84

Усі реалізації ШПФ, з якими ми стикалися, призводять до складних значень (з дійсними та уявними частинами), навіть якщо вхідними даними алгоритму був дискретний набір дійсних чисел (цілих чисел).

Чи неможливо представити частотну область лише через реальні числа?

Відповіді:


88

ШПФ - це принципово зміна основи. Основою, на якій БПФ змінює вихідний сигнал, є набір синусоїд. Для того щоб ця основа описувала всі можливі вхідні дані, вона повинна мати можливість представляти фазу, а також амплітуду; фаза представлена ​​за допомогою комплексних чисел.

Наприклад, припустимо, ви БПФ подаєте сигнал, що містить лише одну синусоїду. Залежно від фази ви цілком можете отримати цілком реальний результат ШПФ. Але якщо ви змістите фазу вводу на кілька градусів, як інакше вихід БПФ може представляти цей вхід?

редагувати: Це дещо вільне пояснення, але я просто намагаюся мотивувати інтуїцію.


3
Це допомагає багато відповісти. Якщо результат БПФ містить лише частоту та фазу, як він фіксує інформацію про амплітуду у вибірці часової області? Тобто, як це заново створює правильні амплітуди в iFFT?
steve landiss

7
Ну, кожне значення в ШПФ відповідає різній частотній складовій. Величина цього значення - це амплітуда компонента, а комплексний кут - фаза цього компонента.
zmccord

54

ШПФ забезпечує амплітуду та фазу. Амплітуда кодується як величина комплексного числа (sqrt (x ^ 2 + y ^ 2)), тоді як фаза кодується як кут (atan2 (y, x)). Щоб отримати строго реальний результат від ШПФ, вхідний сигнал повинен мати рівну симетрію (тобто x [n] = conj (x [Nn])).

Якщо вам важлива лише інтенсивність, величини комплексного числа достатньо для аналізу.


41

Так, можна представити результати частотної області БПФ строго реального введення, використовуючи лише дійсні числа.

Ці комплексні числа в результаті ШПФ - це просто лише 2 дійсних числа, які обидва необхідні для отримання 2D координат вектора результату, який має як довжину, так і кут напрямку (або величину і фазу). І кожна частотна складова результату ШПФ може мати унікальну амплітуду та унікальну фазу (відносно певної точки апертури ШПФ).

Одне дійсне число одне не може представляти як величину, так і фазу. Якщо ви викинете інформацію про фазу, це може легко масово спотворити сигнал, якщо ви спробуєте відтворити його за допомогою iFFT (і сигнал не симетричний). Отже, для повного результату ШПФ потрібно 2 дійсних числа на кошик ШПФ. Ці 2 дійсних числа поєднуються в деяких БПФ у складному типі даних за загальним домовленістю, однак результат БПФ може легко (а деякі БПФ і роблять) просто створити 2 дійсних вектори (один для координат косинусів і один для координат синуса).

Існують також підпрограми ШПФ, які безпосередньо виробляють величину і фазу, але вони працюють повільніше, ніж ШПФ, що дає складний (або два реальних) векторні результати. Існують також підпрограми ШПФ, які обчислюють лише величину і просто викидають інформацію про фазу, але вони, як правило, працюють не швидше, ніж дозволяють вам робити це самостійно після більш загального БПФ. Можливо, вони економлять програміст кілька рядків коду ціною того, що він не є зворотним. Але багато бібліотек не заважають включати ці повільніші та менш загальні форми ШПФ, а просто дозволяють кодеру перетворювати або ігнорувати те, що їм потрібно чи не потрібно.

Плюс, багато хто вважає, що задіяна математика набагато елегантніша за допомогою складної арифметики (де для строго реального введення косинусна кореляція або навіть компонент результату ШПФ покладається в реальну компоненту, а синусова кореляція або непарна складова Результат ШПФ покладається в уявну складову комплексного числа.)

(Додано :) І, як ще один варіант, ви можете розглядати два компоненти кожного буфера результатів ШПФ, а не як реальні та уявні компоненти, як парні та непарні компоненти, обидва справжні.


19

Якщо ваш коефіцієнт ШПФ для даної частоти fдорівнює x + i y, ви можете розглядати xяк коефіцієнт косинуса на цій частоті, тоді yяк коефіцієнт синуса. Якщо додати ці дві хвилі для певної частоти, ви отримаєте фазово зміщену хвилю на цій частоті; величина цієї хвилі становитьsqrt(x*x + y*y) дорівнює величині комплексного коефіцієнта.

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


9
  1. Дискретне перетворення Фур'є - це принципово перетворення від вектора комплексних чисел у "часовій області" до вектора комплексних чисел у "частотній області" (я використовую лапки, тому що якщо ви застосовуєте правильні коефіцієнти масштабування, DFT є власним зворотний). Якщо ваші входи реальні, тоді ви можете виконати два DFT одночасно: Візьміть вхідні вектори x і y і обчисліть F ( x  +  i  y ). Я забуваю, як ви потім розділяєте DFT, але я підозрюю, що це щось стосується симетрії та складних кон'югатів.

  2. Тип дискретного косинусного перетворення дозволяє представити "частотну область" разом із реальними даними, і це часто зустрічається в алгоритмах стиснення з втратами (JPEG, MP3). Дивовижно (для мене) те, що він працює, хоча, здається, відкидає фазову інформацію, але це також, здається, робить його менш корисним для більшості цілей обробки сигналів (я не знаю простий спосіб зробити згортку / кореляцію з DCT).

Я, мабуть, дещо помилився;)


1
Я хотів би знайти більше інформації про те, як ви це сказали - відокремлюючи DFT згодом - для випадку перетворення F (x + iy).
CatsLoveJazz
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.