23#ifndef FILTERMODELCONFIG_H
24#define FILTERMODELCONFIG_H
48 static constexpr double Ut = 26.0e-3;
57 const double vmin, vmax;
58 const double denorm, norm;
63 const double voice_voltage_range;
64 const double voice_DC_voltage;
72 unsigned short* summer[5];
73 unsigned short* volume[16];
74 unsigned short* resonance[16];
84 inline double getVoiceVoltage(
float value)
const
86 return value * voice_voltage_range + voice_DC_voltage;
113 void setUCox(
double new_uCox);
126 const double r_N16 = 1. /
N16;
128 for (
int i = 0; i < 5; i++)
130 const int idiv = 2 + i;
131 const int size = idiv << 16;
132 const double n = idiv;
133 const double r_idiv = 1. / idiv;
135 summer[i] =
new unsigned short[size];
137 for (
int vi = 0; vi < size; vi++)
139 const double vin = vmin + vi * r_N16 * r_idiv;
140 summer[i][vi] = getNormalizedValue(opampModel.
solve(n, vin));
155 const double r_N16 = 1. /
N16;
157 for (
int i = 0; i < 8; i++)
159 const int idiv = (i == 0) ? 1 : i;
160 const int size = (i == 0) ? 1 : i << 16;
161 const double n = i * nRatio;
162 const double r_idiv = 1. / idiv;
164 mixer[i] =
new unsigned short[size];
166 for (
int vi = 0; vi < size; vi++)
168 const double vin = vmin + vi * r_N16 * r_idiv;
169 mixer[i][vi] = getNormalizedValue(opampModel.
solve(n, vin));
183 const double r_N16 = 1. /
N16;
185 for (
int n8 = 0; n8 < 16; n8++)
187 const int size = 1 << 16;
188 const double n = n8 / nDivisor;
190 volume[n8] =
new unsigned short[size];
192 for (
int vi = 0; vi < size; vi++)
194 const double vin = vmin + vi * r_N16;
195 volume[n8][vi] = getNormalizedValue(opampModel.
solve(n, vin));
209 const double r_N16 = 1. /
N16;
211 for (
int n8 = 0; n8 < 16; n8++)
213 const int size = 1 << 16;
215 resonance[n8] =
new unsigned short[size];
217 for (
int vi = 0; vi < size; vi++)
219 const double vin = vmin + vi * r_N16;
220 resonance[n8][vi] = getNormalizedValue(opampModel.
solve(resonance_n[n8], vin));
226 unsigned short** getVolume() {
return volume; }
227 unsigned short** getResonance() {
return resonance; }
228 unsigned short** getSummer() {
return summer; }
229 unsigned short** getMixer() {
return mixer; }
231 virtual Integrator* buildIntegrator() = 0;
233 inline unsigned short getOpampRev(
int i)
const {
return opamp_rev[i]; }
234 inline double getVddt()
const {
return Vddt; }
235 inline double getVth()
const {
return Vth; }
238 inline unsigned short getNormalizedValue(
double value)
const
240 const double tmp =
N16 * (value - vmin);
241 assert(tmp > -0.5 && tmp < 65535.5);
242 return static_cast<unsigned short>(tmp + 0.5);
245 inline unsigned short getNormalizedCurrentFactor(
double wl)
const
248 assert(tmp > -0.5 && tmp < 65535.5);
249 return static_cast<unsigned short>(tmp + 0.5);
252 inline unsigned short getNVmin()
const
254 const double tmp =
N16 * vmin;
255 assert(tmp > -0.5 && tmp < 65535.5);
256 return static_cast<unsigned short>(tmp + 0.5);
259 inline int getNormalizedVoice(
float value)
const
261 return static_cast<int>(getNormalizedValue(getVoiceVoltage(value)));
Definition FilterModelConfig.h:40
void buildVolumeTable(const OpAmp &opampModel, double nDivisor)
Definition FilterModelConfig.h:181
const double Vdd
Positive supply voltage.
Definition FilterModelConfig.h:50
unsigned short * mixer[8]
Lookup tables for gain and summer op-amps in output stage / filter.
Definition FilterModelConfig.h:71
void buildResonanceTable(const OpAmp &opampModel, const double resonance_n[16])
Definition FilterModelConfig.h:207
double uCox
Transconductance coefficient: u*Cox.
Definition FilterModelConfig.h:53
const double Vddt
Vdd - Vth.
Definition FilterModelConfig.h:52
double currFactorCoeff
Current factor coefficient for op-amp integrators.
Definition FilterModelConfig.h:67
const double C
Capacitor value.
Definition FilterModelConfig.h:43
unsigned short opamp_rev[1<< 16]
Reverse op-amp transfer function.
Definition FilterModelConfig.h:78
static constexpr double Ut
Transistor parameters.
Definition FilterModelConfig.h:48
const double Vth
Threshold voltage.
Definition FilterModelConfig.h:51
void buildMixerTable(const OpAmp &opampModel, double nRatio)
Definition FilterModelConfig.h:153
const double N16
Fixed point scaling for 16 bit op-amp output.
Definition FilterModelConfig.h:61
void buildSummerTable(const OpAmp &opampModel)
Definition FilterModelConfig.h:124
double solve(double n, double vi) const
Definition OpAmp.cpp:33
void reset() const
Definition OpAmp.h:103