Loading

All articles

Handling Non-Uniformly Spaced Data Using NUFFT and Sinc Interpolation

Illustration for NUFFT and sinc interpolation of non-uniformly sampled MRI and geophysical signals

Min

UPDATED ON

Handling Non-Uniformly Spaced Data Using NUFFT and Sinc Interpolation

Illustration for NUFFT and sinc interpolation of non-uniformly sampled MRI and geophysical signals

Engineering summary

A six-step Python example that handles non-uniformly sampled data with pynufft, regrids it with cubic interpolation and reconstructs it using time-domain sinc interpolation.

In short: To process non-uniformly spaced data, apply a Non-Uniform FFT (NUFFT) directly to the irregular samples for frequency-domain analysis, or regrid the samples onto a uniform grid with cubic interpolation and then apply time-domain sinc interpolation (resampleSINC) for a band-limited reconstruction. The article's Python example uses pynufft, scipy interp1d and a sinc kernel on a 256-point two-tone test signal.

When processing non-uniformly spaced data in fields like MRI, radar, or geophysics, it’s crucial to use methods that can handle irregular sampling. In this blog, we discussed two important techniques: Non-Uniform FFT (NUFFT) and Time-domain Sinc Interpolation after regridding the data onto a uniform grid.

Here’s how we integrate both approaches using Python for practical applications.

Step-by-Step Workflow: NUFFT and ResampleSINC Interpolation

  1. Simulate Non-Uniformly Sampled Data: First, create a sinusoidal signal on a uniform grid, then sample it non-uniformly (like in MRI k-space).
  2. Apply NUFFT: Use NUFFT to handle the non-uniform data directly.
  3. Regrid Non-Uniform Data to Uniform Grid: Use interpolation methods like interp1d to map the data to a uniform grid.
  4. Apply ResampleSINC: Use the resampleSINC function for precise interpolation onto the uniform grid.

Let’s look at the complete Python code:

import numpy as np
import matplotlib.pyplot as plt
from pynufft import NUFFT
from scipy import interpolate

# Step 1: Generate a signal on a uniform grid
N = 256  # Number of points in the signal
x = np.linspace(0, 2*np.pi, N)
signal = np.sin(5*x) + np.sin(15*x)  # A test signal with two frequencies

# Step 2: Simulate non-uniform sampling
non_uniform_grid = np.sort(np.random.rand(N) * 2 * np.pi)

# Step 3: Perform NUFFT
nufft = NUFFT()
nufft.plan(non_uniform_grid, (N,), (256,))
signal_non_uniform = np.interp(non_uniform_grid, x, signal)
nufft_transform = nufft.forward(signal_non_uniform)

# Step 4: Regrid non-uniform data onto uniform grid using cubic interpolation
uniform_grid = np.linspace(0, 2*np.pi, N)
regridded_signal = interpolate.interp1d(non_uniform_grid, signal_non_uniform, kind='cubic')(uniform_grid)

# Step 5: Apply ResampleSINC for precise interpolation
def resampleSINC(signal, x, u):
    """
    Resample a signal using sinc interpolation in time domain
    Parameters:
    - signal : original signal on non-uniform grid
    - x : non-uniform grid
    - u : uniform grid to resample onto

    Returns:
    - interpolated_signal : the resampled signal on the uniform grid
    """
    interpolated_signal = np.zeros_like(u)

    for i in range(len(u)):
        interpolated_signal[i] = np.sum(signal * np.sinc((u[i] - x) / (x[1] - x[0])))

    return interpolated_signal

# Apply ResampleSINC on regridded signal
sinc_interpolated_signal = resampleSINC(regridded_signal, uniform_grid, uniform_grid)

# Step 6: Plot the results
plt.figure(figsize=(12, 6))

# Original and Non-Uniform Sampled Signal
plt.subplot(1, 2, 1)
plt.plot(x, signal, label='Original Signal')
plt.scatter(non_uniform_grid, signal_non_uniform, color='red', label='Non-uniform Samples')
plt.legend()
plt.title('Original and Non-Uniformly Sampled Signal')

# Sinc Interpolated Signal
plt.subplot(1, 2, 2)
plt.plot(x, signal, label='Original Signal')
plt.plot(uniform_grid, sinc_interpolated_signal, label='Sinc Interpolated Signal', linestyle='dashed')
plt.legend()
plt.title('Sinc Interpolation after Regridding')
plt.show()

Workflow Breakdown

  1. Simulate Non-Uniform Sampling: We create a simple sinusoidal signal on a uniform grid and simulate non-uniform sampling, common in MRI k-space.
  2. Regrid to Uniform Grid: Using cubic interpolation (interp1d from scipy), we map the non-uniform samples onto a uniform grid to facilitate subsequent operations like FFT or interpolation.
  3. ResampleSINC: The resampleSINC function is applied after regridding to precisely interpolate the signal onto a uniform grid. This technique uses sinc interpolation, which is ideal for band-limited signals when applied to uniformly spaced data.
  4. Plot Results: We visualize the original, non-uniform samples, and the signal reconstructed using sinc interpolation. As seen in the plot, the sinc-interpolated signal closely follows the original signal, providing an accurate reconstruction.

Conclusion

When working with non-uniformly spaced data, especially in fields like MRI or geophysics, it’s essential to use the right tools to process and reconstruct the signal. This blog demonstrated two key techniques:

  • NUFFT allows direct handling of non-uniform data without interpolation, providing accurate frequency-domain transforms.
  • ResampleSINC is ideal for signal reconstruction after regridding non-uniform data to a uniform grid, ensuring minimal distortion.

