Python scipy.fftpack.ifftshift() Examples
The following are 13
code examples of scipy.fftpack.ifftshift().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
scipy.fftpack
, or try the search function
.
Example #1
Source File: fft.py From pysteps with BSD 3-Clause "New" or "Revised" License | 6 votes |
def get_numpy(shape, fftn_shape=None, **kwargs): import numpy.fft as numpy_fft f = { "fft2": numpy_fft.fft2, "ifft2": numpy_fft.ifft2, "rfft2": numpy_fft.rfft2, "irfft2": lambda X: numpy_fft.irfft2(X, s=shape), "fftshift": numpy_fft.fftshift, "ifftshift": numpy_fft.ifftshift, "fftfreq": numpy_fft.fftfreq, } if fftn_shape is not None: f["fftn"] = numpy_fft.fftn fft = SimpleNamespace(**f) return fft
Example #2
Source File: fft.py From pysteps with BSD 3-Clause "New" or "Revised" License | 6 votes |
def get_scipy(shape, fftn_shape=None, **kwargs): import numpy.fft as numpy_fft import scipy.fftpack as scipy_fft # use numpy implementation of rfft2/irfft2 because they have not been # implemented in scipy.fftpack f = { "fft2": scipy_fft.fft2, "ifft2": scipy_fft.ifft2, "rfft2": numpy_fft.rfft2, "irfft2": lambda X: numpy_fft.irfft2(X, s=shape), "fftshift": scipy_fft.fftshift, "ifftshift": scipy_fft.ifftshift, "fftfreq": scipy_fft.fftfreq, } if fftn_shape is not None: f["fftn"] = scipy_fft.fftn fft = SimpleNamespace(**f) return fft
Example #3
Source File: math_op.py From ocelot with GNU General Public License v3.0 | 5 votes |
def convolve(f, g): """ FFT based convolution :param f: array :param g: array :return: array, (f * g)[n] """ f_fft = fftpack.fftshift(fftpack.fftn(f)) g_fft = fftpack.fftshift(fftpack.fftn(g)) return fftpack.fftshift(fftpack.ifftn(fftpack.ifftshift(f_fft*g_fft)))
Example #4
Source File: math_op.py From ocelot with GNU General Public License v3.0 | 5 votes |
def deconvolve(f, g): """ FFT based deconvolution :param f: array :param g: array :return: array, """ f_fft = fftpack.fftshift(fftpack.fftn(f)) g_fft = fftpack.fftshift(fftpack.fftn(g)) return fftpack.fftshift(fftpack.ifftn(fftpack.ifftshift(f_fft/g_fft)))
Example #5
Source File: test_helper.py From Computable with MIT License | 5 votes |
def test_definition(self): x = [0,1,2,3,4,-4,-3,-2,-1] y = [-4,-3,-2,-1,0,1,2,3,4] assert_array_almost_equal(fftshift(x),y) assert_array_almost_equal(ifftshift(y),x) x = [0,1,2,3,4,-5,-4,-3,-2,-1] y = [-5,-4,-3,-2,-1,0,1,2,3,4] assert_array_almost_equal(fftshift(x),y) assert_array_almost_equal(ifftshift(y),x)
Example #6
Source File: test_helper.py From Computable with MIT License | 5 votes |
def test_inverse(self): for n in [1,4,9,100,211]: x = random((n,)) assert_array_almost_equal(ifftshift(fftshift(x)),x)
Example #7
Source File: test_helper.py From GraphicDesignPatternByPython with MIT License | 5 votes |
def test_definition(self): x = [0,1,2,3,4,-4,-3,-2,-1] y = [-4,-3,-2,-1,0,1,2,3,4] assert_array_almost_equal(fftshift(x),y) assert_array_almost_equal(ifftshift(y),x) x = [0,1,2,3,4,-5,-4,-3,-2,-1] y = [-5,-4,-3,-2,-1,0,1,2,3,4] assert_array_almost_equal(fftshift(x),y) assert_array_almost_equal(ifftshift(y),x)
Example #8
Source File: test_helper.py From GraphicDesignPatternByPython with MIT License | 5 votes |
def test_inverse(self): for n in [1,4,9,100,211]: x = random.random((n,)) assert_array_almost_equal(ifftshift(fftshift(x)),x)
Example #9
Source File: fractals.py From gprMax with GNU General Public License v3.0 | 5 votes |
def generate_fractal_surface(self, G): """Generate a 2D array with a fractal distribution. Args: G (class): Grid class instance - holds essential parameters describing the model. """ if self.xs == self.xf: surfacedims = (self.ny, self.nz) elif self.ys == self.yf: surfacedims = (self.nx, self.nz) elif self.zs == self.zf: surfacedims = (self.nx, self.ny) self.fractalsurface = np.zeros(surfacedims, dtype=complextype) # Positional vector at centre of array, scaled by weighting v1 = np.array([self.weighting[0] * (surfacedims[0]) / 2, self.weighting[1] * (surfacedims[1]) / 2]) # 2D array of random numbers to be convolved with the fractal function R = np.random.RandomState(self.seed) A = R.randn(surfacedims[0], surfacedims[1]) # 2D FFT A = fftpack.fftn(A) # Shift the zero frequency component to the centre of the array A = fftpack.fftshift(A) # Generate fractal generate_fractal2D(surfacedims[0], surfacedims[1], G.nthreads, self.b, self.weighting, v1, A, self.fractalsurface) # Shift the zero frequency component to start of the array self.fractalsurface = fftpack.ifftshift(self.fractalsurface) # Take the real part (numerical errors can give rise to an imaginary part) of the IFFT self.fractalsurface = np.real(fftpack.ifftn(self.fractalsurface)) # Scale the fractal volume according to requested range fractalmin = np.amin(self.fractalsurface) fractalmax = np.amax(self.fractalsurface) fractalrange = fractalmax - fractalmin self.fractalsurface = self.fractalsurface * ((self.fractalrange[1] - self.fractalrange[0]) / fractalrange) \ + self.fractalrange[0] - ((self.fractalrange[1] - self.fractalrange[0]) / fractalrange) * fractalmin
Example #10
Source File: __funcs__.py From porespy with MIT License | 5 votes |
def two_point_correlation_fft(im): r""" Calculates the two-point correlation function using fourier transforms Parameters ---------- im : ND-array The image of the void space on which the 2-point correlation is desired Returns ------- result : named_tuple A tuple containing the x and y data for plotting the two-point correlation function, using the *args feature of matplotlib's plot function. The x array is the distances between points and the y array is corresponding probabilities that points of a given distance both lie in the void space. Notes ----- The fourier transform approach utilizes the fact that the autocorrelation function is the inverse FT of the power spectrum density. For background read the Scipy fftpack docs and for a good explanation see: http://www.ucl.ac.uk/~ucapikr/projects/KamilaSuankulova_BSc_Project.pdf """ # Calculate half lengths of the image hls = (np.ceil(np.shape(im))/2).astype(int) # Fourier Transform and shift image F = sp_ft.ifftshift(sp_ft.fftn(sp_ft.fftshift(im))) # Compute Power Spectrum P = np.absolute(F**2) # Auto-correlation is inverse of Power Spectrum autoc = np.absolute(sp_ft.ifftshift(sp_ft.ifftn(sp_ft.fftshift(P)))) tpcf = _radial_profile(autoc, r_max=np.min(hls)) return tpcf
Example #11
Source File: fourier_transform.py From diffsims with GNU General Public License v3.0 | 5 votes |
def convolve(arr1, arr2, dx=None, axes=None): """ Performs a centred convolution of input arrays Parameters ---------- arr1, arr2 : `numpy.ndarray` Arrays to be convolved. If dimensions are not equal then 1s are appended to the lower dimensional array. Otherwise, arrays must be broadcastable. dx : float > 0, list of float, or `None` , optional Grid spacing of input arrays. Output is scaled by `dx**max(arr1.ndim, arr2.ndim)`. default=`None` applies no scaling axes : tuple of ints or `None`, optional Choice of axes to convolve. default=`None` convolves all axes """ if arr2.ndim > arr1.ndim: arr1, arr2 = arr2, arr1 if axes is None: axes = range(arr2.ndim) arr2 = arr2.reshape(arr2.shape + (1,) * (arr1.ndim - arr2.ndim)) if dx is None: dx = 1 elif isscalar(dx): dx = dx ** (len(axes) if axes is not None else arr1.ndim) else: dx = prod(dx) arr1 = fftn(arr1, axes=axes) arr2 = fftn(ifftshift(arr2), axes=axes) out = ifftn(arr1 * arr2, axes=axes) * dx return require(out, requirements="CA")
Example #12
Source File: aps.py From PyRate with Apache License 2.0 | 5 votes |
def _slp_filter(phase, cutoff, rows, cols, x_size, y_size, params): """ Function to perform spatial low pass filter """ cx = np.floor(cols/2) cy = np.floor(rows/2) # fft for the input image imf = fftshift(fft2(phase)) # calculate distance distfact = 1.0e3 # to convert into meters [xx, yy] = np.meshgrid(range(cols), range(rows)) xx = (xx - cx) * x_size # these are in meters as x_size in meters yy = (yy - cy) * y_size dist = np.sqrt(xx ** 2 + yy ** 2)/distfact # km if params[cf.SLPF_METHOD] == 1: # butterworth low pass filter H = 1. / (1 + ((dist / cutoff) ** (2 * params[cf.SLPF_ORDER]))) else: # Gaussian low pass filter H = np.exp(-(dist ** 2) / (2 * cutoff ** 2)) outf = imf * H out = np.real(ifft2(ifftshift(outf))) out[np.isnan(phase)] = np.nan return out # out is units of phase, i.e. mm # TODO: use tiles here and distribute amongst processes
Example #13
Source File: fractals.py From gprMax with GNU General Public License v3.0 | 4 votes |
def generate_fractal_volume(self, G): """Generate a 3D volume with a fractal distribution. Args: G (class): Grid class instance - holds essential parameters describing the model. """ # Scale filter according to size of fractal volume if self.nx == 1: filterscaling = np.amin(np.array([self.ny, self.nz])) / np.array([self.ny, self.nz]) filterscaling = np.insert(filterscaling, 0, 1) elif self.ny == 1: filterscaling = np.amin(np.array([self.nx, self.nz])) / np.array([self.nx, self.nz]) filterscaling = np.insert(filterscaling, 1, 1) elif self.nz == 1: filterscaling = np.amin(np.array([self.nx, self.ny])) / np.array([self.nx, self.ny]) filterscaling = np.insert(filterscaling, 2, 1) else: filterscaling = np.amin(np.array([self.nx, self.ny, self.nz])) / np.array([self.nx, self.ny, self.nz]) # Adjust weighting to account for filter scaling self.weighting = np.multiply(self.weighting, filterscaling) self.fractalvolume = np.zeros((self.nx, self.ny, self.nz), dtype=complextype) # Positional vector at centre of array, scaled by weighting v1 = np.array([self.weighting[0] * self.nx / 2, self.weighting[1] * self.ny / 2, self.weighting[2] * self.nz / 2]) # 3D array of random numbers to be convolved with the fractal function R = np.random.RandomState(self.seed) A = R.randn(self.nx, self.ny, self.nz) # 3D FFT A = fftpack.fftn(A) # Shift the zero frequency component to the centre of the array A = fftpack.fftshift(A) # Generate fractal generate_fractal3D(self.nx, self.ny, self.nz, G.nthreads, self.b, self.weighting, v1, A, self.fractalvolume) # Shift the zero frequency component to the start of the array self.fractalvolume = fftpack.ifftshift(self.fractalvolume) # Take the real part (numerical errors can give rise to an imaginary part) of the IFFT self.fractalvolume = np.real(fftpack.ifftn(self.fractalvolume)) # Bin fractal values bins = np.linspace(np.amin(self.fractalvolume), np.amax(self.fractalvolume), self.nbins) for j in range(self.ny): for k in range(self.nz): self.fractalvolume[:, j, k] = np.digitize(self.fractalvolume[:, j, k], bins, right=True)