Линейная и циклическая свертка
DSPL-2.0 — свободная библиотека алгоритмов цифровой обработки сигналов Распространяется под лицензией LGPL v3 Страница проекта на SourceForge |
Одним из китов современной техники, несомненно, является операция свертки:
Графически прохождение сигнала через фильтр c импульсной характеристикой , в соответствии с (1), показано на рисунке 1
В физически реализуемой системе реакция на входное воздействие не может наступить раньше самого воздействия, тогда импульсная характеристика должна быть равна нулю, при . Учитывая это свойство можно выражение (1) представить в виде:
Пусть имеется два дискретных сигнала , , , определенных на всем диапазоне индексов . Тогда линейной сверткой дискретных сигналов является вида:
Для вычисления линейной свертки сигналы и и сдвигают относительно друг друга, все возможные перекрывающиеся отсчеты почленно перемножают и складывают как это представлено на рисунке 2.
Приведем пример вычисления линейной свертки. Пусть сигнал содержащий отсчета, а сигнал из отсчетов. Тогда процесс вычисления линейной свертки приведенных сигналов показан на рисунке 3.
Необходимо отметить, что сигнал при вычислении линейной свертки отражается слева-направо, поскольку — самый первый отсчет (самый ранний по времени) и обрабатываться он также должен первым.
Линейная свертка описывает прохождение сигнала , через КИХ-фильтр порядка с импульсной характеристикой , :
Другим важнейшим прикладным значением линейной свертки является расчет произведения полиномов.
Пусть значения дискретной последовательности , , содержащей значение представляет собой коэффициенты полинома :
Пусть имеется выборка дискретного сигнала , длительности отсчетов, . Если мы возьмем последних отсчетов сигнала и перенесем их в начало, то получим сигнал , циклически задержанный относительно исходного на отсчетов. Для обозначения циклической задержки мы будет использовать обозначение , которая говорит о том, что разность берется по модулю , т.е. берется остаток от деления на .
Операции по модулю в предположении выполняются по следующему правилам:
Пример циклической задержки сигналов показан на рисунке 4 для и .
Пусть имеется две последовательности и , одинаковой длительности отсчетов. Циклической сверткой называется последовательность вида:
Графически пример вычисления циклической свертки (9) для показан на рисунке 5.
Заметим, что вычисление циклической свертки можно представить в матричной форме:
Важнейшим свойством циклической свертки является то, что она сводится к произведению спектров ДПФ исходных последовательностей, а также к произведению их -образов. Использование аппарата быстрого преобразования Фурье обеспечивает высочайшую вычислительную эффективность циклических сверток.
Как мы знаем из свойств дискретного преобразования Фурье, ДПФ циклической свертки равно произведению спектров сворачиваемых сигналов:
Схематично процесс расчета циклической свертки сигналов и использованием алгоритмов быстрого преобразования Фурье показан на рисунке 6.
Заметим, что эффективность алгоритмов БПФ зависит от длины выборки . Наиболее эффективные алгоритмы разработаны для длины равной целой степени двойки (так называемые алгоритмы по основанию два). При этом помимо высокой вычислительной эффективности, алгоритмы БПФ по основанию два отличаются регулярными структурами при аппаратной и программной реализации, а также прекрасно распараллеливаются при мультипроцессорной обработке.
Например для , выполнение матричного умножения (10) наивным методом, без использования ускорений, потребует операции вещественного умножения. Если же мы применим алгоритм вычисления циклической свертки на основе БПФ, то потребуется три БПФ длины (обратное БПФ также считается через прямое), плюс 1024 комплексных умножения для поэлементного перемножения результатов БПФ.
Каждое из трех БПФ требует количество умножений равное:
Вычислительные преимущества, которые мы получаем при использовании аппарата БПФ для расчета циклической свертки, хотелось бы также получать и для расчета линейной свертки. С этой целью рассмотрим способ приведения линейной свертки последовательностей ограниченной длительности к циклической.
Пусть и — дискретные последовательности длительности и отсчетов соответственно. Линейная свертка последовательностей и вернет длительности отсчет. Если мы хотим получить как результат циклической свертки, то необходимо дополнить и до длины отсчет, как это показано на рисунке 7.
К последовательности необходимо добавить ноль, а к последовательности — ноль. такое добавление нулей обеспечит увеличение периодичности циклического буфера до размера, когда и перестанут перекрываться циклически. В результате циклическая свертка будет иметь вид:
Необходимо заметить, что добивать и нулями можно не только до длины , но и до любой длины . В результате вычисления циклической свертки дополненных нулями последовательностей до длины , первый значение на выходе будет представлять собой линейную свертку, а остальные значения будут нулевыми. Это можно использовать для дополнения исходных последовательностей нулями до длины, которая допускает использование эффективных БПФ алгоритмов.
Например при и , необходимо дополнить и нулями до длины . Однако мы можем дополнить их до длины отсчетов и использовать БПФ по основанию два для расчета циклической свертки. При этом первые 6999 отсчетов результата циклической свертки будут представлять собой линейную свертку при и . Использование алгоритма БПФ для приведет к десятикратному снижению требуемых вещественных умножителей при вычислении линейной свертки при и .
Таким образом, мы рассмотрели непрерывный интеграл свертки, который описывает реакцию линейного фильтра на произвольный входной сигнал.
Также было рассмотрено два вида дискретных сверток: линейная и циклическая, установлена связь между ними. Было показано, что применение БПФ обеспечивает существенное снижение вычислительных операций при вычислении как циклических, так и линейных сверток.