25namespace jsa::cicuetea {
65 NsgfCqtCommon(
double sampleRate, Eigen::Index numSamples,
double fraction,
66 double minFrequency,
double maxFrequency,
double refFrequency);
96 double getSampleRate()
const {
return fs; }
99 double getFraction()
const {
return frac; }
100 double getPpo()
const {
return 1.0 /
frac; }
101 double getMinFreq()
const {
return fMin; }
102 double getMaxFreq()
const {
return fMax; }
103 double getRefFreq()
const {
return fRef; }
104 Eigen::Index getNumFreqs()
const {
return nFreqs; }
105 Eigen::Index getNumBands()
const {
return nBands; }
106 const Eigen::ArrayXd& getFrequencyAxis()
const {
return fax; }
107 const Eigen::ArrayXd& getBandAxis()
const {
return bax; }
108 const Eigen::ArrayXd& getDiagonalization()
const {
return d; }
157 static constexpr double th = 1e-6;
209 NsgfCqtDense(
double sampleRate, Eigen::Index numSamples,
double fraction,
210 double minFrequency,
double maxFrequency,
double refFrequency);
218 void forward(
const Eigen::ArrayXd& x, Eigen::ArrayXXcd& Xcq);
226 void inverse(
const Eigen::ArrayXXcd& Xcq, Eigen::ArrayXd& x);
229 const Eigen::ArrayXXd& getFrame()
const {
return g; }
230 const Eigen::ArrayXXd& getDualFrame()
const {
return gDual; }
234 Eigen::ArrayXXd gDual;
235 Eigen::ArrayXXcd Xmat;
257 using Coefs = std::vector<Eigen::ArrayXcd>;
258 using Frame = std::vector<Eigen::ArrayXd>;
272 double minFrequency,
double maxFrequency,
double refFrequency);
291 const Frame& getFrame()
const {
return g; }
292 const Eigen::ArrayXd& getAtom(Eigen::Index k)
const {
return g[k]; }
293 const Frame& getDualFrame()
const {
return gDual; }
294 const Eigen::ArrayXd& getDualAtom(Eigen::Index k)
const {
return gDual[k]; }
295 const Coefs& getPhaseCoefs()
const {
return phase; }
296 Span getBandSpan(Eigen::Index k)
const {
return idx[k]; }
297 Eigen::ArrayXd getFrequencyAxis(Eigen::Index k)
const {
return fax.segment(idx[k].i0, idx[k].len); }
298 Eigen::Index getLength(Eigen::Index k)
const {
return idx[k].len; };
299 double getCoeffRate(Eigen::Index k)
const {
return getSampleRate() * double(getLength(k)) / double(
getBlockSize()); }
302 Frame getRealCoefs()
const;
303 Coefs getCoefs()
const;
304 Coefs getValidCoefs()
const;
317 Span getIdx(
const Eigen::ArrayXd& ii);
323 Eigen::ArrayXd scale;
325 std::vector<std::unique_ptr<DFT>> dfts;
FFT wrapper (the DFT class) over the vDSP / MKL / FFTW / PFFFT backends.
The Wrapper class for other FFTs provided by different libraries.
Definition FFT.hpp:46
Eigen::ArrayXd fax
Frequency axis.
Definition CQT.hpp:183
const double fRef
Reference frequency (Hz).
Definition CQT.hpp:178
static constexpr double dHealthTol
Definition CQT.hpp:153
const double fs
Sampling rate (Hz).
Definition CQT.hpp:173
bool frameOk
Measured frame health; set by derived ctors.
Definition CQT.hpp:172
const bool valid
Structural validity: result of validate().
Definition CQT.hpp:171
static constexpr Eigen::Index minAtomSupport
Definition CQT.hpp:166
const double frac
Reciprocal of bands per octave.
Definition CQT.hpp:175
Eigen::ArrayXd d
Diagonalization array.
Definition CQT.hpp:184
Eigen::Index getNumSamps() const
Synonym of getBlockSize().
Definition CQT.hpp:98
const Eigen::Index nFreqs
Number of frequencies.
Definition CQT.hpp:181
Eigen::ArrayXd bax
Band axis.
Definition CQT.hpp:182
const double fMax
Maximum frequency (Hz).
Definition CQT.hpp:177
static constexpr double th
Definition CQT.hpp:157
static BandInfo computeBandInfo(double frac, double fMin, double fMax, double fRef)
Computes band information for the filterbank.
Definition CQT.cpp:21
bool checkFrameHealth() const
Measured frame-health check on the constructed frame operator.
Definition CQT.cpp:49
Eigen::Index getBlockSize() const
Synonym of getNumSamps().
Definition CQT.hpp:97
static bool validate(double fs, Eigen::Index nSamps, double frac, double fMin, double fMax, double fRef)
Checks the structural validity conditions for a configuration.
Definition CQT.cpp:34
double getFrameConditionNumber() const
Condition number of the painless frame operator, max(d)/min(d) up to Nyquist. Advisory: reconstructio...
Definition CQT.cpp:56
const Eigen::Index nBands
Total number of bands.
Definition CQT.hpp:180
Eigen::ArrayXcd Xdft
DFT of the signal.
Definition CQT.hpp:185
NsgfCqtCommon(double sampleRate, Eigen::Index numSamples, double fraction, double minFrequency, double maxFrequency, double refFrequency)
Constructor for NsgfCqtCommon.
Definition CQT.cpp:63
bool isValid() const
True when the object is usable: the configuration passed validate() and the constructed frame passed ...
Definition CQT.hpp:85
const Eigen::Index nSamps
Number of samples in a block (0 when invalid).
Definition CQT.hpp:174
DFT dft
Discrete Fourier Transform object.
Definition CQT.hpp:186
const BandInfo bandInfo
Band information.
Definition CQT.hpp:179
const double fMin
Minimum frequency (Hz).
Definition CQT.hpp:176
void forward(const Eigen::ArrayXd &x, Eigen::ArrayXXcd &Xcq)
Performs the forward NSGF-CQT transformation.
Definition CQT.cpp:125
void inverse(const Eigen::ArrayXXcd &Xcq, Eigen::ArrayXd &x)
Performs the inverse NSGF-CQT transformation.
Definition CQT.cpp:143
NsgfCqtDense(double sampleRate, Eigen::Index numSamples, double fraction, double minFrequency, double maxFrequency, double refFrequency)
Constructor for NsgfCqtDense.
Definition CQT.cpp:92
std::vector< Eigen::ArrayXd > Frame
Type alias for frame.
Definition CQT.hpp:258
NsgfCqtSparse(double sampleRate, Eigen::Index nSamps, double fraction, double minFrequency, double maxFrequency, double refFrequency)
Constructor for NsgfCqtSparse.
Definition CQT.cpp:163
std::vector< Span > SpanList
Type alias for span list.
Definition CQT.hpp:259
std::vector< Eigen::ArrayXcd > Coefs
Type alias for coefficients.
Definition CQT.hpp:257
void inverse(const Coefs &Xcq, Eigen::ArrayXd &x)
Performs the inverse NSGF-CQT transformation.
Definition CQT.cpp:239
void forward(const Eigen::ArrayXd &x, Coefs &Xcq)
Performs the forward NSGF-CQT transformation.
Definition CQT.cpp:220
Holds information about the number of bands in the filterbank.
Definition CQT.hpp:49
Eigen::Index nBandsDown
Number of bands below the reference frequency.
Definition CQT.hpp:51
Eigen::Index nBands
Total number of bands.
Definition CQT.hpp:50
Eigen::Index nBandsUp
Number of bands above the reference frequency.
Definition CQT.hpp:52
Represents a span of indices for a band.
Definition CQT.hpp:252
Eigen::Index len
Length of the span.
Definition CQT.hpp:254
Eigen::Index i0
Starting index of the span.
Definition CQT.hpp:253