Свёртка последовательностей — это результат перемножения элементов двух заданных числовых последовательностей таким образом, что члены одной последовательности берутся с возрастанием индексов, а члены другой — с убыванием (что и служит основанием для принятого названия данной операции).
Свёртка последовательностей — это частный случай свёртки функций.
Свёртка является линейным преобразованием входящих в неё последовательностей.
Свёртку двух заданных последовательностей можно получить, если, сначала, использовать для каждой последовательности дискретное преобразование Фурье (ДПФ), затем перемножить результаты преобразования и произвести обратное дискретное преобразование Фурье (обратное ДПФ). Это важное свойство находит своё широкое применение в цифровой обработке сигналов.
Различают периодическую и линейную свёртки, которые используются для периодических и конечных последовательностей соответственно.
К традиционным типам свёрток относятся:
Рассмотрим правила и последовательность расчёта каждого вида свертки.
Для расчёта линейной свертки необходимо выполнить такую последовательность действий:
В результате выполнения всех описанных выше операций получим линейную свёртку двух последовательностей.
Для получения круговой свертки (периодической) необходимо представить, что две последовательности располагаются на двух окружностях. Одна окружность находится внутри другой. Значения каждой из этих последовательностей равноудалены друг от друга. Для получения каждого значения круговой свертки необходимо представить, что одна из последовательностей движется по окружности относительно другой по часовой стрелке. К примеру, возьмем первое значение последовательности, которая вращается, последовательно умножим на значения другой последовательности и просуммируем результаты умножений — так получим первое значение выходной последовательности, которое было получено при помощи круговой свертки. Данные действия повторить для каждого значения последовательности, которая вращается относительно другой. Количество элементов в выходной последовательности будет равно количеству элементов последовательности, которая вращается.
Полученная последовательность эквивалентна свёртке двух периодических сигналов.
Для получения круговой свертки (апериодической) выполняется все те же операции, что и для получения круговой свертки, но при этом увеличить количество элементов до количества . Входные последовательности необходимо дополнить нулями до этого количества. При выполнении данного вида свертки устраняется эффект кругового наложения, который возникает при круговой свёртке.
Для выполнения свертки с помощью дискретного преобразования Фурье необходимо дополнить нулями обе входные последовательности так, чтобы количество элементов в этих последовательностях равнялось . Далее необходимо произвести прямое ДПФ по формуле прямого преобразования Фурье.
Далее производится поочередное умножение элементов первой последовательности с элементами второй последовательности. После производится обратное преобразование по формуле обратного преобразования Фурье, в результате которого получаем свёртку, рассчитанную с помощью ДПФ.
Для проверки правильности расчётов линейной, круговой (апериодической) или свертки с помощью ДПФ можно произвести дополнительно расчёт одной из двух других типов свертки так как выходные последовательности должны быть равны при одинаковых входных последовательностях.
Теорема. Пусть в пространстве заданы последовательности и , выберем одно произвольное измерение из , тогда результат операции свёртка , с последующим суммированием по есть эквивалентен предварительному суммированию и с последующей свёрткой . [1]
Ниже приведён пример реализации свертки, написанный на C++:
/*
* Размер выходной последовательности равен M + N - 1
*/
double * conv(double * x, int N, double * h, int M)
{
double * result = new double[N + M - 1];
memset(result, 0, sizeof(double) * (N + M - 1));
for (int i = 0; i < N + M - 1; i++)
{
for (int j = 0; j < N + M - 1; j++)
{
result[i] += x[j] * h[M-1-j]; // Kern_Rich.pdf
}
}
return result;
}
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .