Engineering methods
A Deterministic DSP Workbench for Vibration Analysis
Use a known synthetic signal to check sampling, spectral scaling and processing-graph semantics before interpreting an unfamiliar measurement.

Start with a signal whose answer is known
A spectrum is easier to trust after the analysis chain reproduces a simple reference. Begin with a synthetic signal that has known frequencies, amplitudes, sample rate and length. Keep its units explicit. This tests the analysis settings without confusing software behavior with sensor mounting, calibration or field noise.
REI SignalLab provides a browser-facing workspace for signals, spectra and typed processing graphs. Its source repository documents backend operations and numerical tests separately from optional deployed features. A live interface alone does not prove that every backend path is available.
Check one-sided amplitude scaling explicitly
Consider 128 samples at 128 samples per second: a unit-amplitude 8 Hz sine plus a 0.25-amplitude 20 Hz sine. Both tones complete an integer number of cycles within the observation interval. The bin spacing is 1 Hz. The following direct projection uses only Python's standard library; it illustrates two DFT bins rather than implementing a fast FFT.
import cmath
import math
fs, n = 128.0, 128
x = [math.sin(2*math.pi*8*i/fs)
+ 0.25*math.sin(2*math.pi*20*i/fs) for i in range(n)]
def amplitude(k):
z = sum(v*cmath.exp(-2j*math.pi*k*i/n) for i, v in enumerate(x))
return 2*abs(z)/n
assert abs(amplitude(8)-1.0) < 1e-12
assert abs(amplitude(20)-0.25) < 1e-12The factor of two applies to the interior positive-frequency bins of this real-valued example. DC and the Nyquist bin need separate treatment. Windowed data also needs the appropriate amplitude normalization. A power spectral density is a different quantity, with different scaling and units; do not label it as a peak-amplitude spectrum.
Treat the window and observation interval as inputs
A tone that does not complete an integer number of cycles over the captured interval spreads across bins under a rectangular window. Selecting a different window changes leakage and amplitude interpretation. Record the window definition and normalization with the transform result.
Zero-padding provides a denser display of the same finite record's spectrum. It does not create a longer observation or resolve two physical components that the original record cannot separate. Similarly, raising the displayed maximum frequency does not recover information removed by sampling and the analog acquisition chain.
For averaged spectral estimation, the SciPy Welch reference documents segment length, overlap and scaling. Preserve those parameters when comparing outputs from different tools.
Make graph semantics visible
A processing graph should distinguish a time signal from a spectrum and a scalar from a vector. An output with the right array length can still carry the wrong semantic type. Validate port compatibility, sample-rate propagation and graph cycles before executing nodes.
A deterministic topological scheduler defines an execution order for an acyclic graph. Repeatability still depends on node implementations, numerical libraries and the declared environment. Do not infer identical results across every backend or floating-point platform from the graph algorithm alone.
Keep field interpretation separate
Passing the two-tone example verifies a limited software calculation. It does not validate an accelerometer's sensitivity, prove a bearing diagnosis or authorize a machine correction. Field interpretation also depends on operating speed, sensor direction, mounting, acquisition limits and a credible failure model.
Reproducible workflow
- Save the synthetic input definition and expected bin amplitudes.
- Record sample rate, units, length, window and normalization.
- Compare amplitude spectra and density estimates as different quantities.
- Validate graph types and reject cycles before execution.
- Investigate a numerical mismatch before interpreting a physical signal.
Open SignalLab inside Rootcastle and inspect the public source and testing notes. Begin with a synthetic example and verify which services the current deployment exposes before relying on an optional workflow.
Explore Rootcastle engineering tools → · Public profiles and publications


