4#include <BeepingConfig.h>
8#define MAX_DECODE_STRING_SIZE 30
11class SpectralAnalysis;
16 float energyRatioToken;
19 float energyRatioToneMax;
20 float energyRatioToneSecond;
26 Decoder(
const BeepingConfig& config,
float sr,
int buffsize,
int windowSize,
27 int numTokens,
int numTones);
28 virtual ~Decoder(
void);
30 virtual int DecodeAudioBuffer(
float* audioBuffer,
int size);
31 virtual int GetDecodedData(
char* stringDecoded);
33 float GetConfidenceError();
34 float GetConfidenceNoise();
35 float GetConfidence();
37 float GetReceivedBeepsVolume();
41 virtual float GetDecodingBeginFreq();
42 virtual float GetDecodingEndFreq();
44 int GetSpectrum(
float* spectrumBuffer);
46 virtual int AnalyzeStartTokens(
float* audioBuffer);
47 virtual int AnalyzeToken(
float* audioBuffer);
49 virtual int ComputeStatsStartTokens(
void);
50 virtual int ComputeStats(
void);
52 int getSizeFilledFrameCircularBuffer();
53 int getSizeFilledBlockCircularBuffer();
54 int getSizeFilledBlockCircularBuffer(
int mode);
56 virtual int DeReverbToken(
const int nbins,
int* freqsBins);
58 virtual float ComputeBlockMagSpecSumsCurrentToken(
59 int midFreqBin,
int width,
int nbins, std::vector<float>& sumPerFrame);
60 virtual float ComputeBlockMagSpecSumsLastToken(
61 int midFreqBin,
int width,
int nbins, std::vector<float>& sumPerFrame);
72 char mDecodedString[MAX_DECODE_STRING_SIZE];
74 SpectralAnalysis* mSpectralAnalysis;
76 int mReadPosInFrameCircularBuffer;
77 int* mReadPosInBlockCircularBufferArray;
78 int mWritePosInFrameCircularBuffer;
79 int mSizeFrameCircularBuffer;
80 float* mCircularBufferFloat;
81 float* mAnalBufferFloat;
92 int** mFreqsBinsArray;
95 int mSizeTokenBinAnal;
96 float* mEvalTokenMags;
109 int idxFrontDoorToken1;
110 int idxFrontDoorToken2;
114 float* mEnergyRatios;
118 float* mEnergyRatiosSorted;
119 int* mEnergyRatiosIdx;
122 int mReadPosInBlockCircularBuffer;
123 int mWritePosInBlockCircularBuffer;
124 int mSizeBlockCircularBuffer;
126 int mnToleranceFrames;
128 float** mBlockSpecMag;
131 sTokenProbs* mBlockTokenStatistics;
132 sTokenProbs** mBlockTokenStatisticsArray;
134 int* mBlockEnergyRatiosTokenIdx;
135 int** mBlockEnergyRatiosTokenIdx1Array;
136 int* mBlockEnergyStdTokenIdx;
137 int* mBlockEnergyDiffTokenIdx;
139 int* mBlockEnergyRatiosTokenIdx2;
140 int** mBlockEnergyRatiosTokenIdx2Array;
141 int* mBlockEnergyStdTokenIdx2;
142 int* mBlockEnergyDiffTokenIdx2;
144 int* mBlockEnergyRatiosTokenIdx3;
145 int** mBlockEnergyRatiosTokenIdx3Array;
147 int* mBlockEnergyRatiosTokenIdx4;
148 int** mBlockEnergyRatiosTokenIdx4Array;
150 int* mTokenRepetitions;
153 int mEndStartTokenPosInBlockCircularBuffer;
154 double mAccumulatedDecodingFrames;
157 ReedSolomon* mReedSolomon;
158 std::vector<int> mDecodedValues;
159 int* mDecodedValuesOrig;
161 std::vector<float> mSumPerFrame;
163 float mConfidenceEnergyRatios;
164 float mConfidenceRepetitions;
165 float mConfidenceCorrection;
168 float mReceivedBeepsVolume;
170 const BeepingConfig& m_config;