Kiss FFT, кажется, умножает данные на количество точек, которые оно преобразует

Мое ограниченное понимание преобразования Фурье заключается в том, что вы должны иметь возможность переключаться между временной и частотной областями без изменения исходных данных. Итак, вот краткое изложение того, что я (думаю, я) делаю:

  1. Использование kiss_fft_next_fast_size(994) для определения, что я должен использовать 1000.

  2. Использование kiss_fft_alloc(...) для создания kiss_fft_cfg с nfft = 1000.

  3. Расширение моих входных данных с размера 994 до 1000 путем добавления дополнительных точек как нуля.

  4. Передача kiss_fft_cfg в kiss_fft(...) вместе с входными и выходными массивами.

  5. Использование kiss_fft_alloc(...) для создания обратного поцелуя_fft_cfg с nfft = 1000.

  6. Передача обратного kiss_fft_cfg в kiss_fft(...) ввод предыдущего выходного массива.

  7. Ожидая возврата исходных данных, но получая каждое значение ровно в 1000 раз больше!

Я поместил полный пример здесь, и мои 50 с лишним строк кода можно найти в самом конце. Хотя я могу обойти это, разделив каждый результат на значение OPTIMAL_SIZE (т. е. 1000), это исправление очень беспокоит меня, хотя я не понимаю, почему.

Пожалуйста, не могли бы вы посоветовать, какую просто глупость я делаю неправильно?


person mosi    schedule 20.08.2012    source источник
comment
Это как интегралы - мы обычно не упоминаем константу.   -  person MSalters    schedule 20.08.2012
comment
Это действительно зависит от реализации. Ознакомьтесь с документацией Kiss о масштабировании. Обычно деление на n является частью процедуры обратного БПФ. Похоже, они пропустили этот шаг в Kiss.   -  person sellibitze    schedule 20.08.2012


Ответы (1)


Этого и следовало ожидать: обратное дискретное преобразование Фурье (которое можно реализовать с помощью быстрого преобразования Фурье) требует деления на 1/N:

Коэффициент нормализации, умножающий ДПФ и ИДПФ (здесь 1 и 1/N), и знаки показателей степени являются просто условными и различаются в некоторых обработках. Единственным требованием этих соглашений является то, что ДПФ и ИДПФ имеют показатели с противоположными знаками и чтобы произведение их нормировочных коэффициентов было 1/N. Нормализация \sqrt{1/N} как для ДПФ, так и для IDFT делает преобразования унитарными, что имеет некоторые теоретические преимущества. Но часто при численных вычислениях более практично выполнять масштабирование сразу, как указано выше (и единичное масштабирование может быть удобно в других случаях).

http://en.wikipedia.org/wiki/Dft

person user1202136    schedule 20.08.2012
comment
Какое облегчение! Большое спасибо. - person mosi; 20.08.2012