add: finding zero + cleaning
This commit is contained in:
parent
f0af7118b8
commit
f82ff4ca4c
84
main.cpp
84
main.cpp
|
@ -2,13 +2,95 @@
|
|||
// Created by Elie Baier on 23.02.24.
|
||||
//
|
||||
|
||||
#include <cmath>
|
||||
#include "iostream"
|
||||
#include "string"
|
||||
#include "fstream"
|
||||
#include "sstream"
|
||||
#include "matplot/matplot.h"
|
||||
|
||||
using namespace std;
|
||||
namespace plt = matplot;
|
||||
|
||||
int MIN_ZERO_SEPARATION = 10;
|
||||
|
||||
vector<double> findZeroCrossings(const std::vector<double>& data) {
|
||||
std::vector<double> zeroCrossings;
|
||||
for (int i = 1; i < data.size(); ++i) {
|
||||
if (data[i - 1] * data[i] < 0 || data[i - 1] * data[i] == 0) {
|
||||
|
||||
// Cleaning the duplicate zero which are +-MIN_ZERO_SEPARATION
|
||||
if(zeroCrossings.size() >= 1) {
|
||||
if(zeroCrossings[zeroCrossings.size() - 1] - MIN_ZERO_SEPARATION < i && zeroCrossings[zeroCrossings.size() - 1] + MIN_ZERO_SEPARATION > i) {
|
||||
// cout << "Found duplicate zero: " << i << endl;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
zeroCrossings.push_back(i);
|
||||
}
|
||||
}
|
||||
return zeroCrossings;
|
||||
}
|
||||
|
||||
int main() {
|
||||
|
||||
cout << "Hello World" << endl;
|
||||
ifstream dataFile;
|
||||
dataFile.open("/Users/eliebaier/Workspace/Physique/TP8/DATA/ALL0000/F0000CH1.CSV");
|
||||
if (!dataFile.is_open()) {
|
||||
std::cerr << "Error opening file." << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
string line;
|
||||
|
||||
// Skipping TEKTRONICS DEFINITION lines
|
||||
for(auto i = 0; i < 18; i++) {
|
||||
getline(dataFile, line);
|
||||
}
|
||||
|
||||
std::vector<double> xData, yData;
|
||||
while(getline(dataFile, line)) {
|
||||
// Cleaning the lines
|
||||
line.erase(0, 3);
|
||||
line.erase(line.size() - 1, line.size());
|
||||
|
||||
std::string cleanedLine;
|
||||
for (char c : line) {
|
||||
if (std::isdigit(c) || c == '.' || c == ',') {
|
||||
cleanedLine += c;
|
||||
}
|
||||
}
|
||||
|
||||
double x, y;
|
||||
istringstream iss(line);
|
||||
char comma;
|
||||
if (!(iss >> x >> comma >> y)) {
|
||||
std::cerr << "Error parsing line: " << line << std::endl;
|
||||
continue;
|
||||
}
|
||||
xData.push_back(x);
|
||||
yData.push_back(y);
|
||||
}
|
||||
|
||||
dataFile.close();
|
||||
|
||||
plt::plot(xData, yData);
|
||||
plt::xlabel("X Label");
|
||||
plt::ylabel("Y Label");
|
||||
plt::title("Line Plot");
|
||||
|
||||
vector<double> zeroCrossings = findZeroCrossings(yData);
|
||||
|
||||
// Drawing lines on the found zeros
|
||||
for(auto zero : zeroCrossings) {
|
||||
cout << "Zero: " << zero << endl;
|
||||
plt::line(xData[zero], -2, xData[zero], 2);
|
||||
}
|
||||
|
||||
// Show the plot
|
||||
plt::show();
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
Reference in New Issue