1#ifndef DYSCO_AFTIME_BLOCK_ENCODER_H
2#define DYSCO_AFTIME_BLOCK_ENCODER_H
22 size_t antennaCount, std::mt19937 &rnd)
final override {
23 encode<true>(gausEncoder, buffer, metaBuffer, symbolBuffer, antennaCount, &rnd);
28 size_t antennaCount)
final override {
29 encode<false>(gausEncoder, buffer, metaBuffer, symbolBuffer, antennaCount, 0);
33 size_t nAntennae)
final override;
36 const symbol_t *symbolBuffer,
size_t blockRow,
size_t antenna1,
37 size_t antenna2)
final override;
39 virtual size_t SymbolCount(
size_t nRow,
size_t nPol,
size_t nChannels)
const final override {
40 return nRow * nChannels * nPol * 2 ;
43 virtual size_t SymbolCount(
size_t nRow)
const final override {
50 size_t nAntennae)
const final override {
51 return nPol * (nChannels + nAntennae);
61 template <
bool UseDithering>
63 float *metaBuffer,
symbol_t *symbolBuffer,
size_t antennaCount, std::mt19937 *rnd);
66 size_t antennaCount,
size_t polIndex,
double factor);
68 void fitToMaximum(std::vector<DBufferRow> &data,
float *metaBuffer,
std::uniform_int_distribution< unsigned > _ditherDist
AFTimeBlockEncoder(size_t nPol, size_t nChannels, bool fitToMaximum)
aocommon::UVector< double > _rmsPerAntenna
virtual ~AFTimeBlockEncoder() override
virtual void EncodeWithDithering(const dyscostman::StochasticEncoder< float > &gausEncoder, FBuffer &buffer, float *metaBuffer, symbol_t *symbolBuffer, size_t antennaCount, std::mt19937 &rnd) final override
virtual size_t SymbolCount(size_t nRow, size_t nPol, size_t nChannels) const final override
void encode(const dyscostman::StochasticEncoder< float > &gausEncoder, const FBuffer &buffer, float *metaBuffer, symbol_t *symbolBuffer, size_t antennaCount, std::mt19937 *rnd)
virtual size_t SymbolsPerRow() const final override
void Normalize(const dyscostman::StochasticEncoder< float > &gausEncoder, TimeBlockBuffer< std::complex< float > > &buffer, size_t antennaCount)
aocommon::UVector< double > _rmsPerChannel
virtual size_t MetaDataCount(size_t, size_t nPol, size_t nChannels, size_t nAntennae) const final override
virtual size_t SymbolCount(size_t nRow) const final override
void fitToMaximum(std::vector< DBufferRow > &data, float *metaBuffer, const dyscostman::StochasticEncoder< float > &gausEncoder, size_t antennaCount)
void changeAntennaFactor(std::vector< DBufferRow > &data, float *metaBuffer, size_t antennaIndex, size_t antennaCount, size_t polIndex, double factor)
void calculateAntennaeRMS(const std::vector< DBufferRow > &data, size_t polIndex, size_t antennaCount)
virtual void InitializeDecode(const float *metaBuffer, size_t nRow, size_t nAntennae) final override
virtual void EncodeWithoutDithering(const dyscostman::StochasticEncoder< float > &gausEncoder, FBuffer &buffer, float *metaBuffer, symbol_t *symbolBuffer, size_t antennaCount) final override
virtual void Decode(const dyscostman::StochasticEncoder< float > &gausEncoder, FBuffer &buffer, const symbol_t *symbolBuffer, size_t blockRow, size_t antenna1, size_t antenna2) final override
TimeBlockBuffer< std::complex< float > > FBuffer
A container similar to std::vector, but one that allows construction without initializing its element...
Lossy encoder for stochastic values.
Header file for UVector and its relational and swap functions.