Цитата:Ну смотрите... У меня длина буфера сигнала 400 точек и 1648 длина импульса. Следовательно, длина свертки будет 2047 точек. Поэтому, делаю 2048-точечное ффт 400-сот точек буфера и всего импульса (один раз при старте). А разрешение ффт от длины буфера не зависит, он м.б. и меньше, но проц не будет успевать считать.
Ересь какая-то. Разрешение по частоте у Фурье - fдискретизации/N. Далее - тема склейки блоков не раскрыта совершенно. Далее - не охота тут разводить арифметику, но поверьте, для получения адекватной задержки с адекватной обрабатываемой длинной импульса есть только одна возможность - тупо считать свертку.
Дальше чистая арифметика (для Cortex-M3):
LDM в два регистра (текущий коэффициент и текущий семпл) - 3 такта
MLA (собственно операция MAC) - 2 такта
Примечание - буфер семплов и буфер коэффициентов - это одно и тоже, идет 32хбитный коэффициент (усеченный до 16 бит), потом 32хбитный семпл (усеченный до 16 бит) и так далее. Посему надо еще организовывать сдвиг семплов в буфере, но это выполняется при помощи DMA одновременно с собственно вычислением свертки самим процом.
Итого имеем 5 тактов на тап. При частоте дискретизации 48кГц и 100МГц тактовой имеем N=100МГц/(5*48кГц)=416 тапов. Что, конечно, маловато, ибо позволяет иметь нижнюю обрабатываемую частоту всего лишь 115Гц (=48кГц/416).
Ну можно соптимизировать до 4.25 такта на тап (с общей задержкой в 4 семпла), но это не сделает погоды. Можно еще скинуть семплрейт до 44.1кГц - в общем, можно достигнуть нижней обрабатываемой частоты в 82Гц.
Овчинка на CM3 не стоит выделки. Можно попробовать на Cortex-M4 - там есть двухствольный MAC, который за один такт обрабатывает 2 тапа. Плюс загрузка нужна будет только одна на два тапа - это будет 1+3 такта на два тапа, т.е. 2 такта на тап. При заявляемых частотах 150МГц и 48кГц будем иметь 1562 тапа за семпл, что, в общем, вполне адекватная цифра (30Гц нижняя обрабатываемая частота).
Как-то так.