diff dsp/rateconversion/Resampler.cpp @ 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 23558405a7d1
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;