Итак, я в настоящее время реализую метод перекрытия-сбережения свертки блоков в Matlab и имею некоторые проблемы с этим.Свертка буферизованного блока с использованием Overlap-Save
В моей реализации используется буферизованный вход для обработки входных данных в режиме реального времени в векторах. Вход подается к экземпляру моего класса перекрытия-сохранения, и как только буфер заполнен большим количеством входных данных, чем заданная длина блока (больше длины фильтра), вход обрабатывается в кусках (размер длины блока) используя стандартный алгоритм перекрытия-сохранения до тех пор, пока длина данных в буфере не будет меньше длины блока. Затем он сидит и ждет больше данных, чтобы войти и повторить этот процесс.
Теперь, когда все, кажется, работает нормально, но проблема заключается в очистке буфера после того, как все данные переданы классу. В буфере всегда меньше данных, чем размер блока при вызове метода flush, и у меня возникают проблемы с обработкой оставшейся части данных.
Следует также отметить, что после того, как класс обрабатывает нормальные данные, он удерживает последние данные N-1 (где N является длиной фильтра) от ввода в буфере для поддержки части «перекрытия» алгоритм для последующих данных или финальный флеш.
Мой вопрос: Я думаю, как следует обрабатывать оставшиеся данные в буфере при вызове flush()? Я пробовал просто нулевое заполнение и свертывание его с фильтром, но это производит вывоз мусора ... Любые предложения?
Примечание: выход флеша должен быть добавлен к выходу обработки нормальных блоков данных, и этот новый выход должен соответствовать выходу conv (input, filter) в matlab.
РЕШЕНИЕ, играя whack-a-mole – user1431032