def fft2d(f): (Nr, Nc) = f.shape F = np.zeros((Nr, Nc), dtype=complex) for m in range(Nr): F[m,:] = mm.fft(f[m,:]) for n in range(Nc): F[:,n] = mm.fft(F[:,n]) return(F)
import math import cmath import numpy as np import imageio import MyModule as mm import time x=[1,2,3,4] x1=mm.complex_idft(mm.complex_dft(x)) x2=mm.complex_idft(mm.fft(x)) x3=mm.ifft(mm.complex_dft(x)) x4=mm.ifft(mm.fft(x)) y=[5,6,7,8] output1=mm.conv(x,y) output2=mm.ifft(mm.fft(x)*mm.fft(y)) img=imageio.imread('lena.png')#[256-128:256+128,256-128:256+128] t1=time.time() imageio.imwrite('lenareconstructed.png',mm.ifft2d(mm.fft2d(img))) t2=time.time() print('img ifft takes %10.2f sec' %( t2-t1))
fc=0.08 Nc=int(fc*N) for n in range(Nc): LP[n]=1.0 LP[(N-n+N) % N]=1.0 plt.plot(np.abs(LP)) lp=mm.ifft(LP) lpr=np.zeros((N),dtype=complex) lpr[:N//2],lpr[N//2:]=lp[N//2:],lp[:N//2] plt.plot(lpr.real) #plt.plot(lp.real) lp_trimed = np.zeros((N),dtype=complex) lp_trimed[N//2-M//2:N//2+M//2]=lpr[N//2-M//2:N//2+M//2] LP_trimed=mm.fft(lp_trimed) plt.plot(np.abs(LP_trimed)) plt.plot(lp_trimed.real) '''lp-windowed 0.54-0.46cos(2pi*n/M)''' window=np.zeros((N),dtype=complex) for n in range(M): window[N//2-M//2+n]=0.54-0.46*math.cos(2*math.pi*n/M) lp_windowed=lpr*window LP_windowed=mm.fft(lp_windowed) plt.plot(lp_windowed.real) plt.plot(np.abs(LP_windowed)) '''hp-windowed'''