comparison data/model/FFTModel.h @ 1780:6d6740b075c3

Support optional max frequency setting, useful when we want to store caches of very constrained frequency ranges (as in melodic-range spectrogram, potentially)
author Chris Cannam
date Thu, 12 Sep 2019 11:52:19 +0100
parents b92bdcd4954b
children 4eac4bf35b45
comparison
equal deleted inserted replaced
1779:85903b0e9b42 1780:6d6740b075c3
91 WindowType getWindowType() const { return m_windowType; } 91 WindowType getWindowType() const { return m_windowType; }
92 int getWindowSize() const { return m_windowSize; } 92 int getWindowSize() const { return m_windowSize; }
93 int getWindowIncrement() const { return m_windowIncrement; } 93 int getWindowIncrement() const { return m_windowIncrement; }
94 int getFFTSize() const { return m_fftSize; } 94 int getFFTSize() const { return m_fftSize; }
95 95
96 void setMaximumFrequency(double freq);
97 double getMaximumFrequency() const { return m_maximumFrequency; }
98
96 //!!! review which of these are ever actually called 99 //!!! review which of these are ever actually called
97 100
98 float getMagnitudeAt(int x, int y) const; 101 float getMagnitudeAt(int x, int y) const;
99 float getMaximumMagnitudeAt(int x) const; 102 float getMaximumMagnitudeAt(int x) const;
100 float getPhaseAt(int x, int y) const; 103 float getPhaseAt(int x, int y) const;
138 private: 141 private:
139 FFTModel(const FFTModel &) =delete; 142 FFTModel(const FFTModel &) =delete;
140 FFTModel &operator=(const FFTModel &) =delete; 143 FFTModel &operator=(const FFTModel &) =delete;
141 144
142 const ModelId m_model; // a DenseTimeValueModel 145 const ModelId m_model; // a DenseTimeValueModel
146 sv_samplerate_t m_sampleRate;
143 int m_channel; 147 int m_channel;
144 WindowType m_windowType; 148 WindowType m_windowType;
145 int m_windowSize; 149 int m_windowSize;
146 int m_windowIncrement; 150 int m_windowIncrement;
147 int m_fftSize; 151 int m_fftSize;
148 Window<float> m_windower; 152 Window<float> m_windower;
149 mutable breakfastquay::FFT m_fft; 153 mutable breakfastquay::FFT m_fft;
154 double m_maximumFrequency;
150 155
151 int getPeakPickWindowSize(PeakPickType type, sv_samplerate_t sampleRate, 156 int getPeakPickWindowSize(PeakPickType type, sv_samplerate_t sampleRate,
152 int bin, double &dist) const; 157 int bin, double &dist) const;
153 158
154 std::pair<sv_frame_t, sv_frame_t> getSourceSampleRange(int column) const { 159 std::pair<sv_frame_t, sv_frame_t> getSourceSampleRange(int column) const {
161 } 166 }
162 167
163 typedef std::vector<float, breakfastquay::StlAllocator<float>> fvec; 168 typedef std::vector<float, breakfastquay::StlAllocator<float>> fvec;
164 typedef std::vector<std::complex<float>, 169 typedef std::vector<std::complex<float>,
165 breakfastquay::StlAllocator<std::complex<float>>> cvec; 170 breakfastquay::StlAllocator<std::complex<float>>> cvec;
166 171
167 const cvec &getFFTColumn(int column) const; // returns ref for immediate use only 172 cvec getFFTColumn(int column) const;
168 fvec getSourceSamples(int column) const; 173 fvec getSourceSamples(int column) const;
169 fvec getSourceData(std::pair<sv_frame_t, sv_frame_t>) const; 174 fvec getSourceData(std::pair<sv_frame_t, sv_frame_t>) const;
170 fvec getSourceDataUncached(std::pair<sv_frame_t, sv_frame_t>) const; 175 fvec getSourceDataUncached(std::pair<sv_frame_t, sv_frame_t>) const;
171 176
172 struct SavedSourceData { 177 struct SavedSourceData {