Krotos Modules 3
Loading...
Searching...
No Matches
ShortTimeFourierTransform.h
Go to the documentation of this file.
1namespace krotos
2{
3 //==============================================================================
15 {
16 public:
25
26 enum class FrequencyRange
27 {
28 Whole,
29 Half,
30 // TODO: Add more in the future if necessary
31 };
32
33 struct DFTParams
34 {
35 // TODO:: Check to convert to const
41 // TODO:: Rename to m_ after stl removal
42 Eigen::VectorXf window;
44
45 ShortTimeFourierTransform(int winSizeSamples, int fftSizeSamples, int hopSize, WindowType winMethod,
46 fftMode mode, int sampleRate);
47
57 std::vector<std::vector<float>> stft(const AudioSampleBuffer& inputSignal);
58 Eigen::MatrixXf processSignal(const Eigen::VectorXf inputSignal);
59
68 std::vector<float> istft(std::vector<std::vector<float>> stftMatrix);
69
79 void drawSpectrogram(juce::Image& image, const std::vector<std::vector<float>>& stftMatrix);
80
81 // TODO::stl removal- there is copy of data happening here !!!!
82 std::vector<float> getBinsSTL(ShortTimeFourierTransform::FrequencyRange freqRange);
100 Eigen::VectorXf getBins(ShortTimeFourierTransform::FrequencyRange freqRange);
101
102 // TODO::stl removal- there is copy of data happening here !!!!
103 std::vector<float> getColumnsSTL();
122 Eigen::VectorXf getColumns();
123
124 float getFFTBinSize() const;
125
126 private:
128 {
130 int halfNPTS{-1};
132 int quarterNPTS{-1};
133 float binSize{-1.0f};
135
136 void NPTSinfo(float NPTS);
137 Eigen::VectorXf finalGrid(const Eigen::VectorXf& w1, float Nyq, bool centerDC,
139
140 // the fft Object
141 juce::dsp::FFT m_fft;
142 // Window function
143 std::vector<float> m_window;
144
145 // used in stft
146 std::vector<float> m_sigFrame;
147 // TODO:: Rename to m_ after stl removal
148 Eigen::VectorXf sigFrame;
149
150 // number of total frames, needed for spectrogram
152
153 // scaling constant for spectrogram y frequency scaling
154 const float m_scalingConstant = 0.1f;
155
157 };
158} // namespace krotos
Apply STFT analysis to a full audio signal offline.
Definition ShortTimeFourierTransform.h:15
struct krotos::ShortTimeFourierTransform::DFTParams dftParams
std::vector< float > istft(std::vector< std::vector< float > > stftMatrix)
Definition ShortTimeFourierTransform.cpp:134
void drawSpectrogram(juce::Image &image, const std::vector< std::vector< float > > &stftMatrix)
Definition ShortTimeFourierTransform.cpp:171
FrequencyRange
Definition ShortTimeFourierTransform.h:27
enum krotos::ShortTimeFourierTransform::fftMode m_mode
void NPTSinfo(float NPTS)
Definition ShortTimeFourierTransform.cpp:312
Eigen::VectorXf getBins(ShortTimeFourierTransform::FrequencyRange freqRange)
Calculates and returns the frequency bins for a given frequency range within the context of a short-t...
Definition ShortTimeFourierTransform.cpp:247
Eigen::MatrixXf processSignal(const Eigen::VectorXf inputSignal)
Definition ShortTimeFourierTransform.cpp:81
struct krotos::ShortTimeFourierTransform::BinParams binParams
fftMode
Definition ShortTimeFourierTransform.h:19
@ complex
Definition ShortTimeFourierTransform.h:22
@ modeNUM_MODES
Definition ShortTimeFourierTransform.h:23
@ freqMagOnly
Definition ShortTimeFourierTransform.h:20
@ realOnly
Definition ShortTimeFourierTransform.h:21
std::vector< float > m_window
Definition ShortTimeFourierTransform.h:143
Eigen::VectorXf sigFrame
Definition ShortTimeFourierTransform.h:148
std::vector< float > getColumnsSTL()
Definition ShortTimeFourierTransform.cpp:276
Eigen::VectorXf finalGrid(const Eigen::VectorXf &w1, float Nyq, bool centerDC, ShortTimeFourierTransform::FrequencyRange freqRange)
Definition ShortTimeFourierTransform.cpp:333
const float m_scalingConstant
Definition ShortTimeFourierTransform.h:154
int m_numFrames
Definition ShortTimeFourierTransform.h:151
ShortTimeFourierTransform(int winSizeSamples, int fftSizeSamples, int hopSize, WindowType winMethod, fftMode mode, int sampleRate)
Definition ShortTimeFourierTransform.cpp:3
std::vector< std::vector< float > > stft(const AudioSampleBuffer &inputSignal)
Definition ShortTimeFourierTransform.cpp:26
juce::dsp::FFT m_fft
Definition ShortTimeFourierTransform.h:141
std::vector< float > getBinsSTL(ShortTimeFourierTransform::FrequencyRange freqRange)
Definition ShortTimeFourierTransform.cpp:215
float getFFTBinSize() const
Definition ShortTimeFourierTransform.cpp:305
std::vector< float > m_sigFrame
Definition ShortTimeFourierTransform.h:146
Eigen::VectorXf getColumns()
Computes and returns the time indices for the center of each STFT window.
Definition ShortTimeFourierTransform.cpp:291
int m_inputSize
Definition ShortTimeFourierTransform.h:156
Definition AirAbsorptionFilter.cpp:2
WindowType
Definition WindowFunctions.h:6
Definition ShortTimeFourierTransform.h:128
bool isNPTSodd
Definition ShortTimeFourierTransform.h:129
float binSize
Definition ShortTimeFourierTransform.h:133
int quarterNPTS
Definition ShortTimeFourierTransform.h:132
bool isHalfNPTSodd
Definition ShortTimeFourierTransform.h:131
int halfNPTS
Definition ShortTimeFourierTransform.h:130
Definition ShortTimeFourierTransform.h:34
int hopSize
Definition ShortTimeFourierTransform.h:38
int fftSize
Definition ShortTimeFourierTransform.h:37
int sampleRate
Definition ShortTimeFourierTransform.h:40
Eigen::VectorXf window
Definition ShortTimeFourierTransform.h:42
int nOverlap
Definition ShortTimeFourierTransform.h:39
int winSize
Definition ShortTimeFourierTransform.h:36