-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathparameterreader.cpp
137 lines (107 loc) · 5.59 KB
/
parameterreader.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include "parameterreader.h"
#include <QFileDialog>
#include <QTextStream>
#include <QStringList>
/*
* Ovde nam treba qfileDialog da bi smo lagano nasli podatke
*/
ParameterReader::ParameterReader(QObject *parent) : QObject(parent)
{
//while petlju smo cisto stavili da nam ne dolazi do pucanja kada ne selektujemo
// fajl, mozda bi smo mogli to nekako elegantnije da resimo, ali ovo je dovoljno za sada
while (selectedFile.length() == 0) {
//Preko ovoga citamo fajl
selectedFile = QFileDialog::getOpenFileName(0,
tr("Otvori s parametar fajlove(prvo se ucitava standardan,"
"drugi se ucitava kalibracioni)"),
"D:\\Downloads\\sPAram\\diplKomplParametri",
tr("Touchstone Csv (*.s2p *.csv)"));
//Nakon ovoga ga citamo
QFile file(selectedFile);
file.open(QIODevice::ReadOnly);
//ne moramo da proveravamo da li je open
if (file.exists()) {
QTextStream in(&file);
while (!in.atEnd()) {
QString line = in.readLine();
rawData.append(line);
}
}
file.close();
//Sada treba da ga isparsiramo
//NAPOMENA Frekvencije smo normalizovali na megaherce
foreach (QString stringToParse, rawData) {
if (stringToParse.startsWith('!') || (stringToParse.startsWith('#')) ||
stringToParse.startsWith('B') || stringToParse.startsWith('F') ||
(stringToParse.length() == 0) || stringToParse.startsWith('E')) {
continue;
}else {
QStringList strData;
//Ako ne pocinje sa ovim onda treba da izvucemo podatke iz linije
//moramo da dodamo da ako je s2p fajl
if (selectedFile.endsWith('p')) {
strData = stringToParse.split('\t',QString::SkipEmptyParts);
}else {
//Ovo je za slucaj kada imamo csv fajl
strData = stringToParse.split(',',QString::SkipEmptyParts);
}
//Ok ovo nam je trebalo samo da vidimo da li korektno radi
int innerDebugVar = 0;
innerDebugVar++;
//prvi nam je frekvencija, slede posle parametri
FreqSparPlain tempFreqObj;
//Aj sada da krenemo da konvertujemo podatke
// za ekstraktovanje iz scientific notacije pogledati toDouble od QString-a
//istovremeno normalizujemo na MHz-ove
QString extractedFreqString = strData.at(0);
double extractedFreq = extractedFreqString.toDouble()/1e+06;
//Da bi smo to uradili moramo da vidimo kolika nam je zaista red
// frekvencija, pa onda treba normalizovati sa obzirom na to...
// delicemo frekvenciju sa 10 i povecavati sve dok ne nadjemo blisku
// vrednost, posle cemo da vidimo gde ovo mozemo da stavimo
// mada ovo deluje glupavo posto vec radimo sa redom megaherca
// pa je dovoljno da ga podelimo sa 10^6
// int redFrekvencije = 10;
// while (redFrekvencije < extractedFreq ) {
// redFrekvencije *= redFrekvencije;
// }
// //Tek ovde normalizujemo frekvenciju
// extractedFreq = extractedFreq/redFrekvencije;
//sada mozemo da krenemo da konstruisemo FreqSparPlain objekat
tempFreqObj.setFrequency(extractedFreq);
//sada na isti nacin i ostale parametre
// naravno ovo cemo uraditi u petlji da se ne bi smo ponavljali
for (int var = 1; var < strData.count(); var = var + 2) {
QString realPartString = strData.at(var);
double realPart = realPartString.toDouble();
QString imagPartString = strData.at(var+1);
double imagPart = imagPartString.toDouble();
//Treba nam ova temp varijabla da bi smo jednostavno dodali
// parametar
SparamComplexPlain tempComplexSpar{realPart,imagPart};
//sada mozemo da nastavimo da konstruisemo FreqSparPlain objekat
// kada koristimo setOneParamer metodu ovaj jednostavno dodaje
// na listu vrednosti
tempFreqObj.setOneParameter(tempComplexSpar);
}
//moramo da obradimo i slucaj ako imamo samo s11 parametre
if (tempFreqObj.getSparameters().count() <= 4) {
SparamComplexPlain tempComplexZeroSparam {0,0};
//Naravno stavicemo ukoliko jos neki fali
//Ovo bi trebalo da radi posao
for (int var = tempFreqObj.getSparameters().count(); var < 4; ++var) {
tempFreqObj.setOneParameter(tempComplexZeroSparam);
}
}
//sada jos ostaje da unesemo rezultate
extractedData << tempFreqObj;
}
}
}
int debugVar = 0;
debugVar++;
}
QVector<FreqSparPlain> ParameterReader::getExtractedData() const
{
return extractedData;
}