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_ */