casacore
Loading...
Searching...
No Matches
rftimeblockencoder.h
Go to the documentation of this file.
1#ifndef DYSCO_RFTIME_BLOCK_ENCODER_H
2#define DYSCO_RFTIME_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 RFTimeBlockEncoder(size_t nPol, size_t nChannels);
17
18 virtual ~RFTimeBlockEncoder() override;
19
21 FBuffer &buffer, float *metaBuffer, symbol_t *symbolBuffer,
22 size_t antennaCount, std::mt19937 &rnd) final override {
23 encode<true>(gausEncoder, buffer, metaBuffer, symbolBuffer, antennaCount, &rnd);
24 }
25
27 FBuffer &buffer, float *metaBuffer, symbol_t *symbolBuffer,
28 size_t antennaCount) final override {
29 encode<false>(gausEncoder, buffer, metaBuffer, symbolBuffer, antennaCount, 0);
30 }
31
32 virtual void InitializeDecode(const float *metaBuffer, size_t nRow,
33 size_t nAntennae) final override;
34
35 virtual void Decode(const dyscostman::StochasticEncoder<float> &gausEncoder, FBuffer &buffer,
36 const symbol_t *symbolBuffer, size_t blockRow, size_t antenna1,
37 size_t antenna2) final override;
38
39 virtual size_t SymbolCount(size_t nRow, size_t nPol, size_t nChannels) const final override {
40 return nRow * nChannels * nPol * 2 /*complex*/;
41 }
42
43 virtual size_t SymbolCount(size_t nRow) const final override {
44 return nRow * _nChannels * _nPol * 2 /*complex*/;
45 }
46
47 virtual size_t SymbolsPerRow() const final override { return _nChannels * _nPol * 2 /*complex*/; }
48
49 virtual size_t MetaDataCount(size_t nRow, size_t nPol, size_t nChannels,
50 size_t /*nAntennae*/) const final override {
51 return nPol * (nChannels + nRow);
52 }
53
55 TimeBlockBuffer<std::complex<float>> &buffer, size_t antennaCount);
56
57 private:
58 void maximizeRows(std::vector<DBufferRow> &data, float *metaBuffer,
59 const dyscostman::StochasticEncoder<float> &gausEncoder);
60 void maximizeChannels(std::vector<DBufferRow> &data, float *metaBuffer,
61 const dyscostman::StochasticEncoder<float> &gausEncoder);
62
63 template <bool UseDithering>
64 void encode(const dyscostman::StochasticEncoder<float> &gausEncoder, const FBuffer &buffer,
65 float *metaBuffer, symbol_t *symbolBuffer, size_t antennaCount, std::mt19937 *rnd);
66
68
70 std::uniform_int_distribution<unsigned> _ditherDist;
71};
72
73#endif
virtual ~RFTimeBlockEncoder() override
virtual void EncodeWithDithering(const dyscostman::StochasticEncoder< float > &gausEncoder, FBuffer &buffer, float *metaBuffer, symbol_t *symbolBuffer, size_t antennaCount, std::mt19937 &rnd) final override
void maximizeRows(std::vector< DBufferRow > &data, float *metaBuffer, const dyscostman::StochasticEncoder< float > &gausEncoder)
aocommon::UVector< double > _rowFactors
virtual size_t SymbolCount(size_t nRow) const final override
void maximizeChannels(std::vector< DBufferRow > &data, float *metaBuffer, const dyscostman::StochasticEncoder< float > &gausEncoder)
virtual void InitializeDecode(const float *metaBuffer, size_t nRow, size_t nAntennae) final override
virtual size_t SymbolsPerRow() const final override
RFTimeBlockEncoder(size_t nPol, size_t nChannels)
virtual void EncodeWithoutDithering(const dyscostman::StochasticEncoder< float > &gausEncoder, FBuffer &buffer, float *metaBuffer, symbol_t *symbolBuffer, size_t antennaCount) final override
virtual size_t MetaDataCount(size_t nRow, size_t nPol, size_t nChannels, size_t) const final override
void encode(const dyscostman::StochasticEncoder< float > &gausEncoder, const FBuffer &buffer, float *metaBuffer, symbol_t *symbolBuffer, size_t antennaCount, std::mt19937 *rnd)
aocommon::UVector< double > _channelFactors
void Normalize(const dyscostman::StochasticEncoder< float > &gausEncoder, TimeBlockBuffer< std::complex< float > > &buffer, size_t antennaCount)
std::uniform_int_distribution< unsigned > _ditherDist
virtual size_t SymbolCount(size_t nRow, size_t nPol, size_t nChannels) const 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...
Definition uvector.h:77
Lossy encoder for stochastic values.
Header file for UVector and its relational and swap functions.