angular_resample — ACOUSTICS order op

• Data kinds: signal → table

• Call: import fullseye as fs; fs.ledger.angular_resample(x, rate, rpm, samples_per_rev=64) (implementation को सीधे call करना हो तो import acoustics; acoustics.angular_resample(x, rate, rpm, samples_per_rev=64), registry से लेना हो तो opsacoustics.get("angular_resample"))

उपयोग

time record को shaft-angle axis पर resample करता है (computed order tracking)।

> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।

Under a changing shaft speed, a component locked to the shaft has a moving frequency and smears across the spectrum, while a structural resonance stays put. Resample the record so the samples are equally spaced in shaft angle instead of in time and the situation reverses exactly: the order becomes a single line and the resonance smears.

rpm is either a single number (constant speed — the transform is then a pure rescaling) or a per-sample array on the same clock as the signal. The cumulative revolution count is the trapezoidal integral of rpm/60, and the signal is linearly interpolated onto a uniform grid in it.

Returns a dict — an angle-domain record is not put into circulation as a plain signal, deliberately. Its samples are indexed by angle, not time, so handing it to any op that takes a rate would produce frequencies in Hz from an axis measured in revolutions: no exception, no NaN, just wrong numbers. (Same judgement, and the same reason, as motionmag.motion_magnify not exposing a bare video adapter.) The dict carries signal, angle_rev, samples_per_rev, revolutions (total), whole_revolutions, rate (the original time-domain one, for provenance), mean_rpm, max_order.

max_order is samples_per_rev / 2 — the Nyquist of the *angle* axis.

Measured: a pure order-3.5 component on a 600 -> 1800 rpm ramp, resampled at 64 samples/rev over 78 whole revolutions, reads amplitude 0.999371 in a single bin of the order spectrum; the same component in the ordinary spectrum peaks at 0.070203 and is 66.5 Hz wide.

Raises ValueError: everything _as_signal refuses, a non-positive or wrong-length rpm, samples_per_rev outside [2, 65536], an output over MAX_ANGULAR_SAMPLES, fewer than one complete revolution in the record, and — the aliasing refusal — a samples_per_rev whose implied Nyquist order needs content above the time-domain Nyquist. Asking for 64 samples/rev on a shaft turning at 30 Hz means representing 960 Hz, which a 100 Hz recording does not contain; the resampler would happily manufacture it from the interpolation.

उपयोग की विस्तृत guide

• acoustic_condition_monitoring family guide

संदर्भ (sample data, साहित्य)

• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।

• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।

• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• acoustic_condition_monitoring — py -3.11 examples/acoustic_condition_monitoring.py

वे अगले ops जिनसे type जुड़ता है (table को input के रूप में लेते हैं)

istft

इसी category के (order)

order_spectrum


*Provenance: acoustics.py — ACOUSTICS operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.