Линейная и циклическая свертка

Содержание

DSPL-2.0 — свободная библиотека алгоритмов цифровой обработки сигналов

Распространяется под лицензией LGPL v3

Страница проекта на SourceForge libdspl-2.0 on SourceForge

Обнаружили ошибку? Выделите ее мышью и нажмите ctrl+enter
Введение

Одним из китов современной техники, несомненно, является операция свертки:

equation 1
(1)
которая позволяет рассчитать сигнал s(t) на выходе линейного фильтра с импульсной характеристикой h(t), при входном сигнале x(t). При этом предполагается, что x(t) и s(t) — абсолютно интегрируемые на всей числовой оси функции [1, стр. 422], для того чтобы интеграл (1) сходился.

Графически прохождение сигнала x(t) через фильтр c импульсной характеристикой h(t), в соответствии с (1), показано на рисунке 1

Прохождение сигнала  через фильтр c импульсной характеристикой
Рисунок 1. Прохождение сигнала x(t) через фильтр c импульсной характеристикой h(t)

В физически реализуемой системе реакция на входное воздействие не может наступить раньше самого воздействия, тогда импульсная характеристика h(t) должна быть равна нулю, при t < 0. Учитывая это свойство можно выражение (1) представить в виде:

equation 2
(2)
Важным свойством операции свертки является коммутативность, т.е. x(t)\ast h(t) = h(t) \ast x(t). Действительно если в выражении (1) ввести замену переменной вида t - \xi = v, то \xi = t - v при этом d\xi = -dv, верхний предел интегрирования \xi = \infty переходит в v = -\infty, а нижний предел \xi = -\infty переходит в v = \infty. Тогда получаем:

equation 3
(3)
В дискретном случае различают два вида сверток: линейную (или апериодическую) и циклическую. Циклическую свертку еще часто называют круговой или периодической.

Линейная свертка дискретных последовательностей

Пусть имеется два дискретных сигнала a(n), b(n), n = 0,\pm 1, \pm 2 \ldots, определенных на всем диапазоне индексов n. Тогда линейной сверткой дискретных сигналов является s(n) вида:

equation 4
(4)
В общем случае суммирование бесконечных последовательностей a(n) и b(n) требует анализа сходимости суммы (4). Однако на практике мы не можем иметь дело с бесконечными дискретными последовательностями. Предположим, что в сигналах a(n) и b(n) имеется лишь конечное число ненулевых значений. Тогда a(n) \neq 0 только для n = 0\ldots N-1, а b(n) \neq 0 только для n = 0\ldots M-1. В этом случае, из выражения (4) можно видеть, что s(n) будет иметь только N+M-1 ненулевых значений.

Для вычисления линейной свертки сигналы a(n) и b(n) и сдвигают относительно друг друга, все возможные перекрывающиеся отсчеты почленно перемножают и складывают как это представлено на рисунке 2.

Графическое представление линейной свертки
Рисунок 2. Графическое представление линейной свертки

Приведем пример вычисления линейной свертки. Пусть a(n) = [2,\, 1, \, 3, \,-1] сигнал содержащий N=4 отсчета, а b(n) = [-1,\, 1, \, 2] сигнал из M=3 отсчетов. Тогда процесс вычисления линейной свертки приведенных сигналов показан на рисунке 3.

Пример вычисления линейной свертки
Рисунок 3. Пример вычисления линейной свертки

Необходимо отметить, что сигнал b(n) при вычислении линейной свертки отражается слева-направо, поскольку b(0) = -1 — самый первый отсчет (самый ранний по времени) и обрабатываться он также должен первым.

Линейная свертка описывает прохождение сигнала x(n), n = 0, 1, 2,... через КИХ-фильтр порядка N с импульсной характеристикой h(n), n = 0 \ldots N:

equation 5
(5)
В выражении (5) пределы суммирования соответствуют длительности импульсной характеристики КИХ фильтра, так как h(n) = 0 при n<0 и n>N.

Другим важнейшим прикладным значением линейной свертки является расчет произведения полиномов.

Пусть значения дискретной последовательности a(n), n = 0 \ldots N, содержащей N+1 значение представляет собой коэффициенты полинома P_N(t):

