Прыжки после отрезания Фурье - PullRequest
0 голосов
/ 25 октября 2018

Мне трудно объяснить скачки после применения фильтра Фурье.Я реализовал его с помощью следующей функции:

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

Может быть, у некоторых из вас есть остроумное объяснение этому?

Бест, Дэн

...