24 #ifndef SKA_CHEETAH_RCPT_LOW_BEAMFORMERPACKET_LOW_H 25 #define SKA_CHEETAH_RCPT_LOW_BEAMFORMERPACKET_LOW_H 27 #include "PacketSample.h" 28 #include "cheetah/data/Units.h" 29 #include "cheetah/rcpt_low/Config.h" 30 #include "ska/cbf_psr_interface/CbfPsrHeader.h" 46 template<
typename PacketDataType,
unsigned TimeSamplesPerPacket,
unsigned ChannelsPerPacket>
51 enum class PacketType { PssLow, PssMid, PstLow, PstMid};
55 typedef struct ska::cbf_psr_interface::CbfPsrHeader PacketHeader;
56 typedef decltype(PacketHeader::packet_sequence_number) PacketNumberType;
57 typedef decltype(PacketHeader::first_channel_number) ChannelNumberType;
58 typedef decltype(PacketHeader::scan_id) ScanIdType;
59 typedef decltype(PacketHeader::beam_number) BeamNumberType;
60 typedef decltype(PacketHeader::data_precision) DataPrecisionType;
61 typedef decltype(PacketHeader::magic_word) MagicWordType;
62 typedef decltype(PacketHeader::channel_separation) ChannelSeperationType;
63 typedef uint16_t WeightsType;
107 constexpr
static std::size_t
size();
132 void insert(std::size_t sample_number, Sample s);
142 const Sample*
begin()
const;
143 const Sample* end()
const;
149 const WeightsType* end_weights()
const;
166 void scan_id(ScanIdType number);
229 static constexpr std::size_t _packet_data_size = ChannelsPerPacket*TimeSamplesPerPacket*
sizeof(Sample)*2;
230 static constexpr std::size_t _packet_weights_size = ChannelsPerPacket*
sizeof(WeightsType);
231 static constexpr std::size_t _packet_data_padding_size = (16-(_packet_data_size%16))%16;
232 static constexpr std::size_t _packet_weights_padding_size = (16-(_packet_weights_size%16))%16;
235 PacketHeader _header;
236 static_assert(
sizeof(_header)==96,
"poor alignment detected in header");
237 WeightsType _weights[(_packet_weights_size+_packet_weights_padding_size)/
sizeof(WeightsType)];
238 Sample _data[(_packet_data_size+_packet_data_padding_size)/
sizeof(Sample)];
239 static const std::size_t _number_of_samples = _packet_data_size/(
sizeof(Sample));
240 static const std::size_t _number_of_channels = _packet_weights_size/
sizeof(uint16_t);
241 static const std::size_t _size = _packet_data_padding_size + _packet_weights_padding_size + _packet_data_size + _packet_weights_size +
sizeof(PacketHeader);
242 static const std::size_t _number_of_time_samples = _packet_data_size/(2*
sizeof(Sample)*_number_of_channels);
248 static_assert(
sizeof(BeamFormerPacketLow)==4736,
"BeamFormerPacketLow Packet size is not as expected");
250 static constexpr uint32_t number_of_channels_low = 7776;
256 #include "cheetah/rcpt_low/detail/BeamFormerPacket.cpp" 258 #endif // SKA_CHEETAH_RCPT_LOW_BEAMFORMERPACKET_LOW_H
The incoming RF signal sample from the UDP stream.
Some limits and constants for FLDO.