equation 6
(6)
степени N, а значения дискретной последовательности b(n), n = 0 \ldots M — содержит M+1 коэффициентов полинома
equation 7
(7)
степени M. Тогда коэффициенты произведения полиномов R_{N+M}(t) =  P_N(t)Q_M(t) будут равны линейной свертке a(n) \ast b(n). В результате мы получим N + M + 1 коэффициент полинома R_{N+M}(t) степени N+M.

Циклическая задержка цифровой последовательности

Пусть имеется выборка дискретного сигнала a(n), длительности N отсчетов, n = 0 \ldots N-1. Если мы возьмем m последних отсчетов сигнала и перенесем их в начало, то получим сигнал a(n-m)_{\Mod N}, циклически задержанный относительно исходного на m отсчетов. Для обозначения циклической задержки мы будет использовать обозначение (\bullet)_{\Mod N}, которая говорит о том, что разность n-m берется по модулю N, т.е. берется остаток от деления n-m на N.

Операции по модулю N в предположении N>0 выполняются по следующему правилам:

equation 8
(8)
Например x = 123, N=20, тогда 123_{\Mod 20} = 3. Если x = -123 отрицательно, то -123_{\Mod 20} = 20 - 123_{\Mod 20} = 17. Таким образом операция по модулю N>0 для любого целого x возвращает значение от 0 до N-1 включительно.

Пример циклической задержки сигналов показан на рисунке 4 для N = 8 и m=3.

Циклическая задержка сигнала  при  и
Рисунок 4. Циклическая задержка сигнала a(n-m)_{\Mod N} при N = 8 и m = 3

Циклическая свертка

Пусть имеется две последовательности a(n) и b(n), n = 0\ldots N одинаковой длительности N отсчетов. Циклической сверткой называется последовательность c(n) = a(n) \circledast b(n) вида:

equation 9
(9)
Как можно видеть из (9) циклическую свертку можно выполнять только над последовательностями равной длины N отсчетов, причем результатом также будет последовательность длины N.

Графически пример вычисления циклической свертки (9) для N=4 показан на рисунке 5.

Пример вычисления циклической свертки
Рисунок 5. Пример вычисления циклической свертки

Заметим, что вычисление циклической свертки можно представить в матричной форме:

equation 10
(10)
Можно видеть, что каждый столбец матрицы \mathbf{B} циклически задержан на один отсчет относительно предыдущего столбца. Особая структура матрицы \mathbf{B} допускает разработку высокоэффективных алгоритмов расчета циклической свертки [2].

Алгоритм быстрого вычисления циклической свертки на основе БПФ

Важнейшим свойством циклической свертки является то, что она сводится к произведению спектров ДПФ исходных последовательностей, а также к произведению их \mathcal{Z}-образов. Использование аппарата быстрого преобразования Фурье обеспечивает высочайшую вычислительную эффективность циклических сверток.

Как мы знаем из свойств дискретного преобразования Фурье, ДПФ циклической свертки равно произведению спектров сворачиваемых сигналов:

equation 11
(11)
где
equation 12
(12)
Таким образом перемножив поэлементно спектры ДПФ исходных сигналов, и в взяв обратное дискретное преобразование Фурье, мы получим результат циклической свертки a(n) и b(n). Расчет ДПФ целесообразно вести на основе алгоритмов быстрого преобразования Фурье. Тогда окончательно можно записать:
equation 13
(13)
где \mathcal{FFT} \big[ \bullet \big] и \mathcal{IFFT} \big[ \bullet \big] — операторы прямого и обратного быстрого преобразования Фурье соответственно.

Схематично процесс расчета циклической свертки сигналов и использованием алгоритмов быстрого преобразования Фурье показан на рисунке 6.

Вычисление циклической свертки на основе БПФ
Рисунок 6. Вычисление циклической свертки на основе БПФ

Заметим, что эффективность алгоритмов БПФ зависит от длины выборки N. Наиболее эффективные алгоритмы разработаны для длины N равной целой степени двойки (так называемые алгоритмы по основанию два). При этом помимо высокой вычислительной эффективности, алгоритмы БПФ по основанию два отличаются регулярными структурами при аппаратной и программной реализации, а также прекрасно распараллеливаются при мультипроцессорной обработке.

Например для N = 1024, выполнение матричного умножения (10) наивным методом, без использования ускорений, потребует N^2 = 1048572 операции вещественного умножения. Если же мы применим алгоритм вычисления циклической свертки на основе БПФ, то потребуется три БПФ длины N=1024 (обратное БПФ также считается через прямое), плюс 1024 комплексных умножения для поэлементного перемножения результатов БПФ.

