DSPark 1.6.1
Header-only audio DSP framework in pure C++20 — zero dependencies
Loading...
Searching...
No Matches
AnalogConstants.h
Go to the documentation of this file.
1// DSPark -- Professional Audio DSP Framework
2// Copyright (c) 2026 Cristian Moresi -- MIT License
3
4#pragma once
5
27#include <array>
28
29namespace dspark {
30namespace AnalogRandom {
31
32//==============================================================================
33// Constants from research studies and hardware measurements
34//==============================================================================
35
36namespace NoiseConstants
37{
38 namespace Thermal
39 {
40 constexpr double BOLTZMANN_CONSTANT = 1.380649e-23; // J/K (exact, SI 2019)
41 constexpr double ROOM_TEMP_KELVIN = 293.15; // 20 degrees C
42 constexpr double TYPICAL_RESISTANCE = 1000.0; // ohms
43 constexpr double NOISE_BANDWIDTH = 20000.0; // Hz
44 }
45
46 namespace Shot
47 {
48 constexpr double ELEMENTARY_CHARGE = 1.602176634e-19; // coulombs (exact, SI 2019)
49 constexpr double TYPICAL_DC_CURRENT = 1.0e-3; // amperes
50 constexpr double AUDIO_BANDWIDTH = 20000.0; // Hz
51 }
52
53 namespace Flicker
54 {
55 constexpr double ALPHA_PINK = 1.0; // 1/f^alpha exponent
56 constexpr double ALPHA_BROWN = 2.0; // 1/f^alpha exponent
57 constexpr double SPECTRAL_SLOPE_DB_PER_OCTAVE_PINK = -3.0;
58 constexpr double SPECTRAL_SLOPE_DB_PER_OCTAVE_BROWN = -6.0;
59 }
60
61 namespace PracticalNoiseFloors
62 {
63 constexpr double NEVE_1073_EIN_DBU = -125.0; // EIN, 200 ohm source, max gain
64 constexpr double NEVE_1073_NOISE_LINE_DBU = -83.0; // line-amp noise
65 constexpr double API_512C_EIN = -129.0; // dBu, EIN at max gain
66 constexpr double LA_2A_NOISE_DB_BELOW_10DBM = -75.0; // spec: noise 75 dB below +10 dBm
67 constexpr double AMPEX_351_SNR_DB = 55.0;
68 constexpr double STUDER_C37_SNR_DB = 75.0;
69 constexpr double TAPE_NOISE_OFFSET_DB = 8.0;
70
71 constexpr std::array<double, 7> HUM_FREQUENCIES_HZ{ 50.0, 60.0, 100.0, 120.0, 180.0, 240.0, 300.0 };
72 constexpr std::array<double, 7> HUM_AMPLITUDES_DB{
73 -60.0, -55.0, -65.0, -70.0, -75.0, -80.0, -85.0
74 };
75 }
76}
77
78namespace SaturationConstants
79{
80 namespace General
81 {
82 constexpr double DRIVE_THRESHOLD_DB = -6.0;
83 constexpr double MAX_THD_PERCENTAGE = 0.07;
84 }
85
86 namespace Tube
87 {
88 constexpr double EVEN_HARMONIC_DOMINANCE_RATIO = 0.7;
89 constexpr std::array<double, 3> TRANSFER_FUNCTION_COEFFS{ 1.0, 0.5, 0.1 };
90 }
91
92 namespace Tape
93 {
94 constexpr double ODD_HARMONIC_DOMINANCE_RATIO = 0.6;
95 constexpr double SATURATION_THRESHOLD_DB = 0.0;
96 constexpr double HIGH_END_ROLL_OFF_HZ = 10000.0;
97 constexpr double LOW_END_BOOST_DB = 2.0;
98 }
99}
100
101namespace ComponentConstants
102{
103 namespace Resistors
104 {
105 constexpr double TOLERANCE_PERCENTAGE_1 = 1.0;
106 constexpr double TOLERANCE_PERCENTAGE_5 = 5.0;
107 constexpr double TOLERANCE_PERCENTAGE_10 = 10.0;
109 }
110
111 namespace Capacitors
112 {
115 constexpr double CURIE_POINT_TEMPERATURE_CELSIUS = 125.0;
116 }
117
118 namespace TransistorsValves
119 {
120 constexpr double GAIN_VARIATION_PERCENTAGE = 5.0;
121 constexpr double TEMPERATURE_SENSITIVITY_FACTOR = 0.1;
122 constexpr double AGING_FACTOR_GAIN_DRIFT = 0.2;
123 }
124
125 namespace Transformers
126 {
128 constexpr double HIGH_FREQUENCY_ROLL_OFF_HZ = 10000.0;
129 }
130}
131
132namespace EquipmentConstants
133{
134 namespace TapeMachines
135 {
136 constexpr double WOW_DEPTH_PERCENTAGE = 0.1;
137 constexpr double FLUTTER_DEPTH_PERCENTAGE = 0.15;
138 constexpr double TAPE_HISS_SNR_DB = 55.0;
139 constexpr double TAPE_SATURATION_THRESHOLD_DB = 0.0;
140 }
141
142 namespace Preamplifiers
143 {
144 constexpr double MAX_MIC_GAIN_DB = 80.0;
145 constexpr double EIN_AT_MAX_GAIN_DBU = -125.0;
146 constexpr double SATURATION_THRESHOLD_DB = -6.0;
147 constexpr double THD_PERCENTAGE = 0.07;
148 }
149
150 namespace Compressors
151 {
152 constexpr double MAX_GAIN_REDUCTION_DB = 40.0;
153 constexpr double THD_AT_10DBM_PERCENT = 0.35;
154 constexpr double FIXED_ATTACK_TIME_SECONDS = 0.01;
155 constexpr double FIXED_RELEASE_TIME_SECONDS = 0.5;
156 }
157
158 namespace Equalizers
159 {
160 constexpr std::array<double, 4> FREQUENCY_POINTS_LOW_HZ{ 20.0, 30.0, 60.0, 100.0 };
161 constexpr std::array<double, 3> FREQUENCY_POINTS_HIGH_HZ{ 3000.0, 5000.0, 10000.0 };
162 constexpr double BANDWIDTH_CONTROL_RANGE = 1.0;
163 }
164
165 namespace Consoles
166 {
167 constexpr double CROSSTALK_LEVEL_DB_AT_1KHZ = -70.0;
169 constexpr double VINTAGE_CROSSTALK_MULTIPLIER = 1.5;
170 constexpr double MODERN_CROSSTALK_MULTIPLIER = 0.5;
171 }
172}
173
174namespace VariationPercent
175{
176 constexpr float TapeMachine = 0.1f;
177 constexpr float VacuumTube = 5.0f;
178 constexpr float Transistor = 3.0f;
179 constexpr float Compressor = 1.5f;
180 constexpr float Equalizer = 1.0f;
181}
182
183} // namespace AnalogRandom
184} // namespace dspark
High-fidelity modular compressor designed for real-time applications.
Definition Compressor.h:88
Parametric multi-band EQ using cascaded biquads or FFT overlap-save convolution.
Definition Equalizer.h:57
Reel-to-reel tape emulation with physical hysteresis and transport.
Main namespace for the analog random generation library.
constexpr std::array< double, 4 > FREQUENCY_POINTS_LOW_HZ
constexpr std::array< double, 3 > FREQUENCY_POINTS_HIGH_HZ
constexpr std::array< double, 3 > TRANSFER_FUNCTION_COEFFS
Main namespace for the DSPark framework.