ENERGY MONITOR 0.2
Loading...
Searching...
No Matches
signal.h
Go to the documentation of this file.
1#pragma once
2
3#include <stdlib.h>
4#include <vector>
5#include "../../core/core.h"
6#include <string>
7
8
9enum class sig_exp{
10 csv = 0,
11 sig = 1
12};
13
24
25
26 //ENUM FOR EASE OF ACCESSING SIGNAL DATA and ARRANGMENT OF COLUMNS
35
36
39class signal{
40 protected:
41
42 friend class _signal_operation;
43
44
45 //Basic data
48 struct _analytics{
50 double avg_ptp; //CHECKED
52 double max_ptp; //CHECKED
54 double min_ptp; //CHECKED
55
56 //VALUES MAX/MIN
58 double avg_max_val; //avg amplitude //CHECKED
60 double avg_min_val; //CHECKED
62 double max_val; //CHECKED
64 double max_val_time; //time in seconds; //CHECKED
66 double min_val; //CHECKED
68 double min_val_time; //CHECKED
69
70 //SLOPE MAX/MIN
71 double max_dvBdt; //IN PROGRESS
72 double max_dvBdt_time; //time in seconds; //IN PROGRESS
73 double min_dvBdt; //IN PROGRESS
74 double min_dvBdt_time; //IN PROGRESS
75
77 double dc_offset; //CHECKED
79 double thd; //total harmonic distortion; //IN PROGRESS
81 double rms; //CHECKED
83 double avg; //CHECKED
84
85 bool is_harmonic; //IN PROGRESS
86 bool is_periodic; //CHECKED
87
89 double avg_sample_time; //CHECKED
91 double timeStart; //CHECKED
93 double timeEnd; //CHECKED
95 unsigned int samples_num; //CHECKED
96
97
98
99 double periods_num = 0; //CHECKED
101 double base_frequency = 0; //CHECKED
103 double base_angular_frequency = 0; //CHECKED
105 double periodic_time = 0; //CHECKED
107 double duty_cycle = 0; //CHECKED
109
110
111//METHODS FOR SETTING AND GETTING VALUES FROM the signal dataset
112
114 inline void putValue(double val, int row, int col){
115 signal_data.insertData(val,row,col);
116 }
118 inline double getValue(int row, int col){
119 return signal_data.getData(row,col);
120 }
122 inline void refreshData(){
124 }
125
126using json = nlohmann::json;
127 //SETTINGS
128 double min_max_accuracy = stod(settings.get_setting("signal","min_max_accuracy"));
129 double maxima_diff_rounding = stod(settings.get_setting("signal","maxima_diff_rounding"));
130 double minima_diff_rounding = stod(settings.get_setting("signal","minima_diff_rounding"));
131 bool smaller_extremas_ignored = stoi(settings.get_setting("signal","smaller_extremas_ignored"));
132 double period_diff_accuracy = stod(settings.get_setting("signal","period_diff_accuracy"));
133 bool periodic_avg_rms = stoi(settings.get_setting("signal","periodic_avg&rms"));
134 int frequency_calc_type = stoi(settings.get_setting("signal","frequency_calc_type"));
135
143
147 std::vector<double> value;
148 std::vector<double> time;
149 };
150
157 std::vector<double> rising_trigger_times;
159 std::vector<double> falling_trigger_times;
161 std::vector<double> rising_periods;
163 std::vector<double> falling_periods;
164
165
166 enum class pattern_type{
167 periodic = 1,
168 transient = 2,
169 };
170
171
172 struct pattern{
175 unsigned int periodsCount = 0;
177 pattern(double s_time, double e_time){
178 pattern_start_time = s_time;
179 pattern_end_time = e_time;
180 }
181 };
182
183 std::vector<pattern> periods_pattern;
184
190
191
193 double _trigger_level = 0;
196 int minimum_periodic_periodNum = stoi(settings.get_setting("signal", "minimum_periodic_periodNum") );
197
198
199 double _dvBdt(double v1, double v2, double t1, double t2);
200 double _dv2Bdt2(double v1, double v2, double v3, double t1, double t2);
201 double _vdt(double v1, double v2, double t1, double t2);
202
203
211 bool pre_analyze();
214
222 bool soft_analyze();
236 bool deduce_avg_rms();
243
245 bool pattern_analyze();
246
247
248 std::vector<double[2]> forrierTransform(signal base_sig); //IN PROGRESS
249
251 bool data_viable = false;
252
253
254
255 public:
259 return &val_maximas;
260 }
264 return &val_minimas;
265 }
266
268 return &dvBdt_maximas;
269 }
271 return &dvBdt_minimas;
272 }
273
276 const bool isTimeAnalysed(){
277 return timeDomain_analysed;
278 }
279
280 bool dataViable();
281
286 bool loadData(std::string name, std::string fileLocation = settings.get_setting("signal","import_path"));
287
291 bool loadData(v_container _data);
292
297 bool loadData(std::vector<double> time,std::vector<double> vals);
298
301 bool analyse();
302
303
308 bool pdf_export(std::string name, std::string file_address = settings.get_setting("signal","export_path"));
309
316 bool exportSignal(std::string name , bool export_all = false, sig_exp expType = sig_exp::csv, std::string fileLocation = settings.get_setting("signal","export_path"));
317
321 bool importSignal(std::string name , std::string fileLocation = settings.get_setting("signal","import_path"));
322
325 void set_trigger_level(double v);
326
330 void set_hysteresis(double upThreshold, double lowThreshold);
331
334 const _analytics* get_analytics()const;
335
338 const v_container* get_signal_data()const;
339
340
344 void make_subsignals(std::vector<pattern> &pattern, _subSignals &sig);
345
346
353
354};
355
356
357
358
359
360
361
string get_setting(string class_name, string setting)
Definition setting.h:56
HELD_DATA getData(int row, int col) const
return the data at some address
Definition dataTable.h:64
void insertData(HELD_DATA d, unsigned int row, unsigned int col)
inserts a value to a cell of dataTable instance with that address
Definition dataTable.h:46
void refresh()
refreshes the data Table for any mistake probability or bad handling
Definition dataTable.h:95
signal class the parent class for every other signal or any form of time-sorted (time,...
Definition signal.h:39
const maximas_minimas * get_valMaximas() const
get value peaks in the signal
Definition signal.h:258
bool dataViable()
Definition signal.cpp:52
struct signal::_subSignals subSignals_period_based
bool exportSignal(std::string name, bool export_all=false, sig_exp expType=sig_exp::csv, std::string fileLocation=settings.get_setting("signal","export_path"))
export the signal data to a specific file
Definition signal.cpp:725
void make_subsignals(std::vector< pattern > &pattern, _subSignals &sig)
a function that keeps generating subsignals based on the pattern provided that holds pattern start ti...
Definition signal.cpp:701
double _vdt(double v1, double v2, double t1, double t2)
Definition signal.cpp:66
bool frequency_triggerHysteresis()
calculate the base_frequency with hysteresis added for noise ignorance
Definition signal.cpp:484
const bool isTimeAnalysed()
check if the signal was analysed in the time domain
Definition signal.h:276
bool smaller_extremas_ignored
Definition signal.h:131
bool deduce_avg_rms()
rms and avg based on integer number of signals analysis only
Definition signal.cpp:540
bool timeDomain_analysed
Definition signal.h:250
maximas_minimas val_maximas
Definition signal.h:152
maximas_minimas val_minimas
Definition signal.h:153
bool data_viable
Definition signal.h:251
int frequency_calc_type
Definition signal.h:134
bool period_pattern_analysis()
analyse regions of the signal basesd on their periodic times (connected similar periodic times = 1 co...
Definition signal.cpp:591
const _analytics * get_analytics() const
get analytics of the time_domain analysed signal
Definition signal.cpp:691
double _hysteresis_high_threshold
Definition signal.h:194
bool deduce_baseFrequency()
deduce base frequency + angular + number of periods for the signal
Definition signal.cpp:521
int minimum_periodic_periodNum
Definition signal.h:196
double period_diff_accuracy
Definition signal.h:132
void refreshData()
refresh the dataTable that we use
Definition signal.h:122
std::vector< double > rising_trigger_times
rising edges detected are stored here mainly used by trigger level frequency calculation and hysteres...
Definition signal.h:157
double maxima_diff_rounding
Definition signal.h:129
bool frequency_triggerLevel()
calculate frequency based on crossing trigger level times
Definition signal.cpp:426
bool update_local_maximas_minimas()
EVALUATE MAXIMAS/MINIMAS using SLOPE DATA.
Definition signal.cpp:153
bool pdf_export(std::string name, std::string file_address=settings.get_setting("signal","export_path"))
export valuable signal report (images and text)//in the pdf format
Definition signal.cpp:842
_subSignals * subSignal_periodBased()
get the subSignals generated from this signal based on their periodic times pattern
Definition signal.cpp:712
double min_max_accuracy
Definition signal.h:128
bool pattern_analyze()
analyse changes in the signal and store any continous patterns detected for future interval Based sig...
Definition signal.cpp:663
bool update_slope_maximas_minimas()
VALUES ANALYTICS THAT EVALUATE MAXIMAS_MINIMAS using SLOPE DATA.
const v_container * get_signal_data() const
get any values in the signal data table
Definition signal.cpp:696
_subSignals * subSignal_valueBased()
get the subSignals generated from this signal based on their rms for periods times pattern
Definition signal.cpp:717
bool frequency_peakNdtrough()
calculate frequency based on Local maximas and minimas and their times respectively
Definition signal.cpp:349
std::vector< pattern > periods_pattern
Definition signal.h:183
void interpolate()
INTERPOLATIONS FOR FIXING LOW SAMPLE SIGNALS/DIFFERENT SAMPLING RATES.
double minima_diff_rounding
Definition signal.h:130
struct signal::_subSignals subSignals_value_based
void putValue(double val, int row, int col)
easy abstracted values insersion
Definition signal.h:114
void set_hysteresis(double upThreshold, double lowThreshold)
sets the hysteresis parameters for the hysteresis trigger frequency calculations
Definition signal.cpp:837
bool pre_analyze()
Makes variable data out of the time-value data such as slopes and areas wrt to time.
Definition signal.cpp:77
maximas_minimas dvBdt_minimas
Definition signal.h:155
bool soft_analyze()
soft time tomain analysis
Definition signal.cpp:573
freq_calc_t
decide the frequency calculation type
Definition signal.h:138
@ triggerLevel
Definition signal.h:139
@ peakNdtrough
Definition signal.h:140
@ triggerHysteresis
Definition signal.h:141
bool loadData(std::string name, std::string fileLocation=settings.get_setting("signal","import_path"))
load data from a file directly if it has the following format (time,value)
const maximas_minimas * get_valMinimas() const
get value troughs in the signal
Definition signal.h:263
pattern_type
Definition signal.h:166
double _dvBdt(double v1, double v2, double t1, double t2)
Definition signal.cpp:57
std::vector< double[2]> forrierTransform(signal base_sig)
std::vector< double > falling_trigger_times
rising edges detected are stored here mainly used by trigger level frequency calculation and hysteres...
Definition signal.h:159
void set_trigger_level(double v)
sets the trigger level for the trigger level based frequency calculation
Definition signal.cpp:831
bool analyse()
generalized huge analysis in the time domain fetches basic data
Definition signal.cpp:674
bool post_local_maximas_minimas()
filter local MAXIMAS and MINIMAS and update ptp data (only top maximas and lowest minimas)
Definition signal.cpp:245
double _dv2Bdt2(double v1, double v2, double v3, double t1, double t2)
Definition signal.cpp:62
bool importSignal(std::string name, std::string fileLocation=settings.get_setting("signal","import_path"))
import a signal in the .sig binary format
Definition signal.cpp:776
std::vector< double > falling_periods
rising edges detected are stored here mainly used by trigger level frequency calculation and hysteres...
Definition signal.h:163
const maximas_minimas * get_dvBdtMaximas() const
Definition signal.h:267
double getValue(int row, int col)
easy abstracted values extraction
Definition signal.h:118
bool periodic_avg_rms
Definition signal.h:133
std::vector< double > rising_periods
rising edges detected are stored here mainly used by trigger level frequency calculation and hysteres...
Definition signal.h:161
double _hysteresis_low_threshold
Definition signal.h:195
const maximas_minimas * get_dvBdtMinimas() const
Definition signal.h:270
maximas_minimas dvBdt_maximas
Definition signal.h:154
double _trigger_level
signal value for detecting edges and calculating frequency based on
Definition signal.h:193
v_container signal_data
Definition signal.h:151
nlohmann::json json
Definition signal.h:126
struct signal::_analytics analytics
_settings settings
Definition core.cpp:3
wrap the core folder / include base helper methods and macros used accross the program
sig_exp
Definition signal.h:9
dataTable_order
represent the column order of elements in signal_table
Definition signal.h:28
@ _first_deriv
Definition signal.h:31
@ _second_deriv
Definition signal.h:32
@ _area
Definition signal.h:33
@ _val
Definition signal.h:30
@ _time
Definition signal.h:29
double base_angular_frequency
base frequency but angular
Definition signal.h:103
double avg_sample_time
average sampling time of the signal
Definition signal.h:89
double periods_num
Definition signal.h:99
double thd
total harmonic distorsion for the signal (will be supported with fft implementation)
Definition signal.h:79
double dc_offset
dc_offset of the signal
Definition signal.h:77
double max_val
absolute maximum value
Definition signal.h:62
double duty_cycle
duty cycle of the signal
Definition signal.h:107
double min_ptp
min peak to peak
Definition signal.h:54
double max_dvBdt
Definition signal.h:71
double min_dvBdt_time
Definition signal.h:74
double max_dvBdt_time
Definition signal.h:72
double base_frequency
base frequency of the signal
Definition signal.h:101
unsigned int samples_num
number of samples that the signal holds
Definition signal.h:95
double timeStart
the start time of the signal
Definition signal.h:91
double avg_min_val
average value of troughs
Definition signal.h:60
double periodic_time
periodic_time of the signal
Definition signal.h:105
double max_val_time
absolute maximum value time
Definition signal.h:64
double avg_ptp
avg peak to peak
Definition signal.h:50
double avg_max_val
average value of peaks
Definition signal.h:58
double timeEnd
the time end of the signal
Definition signal.h:93
double rms
rms for the signal
Definition signal.h:81
double min_val_time
absolute minimum value time
Definition signal.h:68
double max_ptp
max peak to peak
Definition signal.h:52
double min_dvBdt
Definition signal.h:73
double min_val
absolute minimum value
Definition signal.h:66
double avg
avg of the signal
Definition signal.h:83
unsigned int transients_count
Definition signal.h:187
unsigned int unique_periods_count
Definition signal.h:188
std::vector< signal > subSignals
Definition signal.h:186
(time, value) representation of peaks and troughs of a signal
Definition signal.h:146
std::vector< double > value
Definition signal.h:147
std::vector< double > time
Definition signal.h:148
double pattern_end_time
Definition signal.h:174
double pattern_start_time
Definition signal.h:173
pattern(double s_time, double e_time)
Definition signal.h:177
unsigned int periodsCount
Definition signal.h:175
pattern_type type
Definition signal.h:176