Цитата
20мс - это уйма времени чтоб сделать первое БПФ, а вот как потом его заставить скользить по буферу и делать вычисления не более чем за 0.5мс...
Ещё как вариант - можно сделать многомикропроцессорную плату, засинхронизировав их работу с запаздыванием 20мс / N чипов. Например два чипа: первое БПФ закончилось, второй чип выдаст спектр через 10мс. Если четыре чипа - 5мс и т.д. Либо может поставить какой специализированный БПФ-чип, который из сигнала сразу делает спектр (Правда сколько они стоят не знаю)
Я как и вы пытался мерять фазу, делал это скользящим ДПФ. Основная проблема - без перемножение на сглаживающее окно фаза получалась не очень. А если умножать на окно, то оптимизация сходит на нет, так как старые значения по второму разу не использовать.
С БПФ есть ещё такой способ. К примеру, я брал 1024-точечное БПФ. Экспериментально подобрал оптимальную форму сглаживающего окна, в итоге ненулевых коэффициентов осталось 64, а по краям - одни нули, по научному видимо STFT окно. Для оптимизации этого дела цикл БПФ можно развернуть в линейную программу. Хотя бы первую ступень преобразования. Основной выигрыш на первой ступени перемножения бабочек: вместо 1024 входных отсчёта используем только 64.