2012-06-01 2 views
0

Итак, я в настоящее время реализую метод перекрытия-сбережения свертки блоков в Matlab и имею некоторые проблемы с этим.Свертка буферизованного блока с использованием Overlap-Save

В моей реализации используется буферизованный вход для обработки входных данных в режиме реального времени в векторах. Вход подается к экземпляру моего класса перекрытия-сохранения, и как только буфер заполнен большим количеством входных данных, чем заданная длина блока (больше длины фильтра), вход обрабатывается в кусках (размер длины блока) используя стандартный алгоритм перекрытия-сохранения до тех пор, пока длина данных в буфере не будет меньше длины блока. Затем он сидит и ждет больше данных, чтобы войти и повторить этот процесс.

Теперь, когда все, кажется, работает нормально, но проблема заключается в очистке буфера после того, как все данные переданы классу. В буфере всегда меньше данных, чем размер блока при вызове метода flush, и у меня возникают проблемы с обработкой оставшейся части данных.

Следует также отметить, что после того, как класс обрабатывает нормальные данные, он удерживает последние данные N-1 (где N является длиной фильтра) от ввода в буфере для поддержки части «перекрытия» алгоритм для последующих данных или финальный флеш.

Мой вопрос: Я думаю, как следует обрабатывать оставшиеся данные в буфере при вызове flush()? Я пробовал просто нулевое заполнение и свертывание его с фильтром, но это производит вывоз мусора ... Любые предложения?

Примечание: выход флеша должен быть добавлен к выходу обработки нормальных блоков данных, и этот новый выход должен соответствовать выходу conv (input, filter) в matlab.

+0

РЕШЕНИЕ, играя whack-a-mole – user1431032

ответ

0

Это очень общий вопрос, поэтому я напишу очень общий ответ. Сама концепция промывки означает, что ваш вход подходит к концу. Когда вы решаете, как вы хотите, чтобы ваш процессор работал после того, как ваш входной сигнал закончен, вы можете его закодировать. Нули - общий подход, поэтому я могу только подозревать, что ваша попытка нулевого заполнения (что, по моему мнению, правильный ответ) имела некоторые другие недостатки. Или, может быть, ваш сигнал просто закончился на пике, а нуль-padding ввело резкий переход. В этом случае повторить последнее значение может быть лучшим решением, чем нулевое дополнение.

Смежные вопросы