Мне трудно объяснить скачки после применения фильтра Фурье.Я реализовал его с помощью следующей функции:
def sharp2dZTh(u, rPos, deltaThR, deltaZ, th, z):
kTh=np.fft.fftfreq(len(th), d=th[1]-th[0])
kZ=np.fft.fftfreq(len(z), d=z[1]-z[0])
kThC=1/deltaThR
kZC=1/deltaZ
g=np.outer(np.heaviside(kThC-abs(2*kTh/rPos),1),np.heaviside(kZC-abs(2*kZ),1))
uFiltered=np.fft.ifft2(np.fft.fft2(u)*g)
return uFiltered.real
При получении среднего значения после реализации вышеуказанной функции из массива [LxMxN] в массив [L] получаются оранжевые линии: высокая частотапереходы по «резким» / оранжевым линиям
u - входная переменная (массив), rPos - константа, deltaThR и deltaZ - значения ширины фильтра (постоянные), th и z - позиционные аргументы (оба массива).Два других фильтра (Box и Gauss) реализованы аналогичным образом только с другим ядром (функция g в скрипте), однако они не показывают какого-либо конкретного поведения.Даже разделение с «rPos» сохраняется.
Странно, но если пропустить «rPos» в приведенном выше коде, все переходы исчезнут:
def sharp2dZTh(u, rPos, deltaThR, deltaZ, th, z):
kTh=np.fft.fftfreq(len(th), d=th[1]-th[0])
kZ=np.fft.fftfreq(len(z), d=z[1]-z[0])
kThC=1/deltaThR
kZC=1/deltaZ
g=np.outer(np.heaviside(kThC-abs(2*kTh),1),np.heaviside(kZC-abs(2*kZ),1))
uFiltered=np.fft.ifft2(np.fft.fft2(u)*g)
return uFiltered.real
Может быть, у некоторых из вас есть остроумное объяснение этому?
Бест, Дэн