У меня есть алгоритм, который обнуляет последовательность до 4N, выполняет БПФ и использует только точки N самой низкой частоты из сгенерированного 4N.
Похоже, это много потраченной впустую работы, есть идеи, как это можно сделать быстрее?
У меня есть алгоритм, который обнуляет последовательность до 4N, выполняет БПФ и использует только точки N самой низкой частоты из сгенерированного 4N.
Похоже, это много потраченной впустую работы, есть идеи, как это можно сделать быстрее?
Ответы:
Если у вас есть только несколько лотков, то следующие варианты могут быть очень эффективными для вас:
1. Просто выполняйте DFT на каждой частоте, которая вам нужна.
2. Используйте алгоритм Гёртцела для каждой рассматриваемой частоты.
Нулевое заполнение до длины 4X, вычисление более длинного БПФ, а затем использование только нижних 1/4 бинов дает результаты, практически идентичные оконной интерполяции Sinc исходной длины БПФ.
Поэтому просто используйте исходную длину FFT и интерполируйте, используя 3-фазное ядро интерполяции Sinc с подходящей шириной окна.
Заполнение нулями во временной области дает вам более высокочастотное решение, но не дает новой информации, поэтому оно обеспечивает по существу интерполяцию в частотной области. В зависимости от характера ваших сигналов и требуемой точности вы можете получить дополнительные частотные точки с регулярным БПФ из N точек и выполнить подходящую интерполяцию (линейная, сплайн, pchip, sinc и т. Д.).