Signal Quality¶
Metrics for assessing spectral data quality.
spectrakit.quality.quality_snr ¶
quality_snr(
intensities: ndarray,
*,
signal_range: tuple[int, int] | None = None,
noise_range: tuple[int, int] | None = None,
) -> float | np.ndarray
Estimate the signal-to-noise ratio of spectral data.
Two modes of operation:
- Explicit regions — provide both signal_range and noise_range
as
(start_idx, end_idx)index slices.SNR = mean(signal_region) / std(noise_region). - Automatic (2nd derivative) — omit both ranges. Noise is
estimated from
std(diff(intensities, n=2)) / sqrt(6)(white-noise correction). Signal is peak-to-peak amplitude.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
intensities
|
ndarray
|
Spectral intensities, shape |
required |
signal_range
|
tuple[int, int] | None
|
|
None
|
noise_range
|
tuple[int, int] | None
|
|
None
|
Returns:
| Type | Description |
|---|---|
float | ndarray
|
SNR value. Scalar |
float | ndarray
|
|
Raises:
| Type | Description |
|---|---|
SpectrumShapeError
|
If intensities is not 1-D or 2-D. |
EmptySpectrumError
|
If intensities has zero elements. |
ValueError
|
If only one of signal_range / noise_range is given. |
ValueError
|
If ranges produce empty slices or are out of bounds. |
ValueError
|
If spectrum has fewer than 3 points in automatic mode. |
Examples:
>>> import numpy as np
>>> from spectrakit import quality_snr
>>> clean = np.sin(np.linspace(0, 2 * np.pi, 200))
>>> quality_snr(clean)
32.1...
Source code in src/spectrakit/quality/snr.py
spectrakit.quality.quality_roughness ¶
Compute spectral roughness as the RMS of finite differences.
Lower values indicate smoother spectra; higher values indicate noisier or spikier data. Useful for comparing preprocessing outcomes or flagging low-quality acquisitions.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
intensities
|
ndarray
|
Spectral intensities, shape |
required |
order
|
int
|
Finite difference order (1 = first difference, 2 = second, etc.). Default is 1. |
DEFAULT_ORDER
|
Returns:
| Type | Description |
|---|---|
float | ndarray
|
Roughness value. Scalar |
float | ndarray
|
|
Raises:
| Type | Description |
|---|---|
SpectrumShapeError
|
If intensities is not 1-D or 2-D. |
EmptySpectrumError
|
If intensities has zero elements. |
ValueError
|
If order < 1 or order >= spectrum length. |
Examples:
>>> import numpy as np
>>> from spectrakit import quality_roughness
>>> smooth = np.sin(np.linspace(0, 2 * np.pi, 100))
>>> quality_roughness(smooth)
0.044...