Как уменьшить комплексные значения Фурье?

Отказ от ответственности: я не эксперт по обработке сигналов.

Я пишу функцию, которая берет одномерный массив и выполняет на нем быстрое преобразование Фурье. Вот как это работает:

  1. Если размер массива не является степенью двойки, дополните его нулями в конце, чтобы его размер стал степенью двойки.
  2. Выполните БПФ над заполненным массивом и сохраните результаты в массиве x.
  3. Уменьшите размер сложного массива x, чтобы он соответствовал длине исходного незаполненного массива.
  4. Вернуть x.

У меня возникли проблемы с шагом 3. Если я пропущу шаг 3 и выполню обратное БПФ для результата вызова функции, я получу начальный заполненный массив, что означает, что функция успешно выполняет шаги 1 и 2.

Я попытался реализовать шаг 3 путем понижения дискретизации с использованием линейной интерполяции, но когда я выполнил обратное преобразование Фурье для конечного результата с помощью MatLab, полученные результаты не были эквивалентны исходному массиву. Язык программирования, который мне нужно использовать, не MatLab, я использую MatLab только для проверки правильности результатов.

Какие методы можно использовать для выполнения шага 3, сохраняя при этом возможность получить исходный массив без дополнений после обратного БПФ?


person MathuSum Mut    schedule 09.04.2017    source источник


Ответы (2)


Используйте круговую интерполяцию ядра Sinc, чтобы вычислить точки выборки вниз. Ширина Sinc будет шириной фильтра нижних частот с отсечкой, соответствующей сглаживанию для новой более низкой частоты дискретизации с понижением частоты дискретизации.

person hotpaw2    schedule 09.04.2017

Если вам нужны точные результаты, вы можете использовать алгоритм Блюстейна для Z-преобразования Чирпа, чтобы вычислить ДПФ раздражающего размера за время O (N log N).

См.: https://en.wikipedia.org/wiki/Chirp_Z-transform.

Это не так быстро, как БПФ степени 2, но намного быстрее (для высокой точности), чем интерполяция на БПФ неправильной длины.

person Matt Timmermans    schedule 09.04.2017