diff options
| author | Carl Hetherington <cth@carlh.net> | 2020-04-18 23:41:14 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2020-04-20 00:31:10 +0200 |
| commit | fc74afbad98bd2a3fa803df2eba2b046ee116f17 (patch) | |
| tree | 4a4c2cb38d1701162391f0b5e54653fe6ab6fa0e /src | |
| parent | 4102182315fb9c8f2b31fda4ddebc51108041c20 (diff) | |
More Sum tidying.
Diffstat (limited to 'src')
| -rw-r--r-- | src/leqm-nrt.cc | 39 |
1 files changed, 18 insertions, 21 deletions
diff --git a/src/leqm-nrt.cc b/src/leqm-nrt.cc index a9dac50..bc3e918 100644 --- a/src/leqm-nrt.cc +++ b/src/leqm-nrt.cc @@ -62,24 +62,22 @@ class Sum { public: - Sum() - { - csum = 0.0; - sum = 0.0; - nsamples = 0; - } - - void sum_samples(double * inputsamples, double * cinputsamples, int nsamples_) + void sum_samples(double * inputsamples, double * cinputsamples, int nsamples) { _mutex.lock(); - nsamples += nsamples_; - for (auto i = 0; i < nsamples_; i++) { - sum += inputsamples[i]; - csum += cinputsamples[i]; + _nsamples += nsamples; + for (auto i = 0; i < nsamples; i++) { + _sum += inputsamples[i]; + _csum += cinputsamples[i]; } _mutex.unlock(); } + int nsamples() const + { + return _nsamples; + } + /* How the final offset is calculated without reference to a test tone: P0 is the SPL reference 20 uPa @@ -88,16 +86,16 @@ public: To that one has to add the 20 dB offset of the reference -20dBFS: 88.010299957 + 20.00 = 108.010299957 But ISO 21727:2004(E) ask for a reference level "measured using an average responding meter". So reference level is not 0.707, but 0.637 = 2/pi - */ + */ double mean() const { - return pow(sum / ((double) nsamples), 0.500); + return pow(_sum / _nsamples, 0.500); } double cmean() const { - return pow(csum / ((double) nsamples), 0.500); + return pow(_csum / _nsamples, 0.500); } double rms() const @@ -110,11 +108,10 @@ public: return 20 * log10(cmean()) + 108.010299957; } - double csum; // convolved sum - double sum; // flat sum - int nsamples; - private: + double _csum = 0.0; // convolved sum + double _sum = 0.0; // flat sum + int _nsamples = 0; std::mutex _mutex; }; @@ -624,7 +621,7 @@ Result calculate( worker_args.clear(); //simply log here your measurement it will be a multiple of your threads and your buffer if (leqmlogfile) { - logleqm(leqmlogfile, ((double) totsum->nsamples)/((double) sf_info.samplerate), totsum); + logleqm(leqmlogfile, ((double) totsum->nsamples())/((double) sf_info.samplerate), totsum); } //endlog } } @@ -634,7 +631,7 @@ Result calculate( worker_args.clear(); } if (leqmlogfile) { - logleqm(leqmlogfile, ((double) totsum->nsamples)/((double) sf_info.samplerate), totsum ); + logleqm(leqmlogfile, ((double) totsum->nsamples())/((double) sf_info.samplerate), totsum ); } } |
