Mercurial > hg > chourdakisreiss2016
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cpp/chourdakisreiss2016cpp/Parameter.h Wed Dec 28 17:22:49 2016 +0000 @@ -0,0 +1,154 @@ +/* + * Parameter.h + * + * Created on: Dec 14, 2016 + * Author: Emmanouil Theofanis Chourdakis <e.t.chourdakis@qmul.ac.uk> + * + * For using that code in research please cite: + * + * +@Article{dlib09, + author = {Davis E. King}, + title = {Dlib-ml: A Machine Learning Toolkit}, + journal = {Journal of Machine Learning Research}, + year = {2009}, + volume = {10}, + pages = {1755-1758}, +} + * + * + */ + +#ifndef PARAMETER_H_ +#define PARAMETER_H_ + +#include "limits.hpp" +#include <dlib/optimization.h> +#include <iostream> + +/* + * Normalization function + */ + +#define _N(f, fmin, fmax) ((f-fmin) / (fmax-fmin)) + +using namespace dlib; +using namespace std; + +typedef matrix<double,0,1> column_vector; + +class Parameter { +private: + + /* + * D1: First Comb Filter Delay + * G1: First Comb Filter Gain + * DA: All-pass Filter Delay + * GA (in limits.hpp): All-pass Filter gain + * GC: Low-pass Filter Gain + * G: Dry/Wet Mix + * + */ + + double D1, DA, G1, GC, G; + + /* + * T60: Reverberation Time + * ED: Echo Density + * C: Clarity + * TC: Central Time + * SC: Spectral Centroid + * SC_MAX: Maximum Spectral Centroid (depends on sample rate) + * + */ + + double T60, ED, C, TC, SC, SC_MAX; + + double SampleRate; + + friend std::ostream& operator<<(std::ostream &s, const Parameter &p); + + static double compute_T60(double _D1, double _G1, double _GC, double _G); + static double compute_ED(double _D1, double _DA); + static double compute_C(double _G1, double _GC, double _G); + static double compute_TC(double _D1, double _G1, double _DA); + static double compute_SC(double _GC, double _SR); + + /* + * Functions used in computing the inverse mapping/ + */ + + static double TC_G1_D1_ED(double _D1, double _G1, double _ED, double t=0.1); + static double T60_D1_G1_C(double _D1, double _G1, double _GC, double _C); + static double D1_G1_T60_C(double _G1, double _GC, double _T60, double _C); + static double G_G1_C(double _G1, double _GC, double _C); + static double DA_D1_ED(double _D1, double _ED, double t=0.1); + + /* + * Function to minimize. + */ + + static double GC_SC(double _SC, double SR); + static double errorfunc(double _G1, double _GC, const matrix<double, 4, 1> &Target); + static matrix <double, 5, 1> inverse_mapping(double _T60, double _ED, double _C, double _TC, double _SC, double SampleRate, double _G1); + + +public: + Parameter(double SR=44100.0, + double _D1 = 0.05, + double _DA = 0.006, + double _G1 = 0.5, + double _GC = 0.5, + double _G = 0.5, + double _T60 = 0.423289, + double _ED = 6927.08, + double _C = -0.107798, + double _TC = 0.0490677, + double _SC = 6419.15 + ); + virtual ~Parameter(); + double getC() const; + void setC(double c); + double getD1() const; + void setD1(double d1); + double getDa() const; + void setDa(double da); + double getEd() const; + void setEd(double ed); + double getG() const; + void setG(double g); + double getG1() const; + void setG1(double g1); + double getGc() const; + void setGc(double gc); + double getSampleRate() const; + void setSampleRate(double sampleRate); + double getSc() const; + void setSc(double sc); + double getT60() const; + void setT60(double t60); + double getTc() const; + void setTc(double tc); + + /* compute functions */ + + /* + * Low level -> High level + */ + + int set_low_and_compute(double D1, double DA, double G1, double GC, double G); + int get_low_and_computer(); + + /* + * High level -> Low level + */ + + int set_high_and_compute(double T60, double ED, double C, double TC, double SC); + int get_high_and_compute(); + + +}; + + + +#endif /* PARAMETER_H_ */