python实现二元函数的离散傅里叶变换
时间: 2023-06-22 11:41:30 浏览: 122
下面是一个简单的Python程序,用于实现二元函数的离散傅里叶变换:
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义函数
def f(x, y):
return np.sin(x) + np.cos(y)
# 定义变换参数
nx = 32 # x轴方向采样点数
ny = 32 # y轴方向采样点数
# 生成采样点
x = np.linspace(0, 2 * np.pi, nx, endpoint=False)
y = np.linspace(0, 2 * np.pi, ny, endpoint=False)
xx, yy = np.meshgrid(x, y, indexing='ij')
z = f(xx, yy)
# 进行离散傅里叶变换
zk = np.fft.fftn(z)
# 计算频率
kx = np.fft.fftfreq(nx, 2 * np.pi / nx)
ky = np.fft.fftfreq(ny, 2 * np.pi / ny)
kxx, kyy = np.meshgrid(kx, ky, indexing='ij')
k = np.sqrt(kxx ** 2 + kyy ** 2)
# 绘制原函数和变换后的函数
fig, axes = plt.subplots(nrows=1, ncols=2)
axes[0].imshow(z, extent=(0, 2 * np.pi, 0, 2 * np.pi))
axes[0].set_title("Original function")
axes[1].imshow(np.abs(zk), extent=(-nx / 2, nx / 2, -ny / 2, ny / 2))
axes[1].set_title("Discrete Fourier Transform")
plt.show()
# 绘制频率谱
plt.imshow(np.abs(zk), extent=(-nx / 2, nx / 2, -ny / 2, ny / 2))
plt.colorbar()
plt.xlabel("kx")
plt.ylabel("ky")
plt.show()
```
在这个程序中,我们首先定义了一个二元函数f(x,y),然后生成了采样点并计算了函数在这些采样点上的值。接着,我们使用numpy库的fft函数进行了离散傅里叶变换,得到了函数在频域上的表示。最后,我们绘制了原函数和变换后的函数,并绘制了频率谱。你可以根据需要修改函数和采样点的定义,以及变换的参数。
阅读全文