Обе convolve
и fft
являются круглыми .Первым элементом свертки должно быть скалярное произведение этих двух рядов.Полученные вами результаты являются правильными в этом смысле.
Для выполнения линейной свертки используйте:
convolve(h2$xt,x2$xt,type="open")
В этом случае также применяется круговая свертка, но необходимое количество нулей добавляется к входамдля достижения линейной свертки.
Я считаю, что нет прямого способа добиться линейной свертки с fft
в R. Однако это не имеет большого значения, поскольку convolve
сам использует подход FFT, который вы опубликовали.
Круговая свертка
Дискретный сигнал x является периодическим, если существует период N такой, что x [n] =x [n + N] для всех n .Такие сигналы могут быть представлены N выборками от x [0] до x [N-1] .
... x[-2] x[-1] x[0] x[1] x[2] ... x[N-2] x[N-1] x[N] x[N+1] ...
^ this part is sufficient ^
Aопределение свертки между апериодическими x и y определяется как:
(x * y)[n] = sum{k in [-inf, inf]}(x[k]y[n-k])
Однако для периодических сигналов эта формула не даетконечные результаты.Чтобы преодолеть эту проблему, мы определяем круговую свертку между периодическими x и y .
(x * y)[n] = sum{k in [0, N-1]}(x[i]y[n-k])
Когда эти два сигнала представлены с помощью *Только 1054 * N значений, мы можем использовать y [n-k + N] вместо y [nk] для отрицательных значений nk .
Крутая вещь с круговой сверткой заключается в том, что она может вычислять линейную свертку между прямоугольными сигналами, которые являются дискретными сигналами с конечным числом ненулевых элементов.
прямоугольные сигналы длиной N могут подаваться в круговую свертку с периодичностью 2N , N для исходных образцов и N с нулями, дополненными вконец.Результатом будет круговая свертка с 2N выборками с 2N-1 для линейной свертки и дополнительным нулем.
Циркулярная свертка обычно быстрее, чем прямая линейная сверткареализации, поскольку он может использовать быстрое преобразование Фурье , быстрый алгоритм для вычисления дискретного преобразования Фурье , которое определено только для периодических дискретных сигналов.
Пожалуйста, смотрите:
Также смотрите: