casacore
Loading...
Searching...
No Matches
timeblockencoder.h
Go to the documentation of this file.
1#ifndef DYSCO_TIME_BLOCK_ENCODER_H
2#define DYSCO_TIME_BLOCK_ENCODER_H
3
4#include "stochasticencoder.h"
5#include "timeblockbuffer.h"
6#include "uvector.h"
7
8#include <complex>
9#include <random>
10#include <vector>
11
13 public:
15
16 void Include(const std::complex<double> &val) {
17 if (isfinite(val)) {
18 _count++;
19 _value += val.real() * val.real() + val.imag() * val.imag();
20 }
21 }
22
23 double RMS() const { return sqrt(_value / (_count * 2)); }
24
25 private:
26 static bool isfinite(const std::complex<double> &val) {
27 return std::isfinite(val.real()) && std::isfinite(val.imag());
28 }
29
30 size_t _count;
31 double _value;
32};
33
35 public:
40
41 typedef unsigned symbol_t;
42
43 virtual ~TimeBlockEncoder() {}
44
45 virtual void EncodeWithDithering(
46 const dyscostman::StochasticEncoder<float> &gausEncoder, FBuffer &buffer,
47 float *metaBuffer, symbol_t *symbolBuffer, size_t antennaCount,
48 std::mt19937 &rnd) = 0;
49
51 const dyscostman::StochasticEncoder<float> &gausEncoder, FBuffer &buffer,
52 float *metaBuffer, symbol_t *symbolBuffer, size_t antennaCount) = 0;
53
54 virtual void InitializeDecode(const float *metaBuffer, size_t nRow,
55 size_t nAntennae) = 0;
56
57 virtual void Decode(const dyscostman::StochasticEncoder<float> &gausEncoder,
58 FBuffer &buffer, const symbol_t *symbolBuffer,
59 size_t blockRow, size_t antenna1, size_t antenna2) = 0;
60
61 virtual size_t SymbolCount(size_t nRow, size_t nPol,
62 size_t nChannels) const = 0;
63
64 virtual size_t SymbolCount(size_t nRow) const = 0;
65
66 virtual size_t SymbolsPerRow() const = 0;
67
68 virtual size_t MetaDataCount(size_t nRow, size_t nPol, size_t nChannels,
69 size_t nAntennae) const = 0;
70
71 protected:
73};
74
75#endif
double RMS() const
static bool isfinite(const std::complex< double > &val)
void Include(const std::complex< double > &val)
virtual size_t SymbolCount(size_t nRow, size_t nPol, size_t nChannels) const =0
virtual size_t SymbolCount(size_t nRow) const =0
TimeBlockBuffer< std::complex< double > >::DataRow DBufferRow
TimeBlockBuffer< std::complex< float > > FBuffer
virtual ~TimeBlockEncoder()
virtual size_t MetaDataCount(size_t nRow, size_t nPol, size_t nChannels, size_t nAntennae) const =0
virtual void EncodeWithDithering(const dyscostman::StochasticEncoder< float > &gausEncoder, FBuffer &buffer, float *metaBuffer, symbol_t *symbolBuffer, size_t antennaCount, std::mt19937 &rnd)=0
TimeBlockBuffer< std::complex< double > > DBuffer
virtual size_t SymbolsPerRow() const =0
virtual void InitializeDecode(const float *metaBuffer, size_t nRow, size_t nAntennae)=0
TimeBlockBuffer< std::complex< float > >::DataRow FBufferRow
virtual void Decode(const dyscostman::StochasticEncoder< float > &gausEncoder, FBuffer &buffer, const symbol_t *symbolBuffer, size_t blockRow, size_t antenna1, size_t antenna2)=0
virtual void EncodeWithoutDithering(const dyscostman::StochasticEncoder< float > &gausEncoder, FBuffer &buffer, float *metaBuffer, symbol_t *symbolBuffer, size_t antennaCount)=0
Lossy encoder for stochastic values.
Header file for uvector and its relational and swap functions.