Напишите два вектора как свертку - PullRequest
0 голосов
/ 23 марта 2019

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

Рассмотрим:

  1. набор векторов, который при сортировке в пошаговую функцию выглядит следующим образом:

    [1,1,1,1,0,0,0,0], или [1,1,1,1,1,0,0,0], или [1,1,1,1,1,1,0,0]

    (... местоположение, в котором функция «повышается», зависит от членов этого набора)

  2. Другой случайный 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,

image\[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] (очень скучный результат).

Какая ошибка в моих рассуждениях?

...