Mercurial > hg > chourdakisreiss2016
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_ */ |