Mercurial > hg > vamp-fanchirp
changeset 24:430c730ae912 spect
Remove nfft for unimplemented oversampling option; rejig nsamp param to use indexed list
author | Chris Cannam |
---|---|
date | Thu, 04 Oct 2018 15:22:23 +0100 |
parents | 2c54d83a196f |
children | 8e57d2f41926 390720c55c86 |
files | FChTransformF0gram.cpp FChTransformF0gram.h |
diffstat | 2 files changed, 38 insertions(+), 42 deletions(-) [+] |
line wrap: on
line diff
--- a/FChTransformF0gram.cpp Thu Oct 04 14:57:21 2018 +0100 +++ b/FChTransformF0gram.cpp Thu Oct 04 15:22:23 2018 +0100 @@ -26,7 +26,7 @@ using namespace breakfastquay; -//#define DEBUG +#define DEBUG #define MAX(x, y) (((x) > (y)) ? (x) : (y)) @@ -38,6 +38,13 @@ m_stepSize(256), m_blockSize(8192) { + nsamp_options.push_back(256); + nsamp_options.push_back(512); + nsamp_options.push_back(1024); + nsamp_options.push_back(2048); + nsamp_options.push_back(4096); + nsamp_options.push_back(8192); + m_fs = inputSampleRate; // max frequency of interest (Hz) m_fmax = 10000.f; @@ -68,11 +75,6 @@ m_glogs_params.sigma_poly_coefs[1] = 0.000057283574898; m_glogs_params.sigma_poly_coefs[2] = 0.022199903714288; - // number of fft points (controls zero-padding) - m_nfft = m_warp_params.nsamps_twarp; - // hop in samples - m_hop = m_warp_params.fact_over_samp * 256; - m_num_f0s = 0; m_f0s = 0; } @@ -234,35 +236,23 @@ list.push_back(fmax); ParameterDescriptor nsamp; - nsamp.identifier = "nsamp"; + nsamp.identifier = "nsamp_ix"; nsamp.name = "Number of samples"; nsamp.description = "Number of samples of the time warped frame"; - nsamp.unit = "samples"; - nsamp.minValue = 128; - nsamp.maxValue = 4096; - nsamp.defaultValue = 2048; + nsamp.minValue = 0; + nsamp.maxValue = nsamp_options.size()-1; + nsamp.defaultValue = 3; + nsamp.isQuantized = true; + nsamp.quantizeStep = 1.0; + char label[100]; + for (int i = 0; i < int(nsamp_options.size()); ++i) { + sprintf(label, "%d", nsamp_options[i]); + nsamp.valueNames.push_back(label); + } nsamp.isQuantized = true; nsamp.quantizeStep = 1.0; list.push_back(nsamp); - ParameterDescriptor nfft; - nfft.identifier = "nfft"; - nfft.name = "FFT number of points"; - nfft.description = "Number of FFT points (controls zero-padding)"; - nfft.unit = "samples"; - nfft.minValue = 0; - nfft.maxValue = 4; - nfft.defaultValue = 3; - nfft.isQuantized = true; - nfft.quantizeStep = 1.0; - nfft.valueNames.push_back("256"); - nfft.valueNames.push_back("512"); - nfft.valueNames.push_back("1024"); - nfft.valueNames.push_back("2048"); - nfft.valueNames.push_back("4096"); - nfft.valueNames.push_back("8192"); - list.push_back(nfft); - ParameterDescriptor alpha_max; alpha_max.identifier = "alpha_max"; alpha_max.name = "Maximum alpha value"; @@ -396,16 +386,19 @@ if (identifier == "fmax") { return m_fmax; - } else if (identifier == "nsamp") { - return m_warp_params.nsamps_twarp; + } else if (identifier == "nsamp_ix") { + for (int i = 0; i < int(nsamp_options.size()); ++i) { + if (m_warp_params.nsamps_twarp == nsamp_options[i]) { + return i; + } + } + throw std::logic_error("internal error: nsamps_twarp not in nsamp_options"); } else if (identifier == "alpha_max") { return m_warp_params.alpha_max; } else if (identifier == "num_warps") { return m_warp_params.num_warps; } else if (identifier == "alpha_dist") { return m_warp_params.alpha_dist; - } else if (identifier == "nfft") { - return m_nfft; } else if (identifier == "f0min") { return m_f0_params.f0min; } else if (identifier == "num_octs") { @@ -430,16 +423,20 @@ { if (identifier == "fmax") { m_fmax = value; - } else if (identifier == "nsamp") { - m_warp_params.nsamps_twarp = value; + } else if (identifier == "nsamp_ix") { + int n = int(roundf(value)); + for (int i = 0; i < int(nsamp_options.size()); ++i) { + if (i == n) { + m_warp_params.nsamps_twarp = nsamp_options[i]; + m_blockSize = m_warp_params.nsamps_twarp * 4; + } + } } else if (identifier == "alpha_max") { m_warp_params.alpha_max = value; } else if (identifier == "num_warps") { m_warp_params.num_warps = value; } else if (identifier == "alpha_dist") { m_warp_params.alpha_dist = value; - } else if (identifier == "nfft") { - m_nfft = value; } else if (identifier == "f0min") { m_f0_params.f0min = value; } else if (identifier == "num_octs") { @@ -514,7 +511,7 @@ } else { for (int i = 0; i < m_warp_params.nsamps_twarp/2+1; ++i) { - double freq = i * (m_warpings.fs_warp / m_nfft); + double freq = i * (m_warpings.fs_warp / m_warp_params.nsamps_twarp); sprintf(label, "%4.2f Hz", freq); labels.push_back(label); } @@ -925,9 +922,9 @@ fprintf(stderr, " m_fs = %f Hz.\n",m_fs); fprintf(stderr, " fs_orig = %f Hz.\n",m_warpings.fs_orig); fprintf(stderr, " fs_warp = %f Hz.\n",m_warpings.fs_warp); - fprintf(stderr, " m_nfft = %d.\n",m_nfft); fprintf(stderr, " m_blockSize = %d.\n",m_blockSize); fprintf(stderr, " m_warpings.nsamps_torig = %d.\n",m_warpings.nsamps_torig); + fprintf(stderr, " m_warp_params.nsamps_twarp = %d.\n",m_warp_params.nsamps_twarp); fprintf(stderr, " m_warp_params.num_warps = %d.\n",m_warp_params.num_warps); fprintf(stderr, " m_glogs_harmonic_count = %d.\n",m_glogs_harmonic_count); #endif
--- a/FChTransformF0gram.h Thu Oct 04 14:57:21 2018 +0100 +++ b/FChTransformF0gram.h Thu Oct 04 15:22:23 2018 +0100 @@ -87,12 +87,11 @@ // ============= WARPING PARAMETERS ============= double m_fmax; // maximum frequency of interest (Hz) - int m_nfft; // number of fft points (controls zero-padding) - int m_hop; // hop in samples in the upsampled signal - int m_num_f0s; // number of f0 values in F0gram grid double *m_f0s; // vector of f0 values + vector<int> nsamp_options; + typedef struct { int nsamps_twarp; // number of samples of the warped signal frame double alpha_max; // maximum value of normalized frequency deviation (alpha)