Каждое из трех БПФ требует количество умножений равное:

equation 14
(14)
тогда получаем, что расчет свертки через БПФ требует 3 \text{MUL}_{\text{FFT}} + N комплексных умножений. Для N = 1024 получаем оценку 13312 операции комплексного умножения, что эквивалентно 53248 вещественных умножений, т.е. почти в 20 раз меньше, чем при наивном расчете циклической свертки. Важно заметить, что с ростом N ускорение вычислений только растет, потому что заменяем квадратичный рост вычислительных операций произведением линейной и логарифмической функций.

Расчет линейной свертки через циклическую

Вычислительные преимущества, которые мы получаем при использовании аппарата БПФ для расчета циклической свертки, хотелось бы также получать и для расчета линейной свертки. С этой целью рассмотрим способ приведения линейной свертки последовательностей ограниченной длительности к циклической.

Пусть a(n) и b(n) — дискретные последовательности длительности N и M отсчетов соответственно. Линейная свертка последовательностей a(n) и b(n) вернет c(n) = a(n) \ast b(n) длительности N+M-1 отсчет. Если мы хотим получить c(n) как результат циклической свертки, то необходимо дополнить a(n) и b(n) до длины N+M-1 отсчет, как это показано на рисунке 7.

Добавление нулей для приведения линейной свертки к циклической
Рисунок 7. Добавление нулей для приведения линейной свертки к циклической

К последовательности a(n) необходимо добавить M-1 ноль, а к последовательности b(n) — N-1 ноль. такое добавление нулей обеспечит увеличение периодичности циклического буфера до размера, когда a(n) и b(n) перестанут перекрываться циклически. В результате циклическая свертка будет иметь вид:

equation 15
(15)
Можно показать, что циклическая свертка (15) дополненных нулями последовательностей, соответствует расчету линейной свертки исходных сигналов. Чтобы убедиться в этом, достаточно использовать матричную запись циклической свертки, и расписать соответствующие элементы c(n), n = 0\ldots N+M-1. В результате выражения c(n) будут соответствовать линейной свертке.

Необходимо заметить, что добивать a(n) и b(n) нулями можно не только до длины N+M-1, но и до любой длины K \geq N+M-1. В результате вычисления циклической свертки дополненных нулями последовательностей до длины K, первый N+M-1 значение на выходе будет представлять собой линейную свертку, а остальные значения будут нулевыми. Это можно использовать для дополнения исходных последовательностей нулями до длины, которая допускает использование эффективных БПФ алгоритмов.

Например при N = 3000 и M = 4000, необходимо дополнить a(n) и b(n) нулями до длины N+M-1 = 6999. Однако мы можем дополнить их до длины K = 2^{13} = 8192 отсчетов и использовать БПФ по основанию два для расчета циклической свертки. При этом первые 6999 отсчетов результата циклической свертки будут представлять собой линейную свертку при N = 3000 и M = 4000. Использование алгоритма БПФ для K = 8192 приведет к десятикратному снижению требуемых вещественных умножителей при вычислении линейной свертки при N = 3000 и M = 4000.

Выводы

Таким образом, мы рассмотрели непрерывный интеграл свертки, который описывает реакцию линейного фильтра на произвольный входной сигнал.

Также было рассмотрено два вида дискретных сверток: линейная и циклическая, установлена связь между ними. Было показано, что применение БПФ обеспечивает существенное снижение вычислительных операций при вычислении как циклических, так и линейных сверток.

странице обсуждения статьи

Список литературы
[1] Колмогоров А.Н., Фомин С.В. Элементы теории функций и функционального анализа. Москва, Наука, 1968, 496 с.

[2] Winograd S. On Computing the Discrete Fourier Transform. MATHEMATICS OF COMPUTATION, 1978, Vol. 32, Num. 141, pp. 175–189

[3] Оппенгейм А., Шаффер Р. Цифровая обработка сигналов. Москва, Техносфера, 2012. 1048 с. ISBN 978-5-94836-329-5

[4] Сергиенко А.Б. Цифровая обработка сигналов СПб, Питер, 2002.

Последнее изменение страницы: 20.01.2024 (19:19:35)
Страница создана Latex to HTML translator ver. 5.20.11.14