These methods, when used together, offer a powerful solution for handling non-uniformly sampled signals. By first regridding and then applying sinc interpolation, you ensure your final signal is both smooth and faithful to the original data.

Reference

Dr. Erol Kalkan, P.E. (2024). Time-domain Sinc Interpolation (Resampling) (https://www.mathworks.com/matlabcentral/fileexchange/59027-time-domain-sinc-interpolation-resampling), MATLAB Central File Exchange. Retrieved September 17, 2024.


If you’re dealing with non-uniform sampling in your field, contact QuakeLogic today for advanced solutions at info@quakelogic.net.

Let us show you how our state-of-the-art technologies can transform your signal processing workflows.

Key Takeaways

  • NUFFT (pynufft) transforms non-uniformly sampled data to the frequency domain without first interpolating.
  • scipy.interpolate.interp1d with kind='cubic' regrids irregular samples onto a 256-point uniform grid.
  • resampleSINC sums signal * sinc((u – x) / dx) over all samples, an exact reconstruction for band-limited uniformly sampled data.
  • The example signal is sin(5x) + sin(15x) on 0 to 2π with randomly placed non-uniform sample points.
  • The method follows Erol Kalkan's Time-domain Sinc Interpolation (Resampling) submission on MATLAB File Exchange.

Frequently Asked Questions

What is NUFFT and when should I use it instead of a regular FFT?

A Non-Uniform FFT (NUFFT) computes the Fourier transform of data whose sample points are irregularly spaced, which a standard FFT cannot accept. Use NUFFT when the data arrives on a non-uniform grid, as in MRI k-space, radar or geophysical surveys, and you need a frequency-domain result without first interpolating. In Python the pynufft package plans the transform from the sample positions and grid size, then calls forward() on the samples.

How does sinc interpolation reconstruct a non-uniformly sampled signal?

Sinc interpolation reconstructs a band-limited signal exactly from uniformly spaced samples by summing each sample multiplied by a sinc kernel centred on it. Because the kernel assumes uniform spacing, the workflow first regrids the irregular samples with cubic interpolation, then applies the resampleSINC function, which computes sum(signal * sinc((u – x) / dx)) for every output point u. The result follows the original signal closely with minimal distortion.

Why regrid with cubic interpolation before applying resampleSINC?

Time-domain sinc interpolation is only exact when the input samples lie on a uniform grid, so the irregular samples must be mapped onto one first. scipy.interpolate.interp1d with kind='cubic' provides a smooth, fast approximation of the signal at the uniform grid points; resampleSINC then refines that estimate with a band-limited kernel, giving a reconstruction that is both smooth and faithful to the original data.

Which Python libraries does the NUFFT and sinc interpolation workflow need?

The example uses NumPy for arrays and the sinc function, Matplotlib for plotting, pynufft for the NUFFT class with its plan and forward calls, and SciPy's interpolate module for cubic regridding. The resampleSINC function itself is a short pure-NumPy loop, so no additional dependency is required for the sinc stage of the workflow.

Can this workflow be applied to seismic or geophysical data?

Yes. Geophysics is one of the fields the method targets, alongside MRI and radar. Field sensors with irregular timestamps, gaps or uneven station spacing produce non-uniform samples that break standard FFT-based processing. Regridding followed by sinc resampling restores a uniform time series suitable for spectral analysis, while NUFFT gives a direct spectrum when interpolation should be avoided.

Need help with a project? QuakeLogic designs and supplies seismic monitoring, earthquake early warning, structural health monitoring, infrasound, and shake table systems. Browse QuakeLogic products or contact our engineering team with your site, structure, or test requirements.


Discover more from QuakeLogic

Subscribe to get the latest posts sent to your email.

Reviewed by

QuakeLogic

Published by QuakeLogic engineers and seismic monitoring specialists. QuakeLogic designs earthquake early warning, structural health monitoring, infrasound, vibration monitoring, and shake table testing systems for infrastructure, research, public safety, and industrial engineering teams.

Topic cluster

Related engineering knowledge areas

Definitions and references

Terms, standards, and source cues

  • seismic hazard: related to Earthquake Engineering in this QuakeLogic knowledge cluster.
  • ground motion: related to Earthquake Engineering in this QuakeLogic knowledge cluster.
  • SHM: related to Structural Health Monitoring in this QuakeLogic knowledge cluster.
  • damage detection: related to Structural Health Monitoring in this QuakeLogic knowledge cluster.
  • earthquake early warning: related to Earthquake Early Warning in this QuakeLogic knowledge cluster.
  • seismic switch: related to Earthquake Early Warning in this QuakeLogic knowledge cluster.
  • infrasound sensors: related to Infrasound Monitoring in this QuakeLogic knowledge cluster.
  • low-frequency noise: related to Infrasound Monitoring in this QuakeLogic knowledge cluster.

Need project support?

Talk with QuakeLogic about monitoring, testing, or warning systems.

Get engineering guidance for seismic monitoring, structural health monitoring, infrasound, vibration, earthquake early warning, and shake table applications.

Contact QuakeLogic

Author

SUBSCRIBE TO OUR NEWSLETTER

By subscribing to the newsletter, you agree to receive marketing emails from Quakelogic.

2008 Opportunity Dr. Suite 130,
Roseville, CA 95678, USA

Discover more from QuakeLogic

Subscribe now to keep reading and get access to the full archive.

Continue reading