Mercurial > hg > constant-q-cpp
changeset 145:ff8ae033615f
No reason getBinFrequency shouldn't work for non-integer bin numbers too
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Thu, 22 May 2014 16:58:59 +0100 |
parents | 88b8d34bfc77 |
children | 0cbd9c904dbb |
files | cq/CQBase.h cq/CQInverse.h cq/CQSpectrogram.h cq/ConstantQ.h src/CQInverse.cpp src/ConstantQ.cpp |
diffstat | 6 files changed, 10 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/cq/CQBase.h Tue May 20 12:38:13 2014 +0100 +++ b/cq/CQBase.h Thu May 22 16:58:59 2014 +0100 @@ -54,7 +54,7 @@ virtual int getLatency() const = 0; virtual double getMaxFrequency() const = 0; virtual double getMinFrequency() const = 0; // actual min, not that passed to ctor - virtual double getBinFrequency(int bin) const = 0; + virtual double getBinFrequency(double bin) const = 0; }; #endif
--- a/cq/CQInverse.h Tue May 20 12:38:13 2014 +0100 +++ b/cq/CQInverse.h Thu May 22 16:58:59 2014 +0100 @@ -52,7 +52,7 @@ virtual int getLatency() const { return m_outputLatency; } virtual double getMaxFrequency() const { return m_p.maxFrequency; } virtual double getMinFrequency() const; // actual min, not that passed to ctor - virtual double getBinFrequency(int bin) const; + virtual double getBinFrequency(double bin) const; // Input is the format produced by ConstantQ class, // i.e. uninterpolated complex, not the real-valued stuff produced
--- a/cq/CQSpectrogram.h Tue May 20 12:38:13 2014 +0100 +++ b/cq/CQSpectrogram.h Thu May 22 16:58:59 2014 +0100 @@ -54,7 +54,7 @@ virtual int getLatency() const { return m_cq.getLatency(); } virtual double getMaxFrequency() const { return m_cq.getMaxFrequency(); } virtual double getMinFrequency() const { return m_cq.getMinFrequency(); } - virtual double getBinFrequency(int bin) const { return m_cq.getBinFrequency(bin); } + virtual double getBinFrequency(double bin) const { return m_cq.getBinFrequency(bin); } /** * Given a series of time-domain samples, return a series of
--- a/cq/ConstantQ.h Tue May 20 12:38:13 2014 +0100 +++ b/cq/ConstantQ.h Thu May 22 16:58:59 2014 +0100 @@ -60,7 +60,7 @@ virtual int getLatency() const { return m_outputLatency; } virtual double getMaxFrequency() const { return m_p.maxFrequency; } virtual double getMinFrequency() const; - virtual double getBinFrequency(int bin) const; + virtual double getBinFrequency(double bin) const; // bin may be nonintegral /** * Given a series of time-domain samples, return a series of
--- a/src/CQInverse.cpp Tue May 20 12:38:13 2014 +0100 +++ b/src/CQInverse.cpp Thu May 22 16:58:59 2014 +0100 @@ -76,9 +76,11 @@ } double -CQInverse::getBinFrequency(int bin) const +CQInverse::getBinFrequency(double bin) const { - return getMinFrequency() * pow(2, (double(bin) / getBinsPerOctave())); + // our bins are returned in high->low order + bin = (getBinsPerOctave() * getOctaves()) - bin - 1; + return getMinFrequency() * pow(2, (bin / getBinsPerOctave())); } void
--- a/src/ConstantQ.cpp Tue May 20 12:38:13 2014 +0100 +++ b/src/ConstantQ.cpp Thu May 22 16:58:59 2014 +0100 @@ -78,11 +78,11 @@ } double -ConstantQ::getBinFrequency(int bin) const +ConstantQ::getBinFrequency(double bin) const { // our bins are returned in high->low order bin = (getBinsPerOctave() * getOctaves()) - bin - 1; - return getMinFrequency() * pow(2, (double(bin) / getBinsPerOctave())); + return getMinFrequency() * pow(2, (bin / getBinsPerOctave())); } void