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}")