Skip to content
Snippets Groups Projects
Commit 196f1676 authored by Mattia Mancini's avatar Mattia Mancini
Browse files

Add RCUMode header

parent e2e7e5bf
No related branches found
No related tags found
No related merge requests found
// Copyright (C) 2023 ASTRON (Netherlands Institute for Radio Astronomy)
// SPDX-License-Identifier: GPL-3.0-or-later
/// This code was taken from https://git.astron.nl/RD/aartfaac-tools.git
/// and adapted to fit into DP3 codebase.
#ifndef AARTFAAC_MODE_H
#define AARTFAAC_MODE_H
#include <string>
#include <stdexcept>
class RCUMode {
public:
enum Mode {
Unused = 0, // 0 = Unused
LBAOuter10_90 = 1, // 1 = LBA_OUTER, 10-90 MHz Analog filter
LBAOuter30_90 = 2, // Mode 2 = LBA_OUTER, 30-90 MHz Analog filter
LBAInner10_90 = 3, // Mode 3 = LBA_INNER, 10-90 MHz Analog filter
LBAInner30_90 = 4, // Mode 4 = LBA_INNER, 30-90 MHz Analog filter
HBA110_190 = 5, // Mode 5 = HBA, 110-190MHz Analog filter
HBA170_230 = 6, // Mode 6 = HBA, 170-230MHz Analog filter
HBA210_270 = 7 // Mode 7 = HBA, 210-270MHz Analog filter
} mode;
RCUMode(Mode m) : mode(m){};
RCUMode(){};
std::string ToString() const {
switch (mode) {
default:
case Unused:
return "unused";
case LBAOuter10_90:
return "LBA_OUTER 10-90 MHz";
case LBAOuter30_90:
return "LBA_OUTER 30-90 MHz";
case LBAInner10_90:
return "LBA_INNER 10-90 MHz";
case LBAInner30_90:
return "LBA_INNER 30-90 MHz";
case HBA110_190:
return "HBA 110-190 MHz";
case HBA170_230:
return "HBA 170-230 MHz";
case HBA210_270:
return "HBA 210-270 MHz";
}
}
std::string AntennaType() {
std::string antenna_type;
switch (mode) {
case RCUMode::LBAInner10_90:
case RCUMode::LBAInner30_90:
case RCUMode::LBAOuter10_90:
case RCUMode::LBAOuter30_90:
antenna_type = "LBA";
break;
case RCUMode::HBA110_190:
case RCUMode::HBA170_230:
case RCUMode::HBA210_270:
antenna_type = "HBA";
break;
default:
antenna_type = "?";
break;
}
return antenna_type;
}
bool operator==(Mode _mode) const { return _mode == mode; }
static RCUMode FromNumber(int modeNumber) {
return {static_cast<Mode>(modeNumber)};
}
double Bandwidth() const {
switch (mode) {
case RCUMode::LBAInner10_90: // 200 MHz clock, Nyquist zone 1
case RCUMode::LBAInner30_90:
case RCUMode::LBAOuter10_90:
case RCUMode::LBAOuter30_90:
case RCUMode::HBA110_190: // 200 MHz clock, Nyquist zone 2
case RCUMode::HBA210_270: // 200 MHz clock, Nyquist zone 3
return 195312.5; // 1/1024 x nu_{clock}
case RCUMode::HBA170_230: // 160 MHz clock, Nyquist zone 3
return 156250.0;
default:
throw std::runtime_error(
"Don't know how to handle this mode: not implemented yet");
}
}
double CentralFrequency() const {
switch (mode) {
case RCUMode::LBAOuter30_90:
case RCUMode::LBAInner30_90:
return 60.;
case RCUMode::LBAOuter10_90:
case RCUMode::LBAInner10_90:
return 50.;
case RCUMode::HBA110_190:
return 150.;
case RCUMode::HBA210_270:
return 240.;
case RCUMode::HBA170_230:
return 200.;
default:
throw std::runtime_error(
"Don't know how to handle this mode: not implemented yet");
}
}
double FrequencyOffset() const {
switch (mode) {
case RCUMode::LBAInner10_90: // 200 MHz clock, Nyquist zone 1
case RCUMode::LBAInner30_90:
case RCUMode::LBAOuter10_90:
case RCUMode::LBAOuter30_90:
return 0.0;
case RCUMode::HBA110_190: // 200 MHz clock, Nyquist zone 2
return 100e6;
case RCUMode::HBA170_230: // 160 MHz clock, Nyquist zone 3
return 160e6;
case RCUMode::HBA210_270: // 200 MHz clock, Nyquist zone 3
return 200e6;
default:
throw std::runtime_error(
"Don't know how to handle this mode: not implemented yet");
}
}
};
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment