changeset 374:3e5f13ac984f

Add bandwidth, snr parameters
author Chris Cannam <c.cannam@qmul.ac.uk>
date Fri, 18 Oct 2013 14:57:48 +0100
parents 395771a6db7f
children ad21307eaf99
files dsp/rateconversion/Resampler.cpp dsp/rateconversion/Resampler.h
diffstat 2 files changed, 21 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/dsp/rateconversion/Resampler.cpp	Fri Oct 18 11:11:41 2013 +0100
+++ b/dsp/rateconversion/Resampler.cpp	Fri Oct 18 14:57:48 2013 +0100
@@ -21,7 +21,15 @@
     m_sourceRate(sourceRate),
     m_targetRate(targetRate)
 {
-    initialise();
+    initialise(100, 0.02);
+}
+
+Resampler::Resampler(int sourceRate, int targetRate, 
+                     double snr, double bandwidth) :
+    m_sourceRate(sourceRate),
+    m_targetRate(targetRate)
+{
+    initialise(snr, bandwidth);
 }
 
 Resampler::~Resampler()
@@ -37,7 +45,7 @@
 knownFilterMutex;
 
 void
-Resampler::initialise()
+Resampler::initialise(double snr, double bandwidth)
 {
     int higher = std::max(m_sourceRate, m_targetRate);
     int lower = std::min(m_sourceRate, m_targetRate);
@@ -47,7 +55,7 @@
     int peakToPole = higher / m_gcd;
 
     KaiserWindow::Parameters params =
-	KaiserWindow::parametersForBandwidth(100, 0.02, peakToPole);
+	KaiserWindow::parametersForBandwidth(snr, bandwidth, peakToPole);
 
     params.length =
 	(params.length % 2 == 0 ? params.length + 1 : params.length);
@@ -269,6 +277,7 @@
 	// NB gcc can only vectorize this with -ffast-math
 	v += buf[i] * filt[i];
     }
+
     m_bufferOrigin += pd.drop;
     m_phase = pd.nextPhase;
     return v;
--- a/dsp/rateconversion/Resampler.h	Fri Oct 18 11:11:41 2013 +0100
+++ b/dsp/rateconversion/Resampler.h	Fri Oct 18 14:57:48 2013 +0100
@@ -13,6 +13,14 @@
      * targetRate.
      */
     Resampler(int sourceRate, int targetRate);
+
+    /**
+     * Construct a Resampler to resample from sourceRate to
+     * targetRate, using the given filter parameters.
+     */
+    Resampler(int sourceRate, int targetRate,
+              double snr, double bandwidth);
+
     virtual ~Resampler();
 
     /**
@@ -57,7 +65,7 @@
     std::vector<double> m_buffer;
     int m_bufferOrigin;
 
-    void initialise();
+    void initialise(double, double);
     double reconstructOne();
 };