beeping-core 2.0.0
C++20 library for encoding and decoding data over sound
Loading...
Searching...
No Matches
SpectralAnalysis.h
1#ifndef __SPECTRALANALYSIS__
2#define __SPECTRALANALYSIS__
3
4#include <fftsg.h>
5
6namespace BEEPING {
7enum Mode { kMagnitudeSpectrum = 0, kEnergySpectrum = 1 };
8
9class SpectralAnalysis {
10 private:
11 SpectralAnalysis(const SpectralAnalysis&);
12 void operator=(const SpectralAnalysis&);
13
14 Mode mode;
15
16 CFFTOoura* fftooura;
17
18 float* inputBuffer;
19
20 public:
21 SpectralAnalysis(Mode _mode, int _fftSize, int _windowSize, int _hopSize);
22 ~SpectralAnalysis();
23
24 int mFftSize;
25 int mWindowSize;
26 int mHopSize;
27 int mSpecSize;
28 float* mSpecMag;
29 float* mSpecPhase;
30 float* mWindow;
31
32 void doFFT(float* inputBuffer, float* magSpectrum, float* imagSpectrum);
33
34 inline int multiplyBuffers(float* tgtPtr, const float* srcPtrA,
35 const float* srcPtrB, int n);
36 inline void clearBuffer(float* tgtPtr, int n);
37 inline int copyToBuffer(float* tgtPtr, const float* srcPtr, int n);
38
39 inline void generateBlackmanHarris92Window(float* window, int size);
40 inline void generateBlackmanHarris74Window(float* window, int size);
41 inline void generateBlackmanHarrisWindow(float* window, int size);
42};
43
44} // namespace BEEPING
45
46#endif // __SPECTRALANALYSIS__