Даже если ваш код создает гауссовское PDF с нулевым средним:
sample=np.linspace(end,-end,1000)
pdf=norm(0,1).pdf(sample)
БПФ не знает о sample
и видит pdf
только с выборками в 0, 1, 2, 3, ... 999. БПФ ожидает, что источником будет первая выборка сигнала. Для функции FFT ваш PDF не равен нулю, но имеет среднее значение 500.
Таким образом, здесь происходит добавление двух PDF-файлов со средним значением 500, что приводит к одному со средним значением 1000. А поскольку БПФ налагает периодичность на сигнал пространственной области, вы видите, что PDF выходит из графика справа и возвращается слева.
Добавление 3 PDF-файлов сдвигает среднее значение до 1500, что из-за периодичности равно 500, что означает, что оно заканчивается в том же месте, что и исходный PDF.
Решение состоит в том, чтобы сместить начало координат к первому образцу для БПФ и вернуть результат обратно:
from scipy.fftpack import fftshift, ifftshift
pdf2 = fftshift(ifft(fft(ifftshift(pdf))**2))
ifftshift
смещает сигнал так, чтобы центральный сэмпл заканчивался на первом сэмпле, а fftshift
смещает его обратно туда, где вы хотели его отобразить.
Но учтите, что при создании PDF исходная точка не является образцом, поэтому вышеприведенное не будет работать точно. Вместо этого используйте:
sample=np.linspace(end,-end,1001)
pdf=norm(0,1).pdf(sample)
При выборе 1001 выборки вместо 1000, ноль находится точно на средней выборке.