Документация Engee

cconv

Круговая свертка по модулю n.

Библиотека

EngeeDSP

Синтаксис

Вызов функции

  • c = cconv(a,b) — выполняет циклическую свертку векторов a и b.

  • c = cconv(a,b,n) — выполняет циклическую свертку векторов a и b. Аргумент n — длина результирующего вектора. Функцию cconv также можно использовать для вычисления круговой взаимной корреляции двух последовательностей.

Аргументы

Входные аргументы

# a, b — входные массивы
векторы

Details

Входные массивы, заданные как векторы.

Типы данных

Float32, Float64

Поддержка комплексных чисел

Да

# n — длина свертки
положительное целое число

Details

Длина свертки, заданная как положительное целое число. Если аргумент n не задан, то свертка будет иметь длину length(a) + length(b) − 1.

Выходные аргументы

# c — круговая свертка
вектор

Details

Круговая свертка входных векторов, возвращаемая в виде вектора.

Примеры

Круговая свертка и линейная свертка

Details

Сгенерируем два сигнала разной длины. Сравним их круговую и линейную свертки. Используем значение аргумента n по умолчанию.

import EngeeDSP.Functions: cconv, conv, norm

a = [1 2 -1 1]
b = [1 1 2 1 2 2 1 1]

c = cconv(a, b)            # Circular convolution
cref = conv(a, b)          # Linear convolution

dif = norm(c - cref)
3.770748636149785e-15

Полученная норма практически равна нулю, что показывает, что обе свертки дают одинаковый результат с машинной точностью.

Круговая свертка

Details

Сгенерируем два вектора и вычислим их круговую свертку по модулю 4.

import EngeeDSP.Functions: cconv

a = [2 1 2 1]
b = [1 2 3 4]
c = cconv(a, b, 4)
1×4 Matrix{Float64}:
 14.0  16.0  14.0  16.0

Советы

Для длинных последовательностей круговая свертка может быть быстрее линейной.

Литература

  1. Orfanidis, Sophocles J. Introduction to Signal Processing. Englewood Cliffs, NJ: Prentice-Hall, 1996, pp. 524–529.