Signal Generation (siggen)
The siggen module provides tools for generating test signals.
Signal Generation Module for ADC Testing
Provides signal generators and non-ideality appliers for simulating various ADC imperfections and effects.
- class adctoolbox.siggen.ADC_Signal_Generator(N, Fs, Fin, A, DC)[源代码]
基类:
objectGenerates ADC test signals with various non-idealities using the Applier Pattern.
Each method accepts optional input_signal parameter. If None, uses clean base signal. Methods return signal with non-ideality applied. Supports chaining multiple effects.
- 参数:
- apply_thermal_noise(input_signal=None, noise_rms=5e-05)[源代码]
Apply white thermal noise. Params: input_signal (None->clean), noise_rms (default 50e-6).
- apply_quantization_noise(input_signal=None, n_bits=10, quant_range=(0.0, 1.0))[源代码]
Apply quantization noise. Params: quant_range: tuple (v_min, v_max), e.g., (0, 1) or (-0.5, 0.5).
- apply_jitter(input_signal=None, jitter_rms=2e-12)[源代码]
Apply sampling jitter.
Logic: - Case 1 (Source Generation): If input_signal is None, regenerates from scratch (Perfect Precision). - Case 2 (Chain Processing): If input is provided, uses Cubic Spline interpolation (Preserves previous errors).
- apply_static_nonlinearity(input_signal=None, k2=0, k3=0, k4=0, k5=0)[源代码]
Applies static nonlinear distortion to the signal using direct polynomial coefficients (k2 to k5).
- apply_static_nonlinearity_hd(input_signal=None, hd2_dB=None, hd3_dB=None, hd4_dB=None, hd5_dB=None)[源代码]
Converts specified Harmonic Distortion levels (dBc) to polynomial coefficients and applies the nonlinearity.
- apply_memory_effect(input_signal=None, memory_strength=0.009)[源代码]
Apply memory effect (charge injection). The previous MSB decision leaks back to the input. Params: input_signal, memory_strength (default 0.009).
- apply_incomplete_sampling(input_signal=None, T_track=None, tau_nom=4e-11, coeff_k=0.15)[源代码]
Apply dynamic nonlinearity (tracking/settling). Models slew-rate and signal-dependent settling errors. Params: input_signal, T_track, tau_nom (default 40ps), coeff_k (default 0.15).
- apply_ra_gain_error(input_signal=None, relative_gain=0.99, msb_bits=4, lsb_bits=12)[源代码]
Apply interstage gain error (2-stage pipeline ADC). Params: input_signal, relative_gain (default 0.99 = 1% error).
- apply_ra_gain_error_dynamic(input_signal=None, relative_gain=1, coeff_3=0.15, msb_bits=4, lsb_bits=12)[源代码]
Applies dynamic gain error to the interstage residue amplifier in a pipeline ADC. G[n] is non-linearly dependent on the previous residue output magnitude (V_prev_ac^3), modeling HD3 memory effects.
- apply_reference_error(input_signal=None, settling_tau=2.0, droop_strength=0.01)[源代码]
Apply Reference Incomplete Settling error (Vref Memory Effect).
This simulates the reference voltage dropping due to load current (kick) and failing to recover fully before the next sample.
- Params:
input_signal: The input signal. settling_tau: Recovery time constant in units of samples (e.g., 2.0).
Larger = Slower recovery = Worse settling.
droop_strength: How much Vref drops proportional to signal amplitude (0.01 = 1%).
- apply_am_noise(input_signal=None, strength=0.01)[源代码]
Apply random AM noise (Multiplicative Thermal Noise). Params:
input_signal: The signal to modulate. am_noise_depth: The RMS level of the noise relative to signal amplitude (default 0.1).
备注
There is NO frequency parameter here because white noise contains ALL frequencies.
- apply_am_tone(input_signal=None, am_tone_freq=500000.0, am_tone_depth=0.05)[源代码]
Apply AM tone (coherent modulation). Params: input_signal, am_tone_freq (default 500kHz), am_tone_depth (default 0.05).
- apply_clipping(input_signal=None, percentile_clip=1.0)[源代码]
Apply hard clipping based on signal's percentile (e.g., 1.0 clips top/bottom 1%).
- apply_drift(input_signal=None, drift_scale=5e-05)[源代码]
Apply drift (low-frequency random walk). Params: input_signal, drift_scale (default 5e-5).
- apply_glitch(input_signal=None, glitch_prob=0.00015, glitch_amplitude=0.1)[源代码]
Apply random glitches. Params: input_signal, glitch_prob (default 0.00015 = 0.015%), glitch_amplitude (default 0.1).
- apply_noise_shaping(input_signal=None, n_bits=10, quant_range=(0.0, 1.0), order=1)[源代码]
Apply noise-shaped quantization (1st to 5th order delta-sigma).
Noise Transfer Function: NTF(z) = (1 - z^-1)^order
Order characteristics: - 1st order: 20 dB/decade roll-off (common in basic delta-sigma) - 2nd order: 40 dB/decade roll-off (most common for oversampling ADCs) - 3rd order: 60 dB/decade roll-off (aggressive shaping) - 4th order: 80 dB/decade roll-off (maximum practical, stability concerns) - 5th order: 100 dB/decade roll-off (rarely used, high stability risk)
This method applies actual quantization (using apply_quantization_noise), then shapes the quantization error spectrum using the NTF filter. Pushes quantization noise to higher frequencies, improving in-band SNR.
- Params:
input_signal: Input signal (None -> clean sine wave) n_bits: Quantizer resolution (default 10) quant_range: Quantization range (v_min, v_max), e.g., (0, 1) or (-0.5, 0.5) order: Noise shaping order (1, 2, 3, 4, or 5, default 1)
- 返回:
Signal with noise-shaped quantization noise added
- 抛出:
ValueError -- If order is not in [1, 2, 3, 4, 5]