signal op• Data kinds: signal → pairs
• Call: import fullseye as fs; fs.ledger.spectrum(x, rate=1.0) (implementation को सीधे call करना हो तो import dsp; dsp.spectrum(x, rate=1.0), registry से लेना हो तो ops1d.get("spectrum"))
• Ledger के ज़रिए return value: fullseye.ledger.spectrum(...) केवल घोषित out type pairs का value लौटाता है (मूल function सहायक जानकारी भी लौटाता है)। जो हिस्सा छोड़ दिया गया है उसकी ज़रूरत हो तो fullseye.ledger.spectrum.raw(...) का उपयोग करें, या dsp.spectrum को सीधे call करें।
raw one-sided magnitude spectrum -> (freqs, magnitude) (np.fft.rfft)।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
Scaling convention — read this before comparing any number. *One-sided* describes the frequency axis, not the amplitude axis. rfft keeps only the non-negative frequencies, so freqs runs from 0 to rate/2 in len(x)//2 + 1 bins — but magnitude is the unnormalised |rfft(x)|. It is *not* an amplitude and it grows with len(x): the same tone recorded twice as long comes back twice as tall. Nothing here divides by N; the caller does, and the exact factor depends on the bin::
freqs, mag = spectrum(x, rate)
amp = mag * (2.0 / len(x)) # one-sided amplitude, bins 1 .. N/2-1
amp[0] /= 2.0 # DC has no mirror twin -> no factor 2
if len(x) % 2 == 0:
amp[-1] /= 2.0 # nor does the Nyquist bin of an even N
The factor is 2/N and not 1/N because a real sinusoid of amplitude A splits its energy over a positive and a negative frequency; rfft discards the negative half, so the surviving bin holds A*N/2. DC and (for even N) Nyquist are their own mirror image and are *not* doubled — applying 2/N to them reports twice the true level.
Measured, so the convention can be checked rather than assumed. A unit sine at a bin centre (rate = 25600 Hz, N = 25600, 3000 Hz, amplitude exactly 1.0): the returned mag at 3000 Hz is 12799.999999999998 (= N/2), and mag * 2/N is 0.9999999999999999. A constant signal of value 1.0 with N = 1024: mag[0] = 1024.0, so mag[0] * 1/N is exactly 1.0 while mag[0] * 2/N would claim 2.0. Likewise cos(pi n) (amplitude 1.0 at Nyquist, N = 1024): mag[-1] = 1024.0, * 1/N = 1.0, * 2/N = 2.0.
Everything scale-*invariant* — where the peak is, the spectral centroid, the bandwidth, a ratio between two bins — is unaffected by the convention, which is why signal_features can build on this directly. Everything absolute (an amplitude in the signal's own units, a dB level) needs the division above. acoustics.envelope_spectrum and acoustics.order_spectrum already return calibrated one-sided amplitudes (they apply their own 2/N internally) — do not apply the factor twice when comparing their output with this one.
• 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 में दिए गए हैं।
• acoustic_condition_monitoring — py -3.11 examples/acoustic_condition_monitoring.py
• poc_bearing_diagnosis — py -3.11 examples/poc_bearing_diagnosis.py
• poc_gear_tooth_metrology — py -3.11 examples/poc_gear_tooth_metrology.py
• poc_machine_condition_fusion — py -3.11 examples/poc_machine_condition_fusion.py
• poc_pipe_wall_loss — py -3.11 examples/poc_pipe_wall_loss.py
• poc_recycling_sorting — py -3.11 examples/poc_recycling_sorting.py
• poc_web_roll_periodicity — py -3.11 examples/poc_web_roll_periodicity.py
pairs को input के रूप में लेते हैं)—
signal)lowpass · highpass · bandpass · envelope · rms · local_std · quantize · companding_mu_law
*Provenance: dsp.py — ONED operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.