casacore
Loading...
Searching...
No Matches
rowtimeblockencoder.h
Go to the documentation of this file.
1#ifndef DYSCO_ROW_TIME_BLOCK_ENCODER_H
2#define DYSCO_ROW_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
12#include "timeblockencoder.h"
13
15 public:
16 RowTimeBlockEncoder(size_t nPol, size_t nChannels);
17
18 virtual ~RowTimeBlockEncoder() override {}
19
20 virtual void EncodeWithDithering(
21 const dyscostman::StochasticEncoder<float> &gausEncoder, FBuffer &buffer,
22 float *metaBuffer, symbol_t *symbolBuffer, size_t antennaCount,
23 std::mt19937 &rnd) final override {
24 encode<true>(gausEncoder, buffer, metaBuffer, symbolBuffer, antennaCount,
25 &rnd);
26 }
27
29 const dyscostman::StochasticEncoder<float> &gausEncoder, FBuffer &buffer,
30 float *metaBuffer, symbol_t *symbolBuffer,
31 size_t antennaCount) final override {
32 encode<false>(gausEncoder, buffer, metaBuffer, symbolBuffer, antennaCount,
33 0);
34 }
35
36 virtual void InitializeDecode(const float *metaBuffer, size_t nRow,
37 size_t nAntennae) final override;
38
39 virtual void Decode(const dyscostman::StochasticEncoder<float> &gausEncoder,
40 FBuffer &buffer, const symbol_t *symbolBuffer,
41 size_t blockRow, size_t antenna1,
42 size_t antenna2) final override;
43
44 virtual size_t SymbolCount(size_t nRow, size_t nPol,
45 size_t nChannels) const final override {
46 return nRow * nChannels * nPol * 2 /*complex*/;
47 }
48
49 virtual size_t SymbolCount(size_t nRow) const final override {
50 return nRow * _nChannels * _nPol * 2 /*complex*/;
51 }
52
53 virtual size_t SymbolsPerRow() const final override {
54 return _nChannels * _nPol * 2 /*complex*/;
55 }
56
57 virtual size_t MetaDataCount(size_t nRow, size_t /*nPol*/,
58 size_t /*nChannels*/,
59 size_t /*nAntennae*/) const final override {
60 return nRow;
61 }
62
63 private:
64 template <bool UseDithering>
66 const FBuffer &buffer, float *metaBuffer, symbol_t *symbolBuffer,
67 size_t antennaCount, std::mt19937 *rnd);
68
70
71 std::uniform_int_distribution<unsigned> _ditherDist;
73};
74
75#endif
virtual size_t SymbolCount(size_t nRow) const final override
RowTimeBlockEncoder(size_t nPol, size_t nChannels)
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
virtual void InitializeDecode(const float *metaBuffer, size_t nRow, size_t nAntennae) final override
virtual void EncodeWithDithering(const dyscostman::StochasticEncoder< float > &gausEncoder, FBuffer &buffer, float *metaBuffer, symbol_t *symbolBuffer, size_t antennaCount, std::mt19937 &rnd) final override
ao::uvector< double > _rowFactors
virtual size_t MetaDataCount(size_t nRow, size_t, size_t, size_t) const final override
virtual size_t SymbolCount(size_t nRow, size_t nPol, size_t nChannels) const final override
virtual void EncodeWithoutDithering(const dyscostman::StochasticEncoder< float > &gausEncoder, FBuffer &buffer, float *metaBuffer, symbol_t *symbolBuffer, size_t antennaCount) final override
virtual ~RowTimeBlockEncoder() override
virtual size_t SymbolsPerRow() const final override
void encode(const dyscostman::StochasticEncoder< float > &gausEncoder, const FBuffer &buffer, float *metaBuffer, symbol_t *symbolBuffer, size_t antennaCount, std::mt19937 *rnd)
std::uniform_int_distribution< unsigned > _ditherDist
A container similar to std::vector, but one that allows construction without initializing its element...
Definition uvector.h:74
Lossy encoder for stochastic values.
Header file for uvector and its relational and swap functions.