Свёртка последовательностей: различия между версиями

[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Добавил более простой код, который действительно соответствует с++
м Ёфикация с помощью скрипта-ёфикатора
Строка 18:
 
== Расчёт свёрток ==
Рассмотрим правила и последовательность расчёта каждого вида сверткисвёртки.
 
=== РасчетРасчёт линейной свёртки ===
Для расчёта линейной сверткисвёртки необходимо выполнить такую последовательность действий:
* произвести расчёт количества элементов выходной последовательности по формуле:
 
Строка 39:
В результате выполнения всех описанных выше операций получим линейную свёртку двух последовательностей.
 
=== РасчетРасчёт периодической круговой свёртки ===
Для получения круговой сверткисвёртки (периодической) необходимо представить, что две последовательности располагаются на двух окружностях. Одна окружность находится внутри другой. Значения каждой из этих последовательностей равноудалены друг от друга. Для получения каждого значения круговой сверткисвёртки необходимо представить, что одна из последовательностей движется по окружности относительно другой по часовой стрелке. К примеру, возьмемвозьмём первое значение последовательности, которая вращается, последовательно умножим на значения другой последовательности и просуммируем результаты умножений — так получим первое значение выходной последовательности, которое было получено при помощи круговой сверткисвёртки. Данные действия повторить для каждого значения последовательности, которая вращается относительно другой. Количество элементов в выходной последовательности будет равно количеству элементов последовательности, которая вращается.
 
Полученная последовательность эквивалентна свёртке двух периодических сигналов.
 
=== РасчетРасчёт апериодической круговой свёртки ===
Для получения круговой сверткисвёртки (апериодической) выполняется все те же операции, что и для получения круговой сверткисвёртки, но при этом увеличить количество элементов до количества <math>N_{out}</math>. Входные последовательности необходимо дополнить нулями до этого количества. При выполнении данного вида сверткисвёртки устраняется эффект кругового наложения, который возникает при круговой свёртке.
 
=== Выполнение сверткисвёртки с помощью ДПФ ===
Для выполнения сверткисвёртки с помощью дискретного преобразования Фурье необходимо дополнить нулями обе входные последовательности так, чтобы количество элементов в этих последовательностях равнялось <math>N_{out}</math>. Далее необходимо произвести прямое ДПФ по формуле [[Дискретное преобразование Фурье|прямого преобразования Фурье]].
 
Далее производится поочередноепоочерёдное умножение элементов первой последовательности с элементами второй последовательности. После производится обратное преобразование по формуле [[Дискретное преобразование Фурье|обратного преобразования Фурье]], в результате которого получаем свёртку, рассчитанную с помощью ДПФ.
 
Для проверки правильности расчётов линейной, круговой (апериодической) или сверткисвёртки с помощью ДПФ можно произвести дополнительно расчёт одной из двух других типов сверткисвёртки так как выходные последовательности должны быть равны при одинаковых входных последовательностях.
 
== Теорема об уменьшении размерности пространства при свёртке ==
Строка 58:
 
== Пример программы ==
Ниже приведён пример реализации сверткисвёртки, написанный на [[С++|C++]]:
<source lang="cpp">
/*
Строка 78:
== См. также ==
* [[Периодическая свёртка]]
* [[Секционная сверткасвёртка]]
 
== Примечания ==