实施2D傅立叶变换的问题

时间:2019-10-20 15:41:51

标签: python

我想为Python实现2D傅里叶变换,为此我以1D格式实现了

import matplotlib.pyplot as plt
import numpy as np

lower_t = 0
upper_t = 70
lower_omega = -10
upper_omega = 10
mid_omega = (lower_omega + upper_omega) / 2
N = 501
t = np.linspace(lower_t, upper_t, N)
w = np.linspace(lower_omega, upper_omega, N)
interval = (upper_t - lower_t) / N
delta = 1
omega = 5
tau = 0.01

def g(t):
    return delta * (omega ** 2) * (tau ** 2) * ((np.e ** (-t/tau))+(t/tau)-1) 

def fft(ft):
    c = np.zeros((N), dtype = complex)
    for r in range(0,N,1):
        for s in range(0,N,1):
            c[r] = c[r] + np.e ** (1j * (w[r]-mid_omega) * t[s]) * ft[s] * interval
    return c

M = np.e ** (-t**2)
M_ft = np.abs(fft(M))


plt.plot(w,(M_ft).real)

enter image description here

但是,我在实现其2D变体时遇到了麻烦,我先在t3上应用1D,然后再在t1上应用它。到目前为止,这是我的代码,将傅里叶变换应用于2D高斯:

import matplotlib.pyplot as plt
import numpy as np

N = 11
lower_t1 = 0
upper_t1 = 10
t1 = np.linspace(lower_t1, upper_t1, N)
interval_t1 = (upper_t1 - lower_t1) / N
lower_t3 = 0
upper_t3 = 10
t3 = np.linspace(lower_t3, upper_t3, N)
interval_t3 = (upper_t3 - lower_t3) / N
t1,t3 = np.meshgrid(t1,t3)
lower_w1 = -1
upper_w1 = 1
mid_w1 = (upper_w1 + lower_w1) / 2
w1 = np.linspace(lower_w1, upper_w1, N)
lower_w3 = -1
upper_w3 = 1
mid_w3 = (upper_w3 + lower_w3) / 2
w3 = np.linspace(lower_w3, upper_w3, N)


def fft2(ft):
    c = np.zeros((N,N), dtype = complex)
    for r in range(0,N,1):
        for s in range(0,N,1):
            c[r,:] = c[r,:] + np.e ** (1j * (w3[r]-mid_w3) * t3[s,:]) * ft[s,:] * interval_t3 #t3 transform
            c[:,r] = c[:,r] + np.e ** (1j * (w1[r]-mid_w1) * t1[:,s]) * ft[:,s] * interval_t1 #t1 transform
    return c

L = np.e ** (-(t1 ** 2 + t3 ** 2))
L_ft = fft2(L)

enter image description here

如果我省略了t3或t1变换,它们都会给我互换的矩阵,从而表明我的代码至少对一维有效:

enter image description here enter image description here

似乎我的代码只是将两个值加在一起以获得“ 2D”傅里叶变换,这是我不想要的。我想在完成t3的傅里叶变换后应用t1的傅里叶变换。还有其他方法可以做到这一点吗?谢谢!

0 个答案:

没有答案