forked from arthurits/SignalAnalysis
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUserDefinedTypes.cs
More file actions
141 lines (119 loc) · 7.08 KB
/
Copy pathUserDefinedTypes.cs
File metadata and controls
141 lines (119 loc) · 7.08 KB
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
138
139
140
141
namespace SignalAnalysis;
public class SignalStats
{
public SignalStats(double Max = 0, double Min = 0, double Avg = 0, double Var = 0, double FractalDim = 0, double FractalVar = 0, double AppEn = 0, double SampEn = 0, double ShannEn = 0, double BitEn = 0, double IdealEn = 0, double ShannonIdeal = 0, double IntegralValue = 0)
{
Maximum = Max;
Minimum = Min;
Average = Avg;
Variance = Var;
FractalDimension = FractalDim;
FractalVariance = FractalVar;
ApproximateEntropy = AppEn;
SampleEntropy = SampEn;
ShannonEntropy = ShannEn;
EntropyBit = BitEn;
IdealEntropy = IdealEn;
this.ShannonIdeal = ShannonIdeal;
Integral = IntegralValue;
}
public double Maximum { get; set; } = 0;
public double Minimum { get; set; } = 0;
public double Average { get; set; } = 0;
public double Variance { get; set; } = 0;
public double BoxplotQ1 { get; set; } = 0;
public double BoxplotQ2 { get; set; } = 0;
public double BoxplotQ3 { get; set; } = 0;
public double BoxplotMax { get; set; } = 0;
public double BoxplotMin { get; set; } = 0;
public double FractalDimension { get; set; } = 0;
public double FractalVariance { get; set; } = 0;
public double ApproximateEntropy { get; set; } = 0;
public double SampleEntropy { get; set; } = 0;
/// <summary>
/// // The Shannon entropy (in bits per symbol) of the data
/// </summary>
public double ShannonEntropy { get; set; } = 0;
/// <summary>
/// The minimum number of bits to encode the data
/// </summary>
public double EntropyBit { get; set; } = 0;
/// <summary>
/// The Shannon entropy assuming all data symbols are different. This is, in fact, the maximum Shannon entropy
/// </summary>
public double IdealEntropy { get; set; } = 0;
/// <summary>
/// The ratio Shannon entropy / Ideal entropy
/// </summary>
public double ShannonIdeal { get; set; } = 0;
public double[] Derivative { get; set; } = Array.Empty<double>();
public double Integral { get; set; } = 0;
public double[] FFTpower { get; set; } = Array.Empty<double>();
public double[] FFTmagnitude { get; set; } = Array.Empty<double>();
public double[] FFTfrequencies { get; set; } = Array.Empty<double>();
/// <summary>
/// Gets a text-formatted result string
/// </summary>
/// <param name="culture">Culture used to format the string</param>
/// <param name="boxplot"><see langword="True"/> if the parameters defining the box plot are included in the string</param>
/// <param name="entropy"><see langword="True"/> if the entropy variables are included in the string</param>
/// <param name="integral"><see langword="True"/> if the integral value and the algorithm name are included in the string</param>
/// <param name="integralAlgorithm"><see langword="True"/>Integration algorithm name</param>
/// <returns>Results formatted as string</returns>
public string ToString(System.Globalization.CultureInfo culture, bool boxplot = false, bool entropy = false, string entropyAlgorithm = "", int entropyM = 0, double entropyR = 0.0, bool integral = false, string integralAlgorithm = "")
{
string strTemp;
strTemp = $"{StringResources.FileHeader07}{StringResources.FileHeaderColon}{Average.ToString("0.######", culture)}{Environment.NewLine}" +
$"{StringResources.FileHeader32}{StringResources.FileHeaderColon}{Variance.ToString("0.######", culture)}{Environment.NewLine}" +
$"{StringResources.FileHeader08}{StringResources.FileHeaderColon}{Maximum.ToString("0.##", culture)}{Environment.NewLine}" +
$"{StringResources.FileHeader09}{StringResources.FileHeaderColon}{Minimum.ToString("0.##", culture)}{Environment.NewLine}";
if (boxplot)
{
strTemp += $"{StringResources.FileHeader33}{StringResources.FileHeaderColon}{BoxplotMin.ToString("0.######", culture)}{Environment.NewLine}" +
$"{StringResources.FileHeader35}{StringResources.FileHeaderColon}{BoxplotQ1.ToString("0.######", culture)}{Environment.NewLine}" +
$"{StringResources.FileHeader36}{StringResources.FileHeaderColon}{BoxplotQ2.ToString("0.######", culture)}{Environment.NewLine}" +
$"{StringResources.FileHeader37}{StringResources.FileHeaderColon}{BoxplotQ3.ToString("0.######", culture)}{Environment.NewLine}" +
$"{StringResources.FileHeader34}{StringResources.FileHeaderColon}{BoxplotMax.ToString("0.######", culture)}{Environment.NewLine}";
}
strTemp += $"{StringResources.FileHeader10}{StringResources.FileHeaderColon}{FractalDimension.ToString("0.########", culture)}{Environment.NewLine}" +
$"{StringResources.FileHeader11}{StringResources.FileHeaderColon}{FractalVariance.ToString("0.########", culture)}{Environment.NewLine}";
if (entropy)
{
strTemp += $"{StringResources.FileHeader14}{StringResources.FileHeaderColon}{ShannonEntropy.ToString("0.########", culture)}{Environment.NewLine}" +
$"{StringResources.FileHeader15}{StringResources.FileHeaderColon}{EntropyBit.ToString("0.########", culture)}{Environment.NewLine}" +
$"{StringResources.FileHeader16}{StringResources.FileHeaderColon}{IdealEntropy.ToString("0.########", culture)}{Environment.NewLine}" +
$"{StringResources.FileHeader38}{StringResources.FileHeaderColon}{ShannonIdeal.ToString("0.########", culture)}{Environment.NewLine}" +
$"{StringResources.FileHeader39}{StringResources.FileHeaderColon}{entropyAlgorithm}{Environment.NewLine}" +
$"{StringResources.FileHeader12} (m={entropyM}, r={entropyR.ToString("0.##", culture)}){StringResources.FileHeaderColon}{ApproximateEntropy.ToString("0.########", culture)}{Environment.NewLine}" +
$"{StringResources.FileHeader13} (m={entropyM}, r={entropyR.ToString("0.##", culture)}){StringResources.FileHeaderColon}{SampleEntropy.ToString("0.########", culture)}{Environment.NewLine}";
}
if (integral)
{
strTemp += $"{StringResources.FileHeader30}{StringResources.FileHeaderColon}{integralAlgorithm}{Environment.NewLine}" +
$"{StringResources.FileHeader31}{StringResources.FileHeaderColon}{Integral.ToString("0.########", culture)}";
}
return strTemp;
}
}
/// <summary>
/// Stores all data that defines the signal
/// </summary>
public class SignalData
{
public DateTime StartTime { get; set; } = DateTime.MinValue;
public DateTime EndTime { get; set; } = DateTime.MinValue;
public TimeSpan MeasuringTime { get; set; } = TimeSpan.Zero;
public int SeriesNumber { get; set; } = 0;
public int SeriesPoints { get; set; } = 0;
public double SampleFrequency { get; set; } = 0;
public double[][] Data = Array.Empty<double[]>();
public string[] SeriesLabels = Array.Empty<string>();
/// <summary>
/// Array starting index
/// </summary>
public int IndexStart { get; set; } = 0;
/// <summary>
/// Array ending index
/// </summary>
public int IndexEnd { get; set; } = 0;
}