Handle csv import/export with power traces

This commit is contained in:
Jan Käberich 2021-07-13 18:40:40 +02:00
parent deefe30beb
commit fa4e954f73
5 changed files with 38 additions and 12 deletions

View File

@ -127,6 +127,31 @@ unsigned int TraceMath::numSamples()
return data.size();
}
QString TraceMath::dataTypeToString(TraceMath::DataType type)
{
switch(type) {
case DataType::Frequency:
return "Frequency";
case DataType::Power:
return "Power";
case DataType::Time:
return "Time";
default:
return "Invalid";
}
}
TraceMath::DataType TraceMath::dataTypeFromString(QString s)
{
for(unsigned int i=0;i<(int) DataType::Invalid;i++) {
if(s.compare(dataTypeToString((DataType) i), Qt::CaseInsensitive) == 0) {
return (DataType) i;
}
}
// not found
return DataType::Invalid;
}
void TraceMath::removeInput()
{
if(input) {

View File

@ -94,6 +94,9 @@ public:
Data getInterpolatedSample(double x);
unsigned int numSamples();
static QString dataTypeToString(DataType type);
static DataType dataTypeFromString(QString s);
// indicate whether this function produces time or frequency domain data
virtual DataType outputType(DataType inputType) = 0;
virtual QString description() = 0;

View File

@ -119,7 +119,7 @@ void Trace::fillFromTouchstone(Touchstone &t, unsigned int parameter)
}
clear();
domain = DataType::Frequency;
fileParemeter = parameter;
fileParameter = parameter;
filename = t.getFilename();
for(unsigned int i=0;i<t.points();i++) {
auto tData = t.point(i);
@ -201,7 +201,7 @@ QString Trace::fillFromCSV(CSV &csv, unsigned int parameter)
fill(imag.begin(), imag.end(), 0.0);
}
clear();
fileParemeter = parameter;
fileParameter = parameter;
filename = csv.getFilename();
auto xColumn = csv.getColumn(0);
if(csv.getHeader(0).compare("time", Qt::CaseInsensitive) == 0) {
@ -215,7 +215,7 @@ QString Trace::fillFromCSV(CSV &csv, unsigned int parameter)
Data d;
d.x = xColumn[i];
d.y = complex<double>(real[i], imag[i]);
addData(d, DataType::Frequency);
addData(d, domain);
}
reflection = false;
createdFromFile = true;
@ -246,8 +246,6 @@ void Trace::fillFromDatapoints(Trace &S11, Trace &S12, Trace &S21, Trace &S22, c
void Trace::fromLivedata(Trace::LivedataType type, LiveParameter param)
{
// TODO set domain depending on incoming data
domain = DataType::Frequency;
createdFromFile = false;
_liveType = type;
_liveParam = param;
@ -328,7 +326,7 @@ nlohmann::json Trace::toJSON()
} else if(isFromFile()) {
j["type"] = "File";
j["filename"] = filename.toStdString();
j["parameter"] = fileParemeter;
j["parameter"] = fileParameter;
}
j["velocityFactor"] = vFactor;
j["reflection"] = reflection;
@ -366,15 +364,15 @@ void Trace::fromJSON(nlohmann::json j)
paused = j.value("paused", false);
} else if(type == "Touchstone" || type == "File") {
auto filename = QString::fromStdString(j.value("filename", ""));
fileParemeter = j.value("parameter", 0);
fileParameter = j.value("parameter", 0);
try {
if(filename.endsWith(".csv")) {
auto csv = CSV::fromFile(filename);
fillFromCSV(csv, fileParemeter);
fillFromCSV(csv, fileParameter);
} else {
// has to be a touchstone file
Touchstone t = Touchstone::fromFile(filename.toStdString());
fillFromTouchstone(t, fileParemeter);
fillFromTouchstone(t, fileParameter);
}
} catch (const exception &e) {
std::string what = e.what();
@ -932,7 +930,7 @@ QString Trace::getFilename() const
unsigned int Trace::getFileParameter() const
{
return fileParemeter;
return fileParameter;
}
double Trace::getNoise(double frequency)

View File

@ -174,7 +174,7 @@ private:
bool calibration;
DataType domain;
QString filename;
unsigned int fileParemeter;
unsigned int fileParameter;
std::set<Marker*> markers;
struct {
union {

View File

@ -42,7 +42,7 @@ void TraceCSVExport::on_buttonBox_accepted()
CSV csv;
// create the first column (X data)
vector<double> X;
QString Xname = traces[0]->outputType() == Trace::DataType::Frequency ? "Frequency" : "Time";
QString Xname = Trace::dataTypeToString(traces[0]->outputType());
auto samples = traces[0]->numSamples();
for(unsigned int i=0;i<samples;i++) {
X.push_back(traces[0]->sample(i).x);