Krotos Modules 3
Loading...
Searching...
No Matches
ERB_FFTSpectrogram.h
Go to the documentation of this file.
1//=====================================================================================
7//=====================================================================================
8
9#pragma once
10using CoefficientsIIR = juce::dsp::IIR::Coefficients<float>;
11using CoefficientsFIR = juce::dsp::FIR::Coefficients<float>;
12
13namespace krotos
14{
15 //==============================================================================
35 {
36 public:
39
43 void setSampleRate(float fs);
44
50 std::vector<std::vector<float>> filterSpectrum(std::vector<float>& inputSignal);
51
62 void drawSpectrogram(juce::Image& image, const std::vector<std::vector<float>>& erbSTFTPowMatrix);
63
64 std::vector<float> getERBSpace() { return m_cfArray; };
65
67 static std::vector<float> erbs2Hz(const std::vector<float>& erbsVector);
68 static Eigen::VectorXf erbs2Hz(const Eigen::VectorXf& erbsVector);
69
71 static std::vector<float> hz2Erbs(const std::vector<float>& hzVector);
72 static Eigen::VectorXf hz2Erbs(const Eigen::VectorXf& hzVector);
73 static float hz2Erbs(const float hz);
74
75 private:
81 std::vector<float> applyEarFilter(std::vector<float>& inputSignal);
82
88 std::vector<float> gtWindow(int numberOfPoints, float bParam, int order);
89
90 /* Cambridge equivalent rectangular bandwidth at cf - from Hartmann (1997)
91 * @param cf Hz - characteristic frequency(multiple versions for
92 * float/double and vector)
93 * @returns equivalent rectangular bandwidth at cf
94 */
95 std::vector<float> cferb(std::vector<float> cf);
96 float cferb(const float cf);
97 double cferb(const double cf);
98
109 std::vector<float> erbSpace(float low, float hi, int N);
110
115 float centroid(const std::vector<float>& x);
116
121 float getNextPowerOfTwo(float value);
122
128 void buildFilterBank(int startSamplesSize);
129
137 std::vector<std::vector<float>> calculatePowerSpectrum(const std::vector<std::vector<float>>& inFrames);
138
139 //----------------------------------------------- Private members
140 //---------------------------------------------------
141 float m_sampleRate{-1.0f};
142 std::vector<std::vector<double>> m_wfunct;
143 // zero pad signal
144 std::vector<float> m_cfArray;
145
147
148 // hopSize in seconds
149 float m_hopSizeSec = 0.0058f;
151
152 const float m_exponent = 0.25f;
153
154 // Parameters for the spectrogram matrix
155 // lowest cf
156 float m_lo = 30.0f;
157 // upper cf
158 float m_hi = 16000.0f;
159 // number of channles
160 int m_numChans = 77;
161
162 /* Window size and shape are based on the envelope of the gammatone
163 * impulse response of the lowest CF channel, with ERB = 24.7 Hz.
164 * The FFT window size is the smallest power of 2 larger than twice the
165 * ERD of this window.
166 */
167 float m_bw0 = 24.7f; // Hz - base frequency of ERB formula(= bandwidth of "0Hz" channel)
168 float m_b0 = 25.15274949f; // gammatone b parameter(Hartmann, 1997)
169 float m_ERD = 0.0196797f; // based on numerical calculation of ERD
171 std::vector<float> m_gtWin; // gammatone window
172
173 // scaling constant for spectrogram y frequency scaling
174 const float m_scalingConstant = 0.1f;
176
179 void writeMatrixToFile(const std::vector<std::vector<float>>& matrix, const std::string& filename)
180 {
181 std::ofstream outputFile(filename);
182 if (!outputFile.is_open())
183 {
184 DBG("Failed to open file: ");
185 return;
186 }
187
188 for (const auto& row : matrix)
189 {
190 for (const auto& value : row)
191 {
192 outputFile << value << " ";
193 }
194 outputFile << '\n';
195 }
196
197 outputFile.close();
198 }
199 };
200} // namespace krotos
juce::dsp::IIR::Coefficients< float > CoefficientsIIR
Definition ERB_FFTSpectrogram.h:10
juce::dsp::FIR::Coefficients< float > CoefficientsFIR
Definition ERB_FFTSpectrogram.h:11
FFT-based cochlear power spectrogram.
Definition ERB_FFTSpectrogram.h:35
static std::vector< float > hz2Erbs(const std::vector< float > &hzVector)
Definition ERB_FFTSpectrogram.cpp:403
float centroid(const std::vector< float > &x)
Definition ERB_FFTSpectrogram.cpp:278
ERB_FFTSpectrogram()
Definition ERB_FFTSpectrogram.cpp:10
float m_sampleRate
Definition ERB_FFTSpectrogram.h:141
void drawSpectrogram(juce::Image &image, const std::vector< std::vector< float > > &erbSTFTPowMatrix)
Definition ERB_FFTSpectrogram.cpp:337
const float m_exponent
Definition ERB_FFTSpectrogram.h:152
EarFilter m_earFilter
Definition ERB_FFTSpectrogram.h:146
std::vector< std::vector< double > > m_wfunct
Definition ERB_FFTSpectrogram.h:142
int m_numChans
Definition ERB_FFTSpectrogram.h:160
const float m_scalingConstant
Definition ERB_FFTSpectrogram.h:174
std::vector< float > getERBSpace()
Definition ERB_FFTSpectrogram.h:64
void setSampleRate(float fs)
Definition ERB_FFTSpectrogram.cpp:18
std::vector< float > cferb(std::vector< float > cf)
Definition ERB_FFTSpectrogram.cpp:234
std::vector< float > erbSpace(float low, float hi, int N)
Definition ERB_FFTSpectrogram.cpp:259
int m_wSize
Definition ERB_FFTSpectrogram.h:170
std::vector< float > m_gtWin
Definition ERB_FFTSpectrogram.h:171
std::vector< std::vector< float > > filterSpectrum(std::vector< float > &inputSignal)
Definition ERB_FFTSpectrogram.cpp:38
float getNextPowerOfTwo(float value)
Definition ERB_FFTSpectrogram.cpp:378
std::vector< float > applyEarFilter(std::vector< float > &inputSignal)
Definition ERB_FFTSpectrogram.cpp:102
static std::vector< float > erbs2Hz(const std::vector< float > &erbsVector)
Definition ERB_FFTSpectrogram.cpp:388
float m_b0
Definition ERB_FFTSpectrogram.h:168
void buildFilterBank(int startSamplesSize)
Definition ERB_FFTSpectrogram.cpp:112
void writeMatrixToFile(const std::vector< std::vector< float > > &matrix, const std::string &filename)
Definition ERB_FFTSpectrogram.h:179
int m_fftSize
Definition ERB_FFTSpectrogram.h:175
int m_hopSizeSamples
Definition ERB_FFTSpectrogram.h:150
std::vector< std::vector< float > > calculatePowerSpectrum(const std::vector< std::vector< float > > &inFrames)
Definition ERB_FFTSpectrogram.cpp:295
std::vector< float > gtWindow(int numberOfPoints, float bParam, int order)
Definition ERB_FFTSpectrogram.cpp:212
std::vector< float > m_cfArray
Definition ERB_FFTSpectrogram.h:144
float m_bw0
Definition ERB_FFTSpectrogram.h:167
float m_lo
Definition ERB_FFTSpectrogram.h:156
float m_hi
Definition ERB_FFTSpectrogram.h:158
float m_ERD
Definition ERB_FFTSpectrogram.h:169
float m_hopSizeSec
Definition ERB_FFTSpectrogram.h:149
Definition EarFilter.h:23
Definition AirAbsorptionFilter.cpp:2