Помощь с быстрым преобразованием Фурье EXCEL - PullRequest
0 голосов
/ 21 декабря 2010

Я пытаюсь использовать встроенную в БПФ функцию Excel (2007), однако для этого требуется 2 ^ n точек данных, которых у меня нет.

Я пробовал две вещи, обе даютразные результаты:

  1. Дополните значения данных нулями, чтобы N (количество точек данных) достигло ближайшей степени 2
  2. Используйте подход «разделяй и властвуй», т.е.У меня 112 точек данных, затем я делаю БПФ для 64, затем 32, затем 16 (112 = 64 + 32 + 16)

Какой подход лучше?Мне удобно писать макросы VBA, но я ищу алгоритм, который не требует, чтобы ограничение N было степенью 2. Может кто-нибудь помочь?

Ответы [ 3 ]

3 голосов
/ 21 декабря 2010

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

Заполнение нулями - гораздо лучшая идея и общий подход для БПФ. Если вы заинтересованы в альтернативном способе выполнения FFT, то octave сделает это за вас, и большинство документов Matlab применимы, поэтому у вас не должно возникнуть никаких проблем.

2 голосов
/ 22 декабря 2010

Заполнение нулями - правильное направление, но имейте в виду, что если вы выполняете преобразование для оценки частотного содержимого, вам потребуется оконная функция , и она должна применяться ккороткий блок (т. е. если у вас 2000 точек, примените 2000-балльное окно Ханна, затем добавьте 2048 и вычислите преобразование).

Если вы разрабатываете надстройку, вы можете рассмотреть возможность использования одного измного библиотек FFT там.Я большой поклонник KISS FFT Марка Боргердинга.Он предлагает быстрое преобразование для многих размеров блоков, по существу, для любого размера блока, который может быть разложен на числа 2,3,4 и / или 5. Однако он не обрабатывает блоки размером с простое число.Он написан на очень простом C, поэтому его легко перенести на C #.Или этот вопрос SO предлагает некоторые библиотеки, которые можно использовать в .NET.

1 голос
/ 21 декабря 2010

дополняется нулями

2 ^ n является требованием алгоритма FFT.

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

...