Skip to content

Commit

Permalink
fix: measurement
Browse files Browse the repository at this point in the history
  • Loading branch information
liuwuhao committed Sep 6, 2021
1 parent d7351f9 commit 079eeb9
Show file tree
Hide file tree
Showing 7 changed files with 5,612 additions and 299 deletions.
80 changes: 53 additions & 27 deletions src/kst3000.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -252,21 +252,44 @@ int KST3000::get_waveform_data(char *data) {
int num = get_waveform_points();
int data_length = 10 + num + 1; // 10 is the length of <header>, 1 is the end breakline(\n)
char buffer[data_length];
// memset(buffer, 0, num);
exec(command, buffer, true, data_length);
// for (int i = 0; i < 10; i++) {
// cout << buffer[i];
//// cout << (int) (unsigned char) buffer[i] << " ";
// }
// cout << endl;
// for (int i = 10; i < data_length; i++) {
// cout << std::hex << "0x" << (int) (unsigned char) buffer[i] << " ";
// }
// cout << endl;
memcpy(data, buffer + 10, num);
return 0;
}

/**
* @brief convert a measurement data array to a 2d array: time array & voltage array
* */
int KST3000::get_real_data(double **result) {
int points = get_waveform_points();
char data[points];
get_waveform_data(data);
char preamble[1024];
get_waveform_preamble(preamble);
vector<string> v_preamble = split(preamble, ",");
double x_increment = stod(v_preamble[4]);
double x_origin = stod(v_preamble[5]);
double x_reference = stod(v_preamble[6]);
double y_increment = stod(v_preamble[7]);
double y_origin = stod(v_preamble[8]);
double y_reference = stod(v_preamble[9]);

for (int i = 0; i < points; i++) {
double time = ((i - x_reference) * x_increment) + x_origin;
result[0][i] = time;

int voltage_data = (int) (unsigned char) data[i];
if (voltage_data == 0) {
// Hole. Holes are locations where data has not yet been acquired.
continue;
}
double voltage = ((voltage_data - y_reference) * y_increment) + y_origin;
result[1][i] = voltage;
}
return 0;
}


/**
* @brief save waveform data to the target file
* @details The file can be plotted, for example using python.
Expand All @@ -283,30 +306,33 @@ int KST3000::save_waveform_data(string file_path) {
char preamble[1024];
get_waveform_preamble(preamble);
vector<string> v_preamble = split(preamble, ",");
double x_increment = stod(v_preamble[4]);
double x_origin = stod(v_preamble[5]);
double x_reference = stod(v_preamble[6]);
double y_increment = stod(v_preamble[7]);
double y_origin = stod(v_preamble[8]);
double y_reference = stod(v_preamble[9]);
int points = get_waveform_points();
char data[points];
get_waveform_data(data);

double *result[2];
result[0] = new double[points];
result[1] = new double[points];
get_real_data(result);
stringstream stream;
stream << "time(ms)" << "," << "voltage(V)" << endl;
for (int i = 0; i < points; i++) {
double time = ((i - x_reference) * x_increment) + x_origin;
int voltage_data = (int) (unsigned char) data[i];

if (voltage_data == 0) {
continue;
}
double voltage = ((voltage_data - y_reference) * y_increment) + y_origin;
stream << time * 1000 << "," << voltage << endl;
stream << result[0][i] * 1000 << "," << result[1][i] << endl;
}

write_to_file(stream.str(), file_path);

// stringstream stream;
// stream << "time(ms)" << "," << "voltage(V)" << endl;
// for (int i = 0; i < points; i++) {
// double time = ((i - x_reference) * x_increment) + x_origin;
// int voltage_data = (int) (unsigned char) data[i];
//
// if (voltage_data == 0) {
// continue;
// }
// double voltage = ((voltage_data - y_reference) * y_increment) + y_origin;
// stream << time * 1000 << "," << voltage << endl;
// }
//
// write_to_file(stream.str(), file_path);
return 0;
}

Expand Down
2 changes: 2 additions & 0 deletions src/kst3000.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ class KST3000 : public Device {

int get_waveform_data(char *data);

int get_real_data(double **result);

int save_waveform_data(string file_path = "./buffer");

int set_waveform_source(int channel = 1);
Expand Down
6 changes: 6 additions & 0 deletions test/.ipynb_checkpoints/Untitled-checkpoint.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"cells": [],
"metadata": {},
"nbformat": 4,
"nbformat_minor": 5
}
428 changes: 399 additions & 29 deletions test/.ipynb_checkpoints/plot-checkpoint.ipynb

Large diffs are not rendered by default.

Loading

0 comments on commit 079eeb9

Please sign in to comment.