Как записать два вектора столбца в качестве аналитической свертки, чтобы можно было использовать дискретное БПФ. Используется синтаксис MATLAB.
Рассмотрим:
набор векторов, который при сортировке в пошаговую функцию выглядит следующим образом:
[1,1,1,1,0,0,0,0]
, или [1,1,1,1,1,0,0,0]
, или [1,1,1,1,1,1,0,0]
(... местоположение, в котором функция «повышается», зависит от членов этого набора)
Другой случайный vec=[1,0,1,0,1,1,1,0]
, и, очевидно, оба содержат только 0 и 1.
Можно ли записать эти векторы как аналитическую свертку? Я хотел бы, чтобы 1-я, 2-я, 3-я, 4-я ... записи свертки имели значения:
sum(vec.*[1,0,0,0,0,0,0,0])
sum(vec.*[1,1,0,0,0,0,0,0])
sum(vec.*[1,1,1,0,0,0,0,0])
sum(vec.*[1,1,1,1,0,0,0,0])
...
sum(vec.*[1,1,1,1,1,1,1,1])
Для скорости я стараюсь избегать использования цикла for. Я не могу векторизовать, потому что это требует терабайт оперативной памяти. (Я работаю с векторами длиной не 8, а почти миллион).
Теорема свертки дает функцию R из свертки функций L и 1 / w из преобразования Фурье F и его обратное F -1 as,
\[R(w) = \int {\frac{{L(w')}}{{w - w' + i{0^ + }}}dw'} = {F^{ - 1}}\left( {F\left( {L(w)} \right) \cdot F\left( {{\textstyle{1 \over w}}} \right)} \right)\]">
Очевидно, что функция 1 / (w-w ') в свертке составляет от 1 / w до F ; это как если бы вы просто установили w ' = 0. Но если я использую аналогичные рассуждения в своем [1,1,1,1,0,0,0,0]
, я получаю либо [1,1,1,1,1,1,1,1]
, тождество под .*
в MATLAB или [0,0,0,0,0,0,0,0]
(очень скучный результат).
Какая ошибка в моих рассуждениях?