首页 > 解决方案 > 使用 numpy 进行快速傅立叶变换时将输入数组加倍

问题描述

我写了一个函数,它返回网格的快速四变换的实部。

def take_FFT(x):
    # some arbitrary field for a 1D grid
    y = abs(1.0/x)
    # compute FFT (in general multi-dimensional) array of real numbers
    y_k = np.fft.rfftn(y)

    #compute the inverse FFT
    y_invk = np.fft.irfftn(y_k)
    return y,y_k, y_invk # return fourier transform and inv transform

# initialize sample x
x_test = np.arange(-5,5,0.001)

field,FFT_test, inv_test = take_FFT(x_test)

如何制作适当的新“x 数组”来针对 FFT 进行绘图?我不清楚如何制作一个长度 = (n/2)+1 的数组,就像 np.fft.irfftn 返回的那个

标签: pythonnumpyfft

解决方案


获取要使用的频率数组的最简单方法np.fft.rfft是使用方便的辅助函数np.fft.rfftfreq

freqs = np.rfftfreq(x_test)

的多维等价物np.fft.rfftn稍微复杂一些。您将需要沿每个轴获取频率,然后使用np.meshgrid

per_axis_freq = [np.fft.fftfreq(N) for N in x_test.shape[0:-1]]
per_axis_freq.append(np.fft.rfftfreq(x_test.shape[-1]))
freqs = np.meshgrid(*per_axis_freq[::-1])

推荐阅读