comparison cpp/chourdakisreiss2016cpp/Parameter.h @ 1:144fbd1d29c3

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