Belle II Software development
ECLDCTCompress Class Reference

ECL waveform compression/decompression to/from the BitStream storage based on the Discrete Cosine Transform (DCT) More...

#include <ECLCompress.h>

Inheritance diagram for ECLDCTCompress:
ECLCompress

Public Member Functions

 ECLDCTCompress (double scale, double c0, width_t *w)
 Constructor for DCT based compression algorithm.
 
void compress (BitStream &out, const int *adc) override
 function to compress
 
void uncompress (BitStream &in, int *adc) override
 function to decompress
 

Protected Attributes

const double m_scale = 0.0
 Scale factor for quantization.
 
const double m_c0 = 0.0
 Average waveform amplitude.
 
const width_tm_widths = nullptr
 Bit widths for the DCT coefficients for prefix encoding.
 

Detailed Description

ECL waveform compression/decompression to/from the BitStream storage based on the Discrete Cosine Transform (DCT)

Definition at line 84 of file ECLCompress.h.

Constructor & Destructor Documentation

◆ ECLDCTCompress()

ECLDCTCompress ( double scale,
double c0,
width_t * w )

Constructor for DCT based compression algorithm.

Parameters
scalescale factor for quantization.
c0average waveform amplitude.
wDCT coefficient probability density based bit widths for quantized coefficients

Definition at line 243 of file ECLCompress.cc.

243: m_scale(scale), m_c0(c0), m_widths(w) {}
const width_t * m_widths
Bit widths for the DCT coefficients for prefix encoding.
const double m_scale
Scale factor for quantization.
const double m_c0
Average waveform amplitude.

Member Function Documentation

◆ compress()

void compress ( BitStream & out,
const int * adc )
overridevirtual

function to compress

Implements ECLCompress.

Definition at line 245 of file ECLCompress.cc.

246{
247 const int N = EclConfiguration::m_nsmp;
248 double buf[N], out[N];
249 for (int k = 0; k < N; k++) buf[k] = a[k];
250 // cppcheck-suppress uninitvar ; buf is filled by the loop above
251 e10_31(buf, out);
252 for (int k = 0; k < N; k++) out[k] *= 1.0 / (2 * N);
253
254 int km = N;
255 for (; km > 16; --km) if (lrint(out[km - 1]*m_scale) != 0) break;
256 OUT.putNBits(N - km, 4);
257 out[0] -= m_c0;
258 for (int k = 0; k < km; k++) {
259 int t = lrint(out[k] * m_scale);
260 stream_int(OUT, t, m_widths[k]);
261 }
262}
void e10_31(const R *I, R *O)
DCT-II or "the" DCT transformation of 31-point signal This function contains 320 FP additions,...
static constexpr int m_nsmp
number of ADC measurements for signal fitting

◆ uncompress()

void uncompress ( BitStream & in,
int * adc )
overridevirtual

function to decompress

Implements ECLCompress.

Definition at line 264 of file ECLCompress.cc.

265{
266 const double iscale = 1 / m_scale;
267 const int N = EclConfiguration::m_nsmp;
268 int nz = in.getNBits(4);
269 for (int i = 0; i < N - nz; i++) adc[i] = fetch_int(in, m_widths[i]);
270 for (int i = N - nz; i < N; i++) adc[i] = 0;
271
272 double c[N], out[N];
273 for (int k = 0; k < N; k++) c[k] = adc[k] * iscale;
274 c[0] += m_c0;
275
276 e01_31(c, out);
277
278 for (int k = 0; k < N; k++) adc[k] = lrint(out[k]);
279}
void e01_31(const R *I, R *O)
DCT-III or "the inverse" DCT transformation of 31-point signal This function contains 320 FP addition...
unsigned int getNBits(unsigned int n)
Fetch n bits.
Definition BitStream.h:52

Member Data Documentation

◆ m_c0

const double m_c0 = 0.0
protected

Average waveform amplitude.

Definition at line 102 of file ECLCompress.h.

◆ m_scale

const double m_scale = 0.0
protected

Scale factor for quantization.

Definition at line 101 of file ECLCompress.h.

◆ m_widths

const width_t* m_widths = nullptr
protected

Bit widths for the DCT coefficients for prefix encoding.

Definition at line 103 of file ECLCompress.h.


The documentation for this class was generated from the following files: