LCOV - code coverage report
Current view: top level - Preamplifier - DempwolfTriodeFunction.h (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 23 23 100.0 %
Date: 2021-02-18 20:07:22 Functions: 8 8 100.0 %

          Line data    Source code
       1             : /**
       2             :  * \file DempwolfTriodeFunction.h
       3             :  * http://recherche.ircam.fr/pub/dafx11/Papers/76_e.pdf
       4             :  */
       5             : 
       6             : #ifndef ATK_PREAMPLIFIER_DEMPWOLFTRIODEFUNCTION_H
       7             : #define ATK_PREAMPLIFIER_DEMPWOLFTRIODEFUNCTION_H
       8             : 
       9             : #include <ATK/Utility/fmath.h>
      10             : 
      11             : #include <cmath>
      12             : 
      13             : namespace ATK
      14             : {
      15             :   /// A more complex triode model, used with TriodeFilter
      16             :   template <typename DataType_>
      17             :   class DempwolfTriodeFunction
      18             :   {
      19             :   private:
      20             :     const DataType_ G;
      21             :     const DataType_ mu;
      22             :     const DataType_ gamma;
      23             :     const DataType_ C;
      24             : 
      25             :     const DataType_ Gg;
      26             :     const DataType_ eta;
      27             :     const DataType_ Cg;
      28             :     const DataType_ Ig0;
      29             :     
      30             :     DataType_ CgVbe;
      31             :     DataType_ lnCgVbe;
      32             :     DataType_ powlnCgVbe;
      33             :     DataType_ CVceVbe;
      34             :     DataType_ lnCVceVbe;
      35             :     DataType_ powlnCVceVbe;
      36             :   public:
      37             :     /// For non static models
      38             :     const DataType_ Cpg;
      39             : 
      40             :     /// Compute grid current
      41       14025 :     DataType_ Lb(DataType_ Vbe, DataType_ Vce)
      42             :     {
      43       14025 :       CgVbe = fmath::exp(Cg * Vbe);
      44       14025 :       lnCgVbe = fmath::log(1 + CgVbe) / Cg;
      45       14025 :       powlnCgVbe = fmath::pow(lnCgVbe, eta - 1);
      46       14025 :       return Ig0 + Gg * lnCgVbe * powlnCgVbe;
      47             :     }
      48             :     
      49             :     /// Compute grid current derivative relative to the grid cathode voltage
      50       28050 :     DataType_ Lb_Vbe(DataType_ Vbe, DataType_ Vce)
      51             :     {
      52       28050 :       return Gg * eta * (CgVbe / (1 + CgVbe)) * powlnCgVbe;
      53             :     }
      54             :     
      55             :     /// Compute grid current derivative relative to the plate cathode voltage
      56       14025 :     DataType_ Lb_Vce(DataType_ Vbe, DataType_ Vce)
      57             :     {
      58       14025 :       return 0;
      59             :     }
      60             :     
      61             :     /// Compute plate current
      62       14025 :     DataType_ Lc(DataType_ Vbe, DataType_ Vce)
      63             :     {
      64       14025 :       CVceVbe = fmath::exp(C * (Vce / mu + Vbe));
      65       14025 :       lnCVceVbe = fmath::log(1 + CVceVbe) / C;
      66       14025 :       powlnCVceVbe = fmath::pow(lnCVceVbe, gamma - 1);
      67       14025 :       return G * lnCVceVbe * powlnCVceVbe - (Ig0 + Gg * lnCgVbe * powlnCgVbe);
      68             :     }
      69             :     
      70             :     /// Compute plate current derivative relative to the grid cathode voltage
      71       14025 :     DataType_ Lc_Vbe(DataType_ Vbe, DataType_ Vce)
      72             :     {
      73       14025 :       return G * gamma * (CVceVbe / (1 + CVceVbe)) * powlnCVceVbe - Lb_Vbe(Vbe, Vce);
      74             :     }
      75             :     
      76             :     /// Compute plate current derivative relative to the plate cathode voltage
      77       14025 :     DataType_ Lc_Vce(DataType_ Vbe, DataType_ Vce)
      78             :     {
      79       14025 :       return G * gamma * (CVceVbe / (1 + CVceVbe)) * powlnCVceVbe / mu;
      80             :     }
      81             :     
      82             :     /// Constructor
      83           1 :     DempwolfTriodeFunction(DataType_ G, DataType_ mu, DataType_ gamma, DataType_ C, DataType_ Gg, DataType_ eta, DataType_ Cg, DataType_ Ig0, DataType_ Cpg)
      84           1 :     :G(G), mu(mu), gamma(gamma), C(C), Gg(Gg), eta(eta), Cg(Cg), Ig0(Ig0), Cpg(Cpg)
      85             :     {
      86           1 :     }
      87             : 
      88             :     /// Build a new triode function for a filter (12AX7/ECC83)
      89           1 :     static DempwolfTriodeFunction build_standard_function(DataType_ G = 1.371e-3, DataType_ mu = 83.9, DataType_ gamma = 1.349, DataType_ C = 4.56, DataType_ Gg = 3.263e-4, DataType_ eta = 1.156, DataType_ Cg = 11.99, DataType_ Ig0 = 3.917e-8, DataType_ Cpg = 1.7e-12)
      90             :     {
      91           1 :       return DempwolfTriodeFunction(G, mu, gamma, C, Gg, eta, Cg, Ig0, Cpg);
      92             :     }
      93             : 
      94             :     /// Build a new triode function for a filter (12AX7/ECC83)
      95             :     static DempwolfTriodeFunction build_alternate_function_1()
      96             :     {
      97             :       return DempwolfTriodeFunction(2.242e-3, 103.2, 1.26, 3.40, 6.177e-4, 1.314, 9.901, 8.025e-8, 1.7e-12);
      98             :     }
      99             : 
     100             :     /// Build a new triode function for a filter (12AX7/ECC83)
     101             :     static DempwolfTriodeFunction build_alternate_function_2()
     102             :     {
     103             :       return DempwolfTriodeFunction(2.173e-3, 100.2, 1.28, 3.19, 5.911e-4, 1.358, 11.76, 4.527e-8, 1.7e-12);
     104             :     }
     105             : 
     106             :   };
     107             : }
     108             : 
     109             : #endif

Generated by: LCOV version TK-3.3.0-4-gdba42eea