annotate cpp/chourdakisreiss2016cpp/Parameter.h @ 2:c87a9505f294 tip

Added LICENSE for code, removed .wav files
author Emmanouil Theofanis Chourdakis <e.t.chourdakis@qmul.ac.uk>
date Sat, 30 Sep 2017 13:25:50 +0100
parents 144fbd1d29c3
children
rev   line source
e@1 1 /*
e@1 2 * Parameter.h
e@1 3 *
e@1 4 * Created on: Dec 14, 2016
e@1 5 * Author: Emmanouil Theofanis Chourdakis <e.t.chourdakis@qmul.ac.uk>
e@1 6 *
e@1 7 * For using that code in research please cite:
e@1 8 *
e@1 9 *
e@1 10 @Article{dlib09,
e@1 11 author = {Davis E. King},
e@1 12 title = {Dlib-ml: A Machine Learning Toolkit},
e@1 13 journal = {Journal of Machine Learning Research},
e@1 14 year = {2009},
e@1 15 volume = {10},
e@1 16 pages = {1755-1758},
e@1 17 }
e@1 18 *
e@1 19 *
e@1 20 */
e@1 21
e@1 22 #ifndef PARAMETER_H_
e@1 23 #define PARAMETER_H_
e@1 24
e@1 25 #include "limits.hpp"
e@1 26 #include <dlib/optimization.h>
e@1 27 #include <iostream>
e@1 28
e@1 29 /*
e@1 30 * Normalization function
e@1 31 */
e@1 32
e@1 33 #define _N(f, fmin, fmax) ((f-fmin) / (fmax-fmin))
e@1 34
e@1 35 using namespace dlib;
e@1 36 using namespace std;
e@1 37
e@1 38 typedef matrix<double,0,1> column_vector;
e@1 39
e@1 40 class Parameter {
e@1 41 private:
e@1 42
e@1 43 /*
e@1 44 * D1: First Comb Filter Delay
e@1 45 * G1: First Comb Filter Gain
e@1 46 * DA: All-pass Filter Delay
e@1 47 * GA (in limits.hpp): All-pass Filter gain
e@1 48 * GC: Low-pass Filter Gain
e@1 49 * G: Dry/Wet Mix
e@1 50 *
e@1 51 */
e@1 52
e@1 53 double D1, DA, G1, GC, G;
e@1 54
e@1 55 /*
e@1 56 * T60: Reverberation Time
e@1 57 * ED: Echo Density
e@1 58 * C: Clarity
e@1 59 * TC: Central Time
e@1 60 * SC: Spectral Centroid
e@1 61 * SC_MAX: Maximum Spectral Centroid (depends on sample rate)
e@1 62 *
e@1 63 */
e@1 64
e@1 65 double T60, ED, C, TC, SC, SC_MAX;
e@1 66
e@1 67 double SampleRate;
e@1 68
e@1 69 friend std::ostream& operator<<(std::ostream &s, const Parameter &p);
e@1 70
e@1 71 static double compute_T60(double _D1, double _G1, double _GC, double _G);
e@1 72 static double compute_ED(double _D1, double _DA);
e@1 73 static double compute_C(double _G1, double _GC, double _G);
e@1 74 static double compute_TC(double _D1, double _G1, double _DA);
e@1 75 static double compute_SC(double _GC, double _SR);
e@1 76
e@1 77 /*
e@1 78 * Functions used in computing the inverse mapping/
e@1 79 */
e@1 80
e@1 81 static double TC_G1_D1_ED(double _D1, double _G1, double _ED, double t=0.1);
e@1 82 static double T60_D1_G1_C(double _D1, double _G1, double _GC, double _C);
e@1 83 static double D1_G1_T60_C(double _G1, double _GC, double _T60, double _C);
e@1 84 static double G_G1_C(double _G1, double _GC, double _C);
e@1 85 static double DA_D1_ED(double _D1, double _ED, double t=0.1);
e@1 86
e@1 87 /*
e@1 88 * Function to minimize.
e@1 89 */
e@1 90
e@1 91 static double GC_SC(double _SC, double SR);
e@1 92 static double errorfunc(double _G1, double _GC, const matrix<double, 4, 1> &Target);
e@1 93 static matrix <double, 5, 1> inverse_mapping(double _T60, double _ED, double _C, double _TC, double _SC, double SampleRate, double _G1);
e@1 94
e@1 95
e@1 96 public:
e@1 97 Parameter(double SR=44100.0,
e@1 98 double _D1 = 0.05,
e@1 99 double _DA = 0.006,
e@1 100 double _G1 = 0.5,
e@1 101 double _GC = 0.5,
e@1 102 double _G = 0.5,
e@1 103 double _T60 = 0.423289,
e@1 104 double _ED = 6927.08,
e@1 105 double _C = -0.107798,
e@1 106 double _TC = 0.0490677,
e@1 107 double _SC = 6419.15
e@1 108 );
e@1 109 virtual ~Parameter();
e@1 110 double getC() const;
e@1 111 void setC(double c);
e@1 112 double getD1() const;
e@1 113 void setD1(double d1);
e@1 114 double getDa() const;
e@1 115 void setDa(double da);
e@1 116 double getEd() const;
e@1 117 void setEd(double ed);
e@1 118 double getG() const;
e@1 119 void setG(double g);
e@1 120 double getG1() const;
e@1 121 void setG1(double g1);
e@1 122 double getGc() const;
e@1 123 void setGc(double gc);
e@1 124 double getSampleRate() const;
e@1 125 void setSampleRate(double sampleRate);
e@1 126 double getSc() const;
e@1 127 void setSc(double sc);
e@1 128 double getT60() const;
e@1 129 void setT60(double t60);
e@1 130 double getTc() const;
e@1 131 void setTc(double tc);
e@1 132
e@1 133 /* compute functions */
e@1 134
e@1 135 /*
e@1 136 * Low level -> High level
e@1 137 */
e@1 138
e@1 139 int set_low_and_compute(double D1, double DA, double G1, double GC, double G);
e@1 140 int get_low_and_computer();
e@1 141
e@1 142 /*
e@1 143 * High level -> Low level
e@1 144 */
e@1 145
e@1 146 int set_high_and_compute(double T60, double ED, double C, double TC, double SC);
e@1 147 int get_high_and_compute();
e@1 148
e@1 149
e@1 150 };
e@1 151
e@1 152
e@1 153
e@1 154 #endif /* PARAMETER_H_ */