Source: https://guthlabs.ai/docs/instruments/sample-rate-nyquist-adc-resolution-calculator/mechanism/

instrument mechanism / verified-with-binding-errata

# Sample Rate / Nyquist & ADC Resolution Calculator mechanism

The inspectable method record for Sample Rate / Nyquist & ADC Resolution Calculator, kept separate from implementation and qualification.

Status: **VERIFIED_WITH_ERRATA**Lifecycle: **verified-with-binding-errata**

## Model scope

The honest-label statement is appropriate but should be expanded to state that the SNR result applies to an ideal ADC driven by a full-scale sine wave. The specification needs an explicit definition of signal_bandwidth as fmax, or additional bandpass start/stop-frequency inputs; therefore it cannot receive an unconditional PASS.

- fs≥2fmax is valid for a baseband, band-limited signal when fmax means the highest frequency component; the input is called signal bandwidth, which is not generally equal to fmax for a bandpass signal.

- The equality fs=2fmax is an ideal theoretical boundary; practical sampling normally requires fs>2fmax plus an anti-aliasing filter guard band.

- LSB=Vref/2^N assumes Vref is the total unipolar ADC input span divided into exactly 2^N equal code intervals. It is not universally correct if Vref means a maximum endpoint, for bipolar ranges, or for a specified ADC code-width convention.

- SNR(dB)≈6.02N+1.76 is the ideal quantization SNR for a full-scale sine wave with an ideal ADC and uniformly distributed quantization error; it is not a general SNR for arbitrary signal amplitudes or real ADCs.

- The phrase 'Nyquist limit' is ambiguous because the formula computes the minimum sample rate for a specified highest input frequency, whereas the Nyquist frequency is normally fs/2.

## Units and conventions

- signal_bandwidth_hz is interpreted as the highest frequency fmax of a baseband signal, not merely occupied bandwidth.

- All frequency inputs and outputs use hertz; 1 MHz=1,000,000 Hz and 1 kHz=1,000 Hz.

- adc_bits is a nonnegative integer N.

- vref_v is a positive voltage span in volts for a unipolar ADC.

- LSB output is in volts per code.

- SNR is in decibels and assumes a full-scale sine-wave input to an ideal ADC.

## Inspectable vector

One of 4 source-bound review vectors:

````
{
  "inputs": {
    "signal_bandwidth_hz": 20000,
    "adc_bits": 12,
    "vref_v": 3.3
  },
  "expected_outputs": {
    "min_sample_rate_hz": 40000,
    "lsb_v": 0.0008056640625,
    "theoretical_snr_db": 73.76
  },
  "working": "Assume 20,000 Hz is fmax. Minimum sample rate = 2×fmax = 2×20,000 = 40,000 Hz. LSB = Vref/2^N = 3.3/2^12 = 3.3/4096 = 0.0008056640625 V. SNR = 6.02N+1.76 = 6.02×12+1.76 = 72.24+1.76 = 73.76 dB."
}
````

## Failure boundary

- Reject negative frequency, negative ADC bit depth, non-integer bit depth, and nonpositive Vref inputs.

- Prevent division by zero or invalid results when Vref is zero or when ADC bit depth is invalid.

- A bandpass signal cannot be assigned a valid minimum sample rate from bandwidth alone; its frequency location is also required unless the input is explicitly defined as fmax.

- Sampling exactly at 2fmax provides no practical guard band and can be sensitive to phase and filtering; recommend a strict greater-than condition or an explicit practical-margin option.

- The ideal SNR formula does not account for ENOB, thermal noise, clock jitter, distortion, reference noise, front-end noise, or non-full-scale signal amplitude.

- Clarify whether the displayed Nyquist quantity is minimum sample rate or Nyquist frequency.

## Other records

[01**Overview**](<https://guthlabs.ai/docs/instruments/sample-rate-nyquist-adc-resolution-calculator/>)[03**Implementation**](<https://guthlabs.ai/docs/instruments/sample-rate-nyquist-adc-resolution-calculator/implementation/>)[04**Qualification**](<https://guthlabs.ai/docs/instruments/sample-rate-nyquist-adc-resolution-calculator/qualification/>)

## Sources and evidence

These pointers bind the page to evidence. They do not grant authority or collapse verification into deployment.

- `VERIFIED_LEDGER.json`

- `evidence-tranche5/tranche5-results.json`
