Mercurial > hg > qm-dsp
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(); };