Если речь идёт о скользящем ДПФ для немногих гармоник, то можно использовать идею, лежащую в основе фильтрации скользящего среднего CIC фильтрами. А именно, целочисленное скользящее среднее величины X вычисляется рекуррентно как
S(n) = S(n-1) + X(n) - X(n-M), M длина блока усреднения
Вычисления на границе устойчивости (для действительных чисел могут быть проблемы медленной потери устойчивости), но для целых чисел источник вычислительного шума отсутствует и вычисления абсолютно точные. Выкидываем уходящий отсчёт, добавляем входящий... имеем скользящую оценку среднего.
Далее для ДПФ заданной частоты - делаем два скользящих средних для целочисленных значений X(n)*sin(w*n) и X(n)*cos(w*n). Sin и Сos табличные и результаты умножений сохраняем в целочисленные линии задержки (лучше циклически адресуемые) для последующих рекуррентных вычислений. Получится скользящий ДПФ с точностью до комплексного фазового множителя (который при желании тоже можно учесть, но в большинстве случаев нас он не интересует, а интересует нас энергия) вычислительная сложность которого всего немногим более чем в 2 раза сложнее прямого блочного ДПФ или Герцеля. Это фатастика :-) Кто с ними сталкивался, узнает в этом сразу типа DDC, используемый для вычислений точных значений отсчётов ДПФ
|