29 lines
661 B
Python
29 lines
661 B
Python
|
|
import numpy as np
|
||
|
|
import time
|
||
|
|
|
||
|
|
# Kích thước ma trận
|
||
|
|
N = 256
|
||
|
|
M = 256
|
||
|
|
|
||
|
|
# === Tạo tín hiệu 2D (ví dụ: sóng sin theo hai chiều) ===
|
||
|
|
x = np.zeros((N, M))
|
||
|
|
for i in range(N):
|
||
|
|
for j in range(M):
|
||
|
|
x[i, j] = np.sin(2 * np.pi * 8 * i / N) + np.sin(2 * np.pi * 5 * j / M)
|
||
|
|
|
||
|
|
# === FFT 2D ===
|
||
|
|
t0 = time.time()
|
||
|
|
X = np.fft.fft2(x)
|
||
|
|
t1 = time.time()
|
||
|
|
print(f"FFT 2D time: {(t1 - t0) * 1e3:.2f} ms")
|
||
|
|
|
||
|
|
# === IFFT 2D ===
|
||
|
|
t2 = time.time()
|
||
|
|
x_rec = np.fft.ifft2(X)
|
||
|
|
t3 = time.time()
|
||
|
|
print(f"IFFT 2D time: {(t3 - t2) * 1e3:.2f} ms")
|
||
|
|
|
||
|
|
# === Kiểm tra độ chính xác ===
|
||
|
|
error = np.max(np.abs(x - x_rec.real))
|
||
|
|
print(f"Max reconstruction error: {error:.3e}")
|