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
- Simulate Non-Uniformly Sampled Data: First, create a sinusoidal signal on a uniform grid, then sample it non-uniformly (like in MRI k-space).
- Apply NUFFT: Use NUFFT to handle the non-uniform data directly.
- Regrid Non-Uniform Data to Uniform Grid: Use interpolation methods like
interp1dto map the data to a uniform grid. - Apply ResampleSINC: Use the
resampleSINCfunction 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
- Simulate Non-Uniform Sampling: We create a simple sinusoidal signal on a uniform grid and simulate non-uniform sampling, common in MRI k-space.
- Regrid to Uniform Grid: Using cubic interpolation (
interp1dfromscipy), we map the non-uniform samples onto a uniform grid to facilitate subsequent operations like FFT or interpolation. - ResampleSINC: The
resampleSINCfunction 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. - 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
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.
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.
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.
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.
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.
Related Articles
- Calculating Background Seismic Noise Levels: A Step-by-Step Guide
- Linearity, Repeatability and Phase Lag in Digital Sensors
- How to Compute the PGA, PGV, PGD and Response Spectrum of Ground Motion Using Python
- The Doppler Effect: A Powerful Tool for Structural Health Monitoring
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.
Related
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
- Earthquake EngineeringSeismic hazard, ground motion, structural response, fragility, and resilience guidance.
- Structural Health MonitoringMonitoring for bridges, buildings, dams, tunnels, industrial facilities, and resilient infrastructure.
- Earthquake Early WarningOn-site detection, alerting workflows, seismic switches, and critical infrastructure warning systems.
- Infrasound MonitoringLow-frequency acoustic sensing for environmental noise, blast, UAV, volcano, and defense applications.
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.
Next reading
Related engineering articles
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.

