@@ -103,7 +103,8 @@ def analyzeTimestamps(
103
103
minFrequencyHz ,
104
104
maxFrequencyHz ,
105
105
plotArgs ,
106
- allowDataGaps = False ):
106
+ allowDataGaps = False ,
107
+ isOptionalSensor = False ):
107
108
WARNING_RELATIVE_DELTA_TIME = 0.2
108
109
DATA_GAP_RELATIVE_DELTA_TIME = 10
109
110
MIN_DATA_GAP_SECONDS = 0.25
@@ -152,7 +153,7 @@ def toPercent(value):
152
153
plottype = "scatter" ,
153
154
xLabel = "Time (s)" ,
154
155
yLabel = "Time diff (ms)" ,
155
- yScale = "log " if dataGaps > 0 else None ,
156
+ yScale = "symlog " if dataGaps > 0 else None ,
156
157
s = 10 ,
157
158
** plotArgs ))
158
159
@@ -168,7 +169,7 @@ def toPercent(value):
168
169
)
169
170
170
171
if dataGaps > 0 and not allowDataGaps :
171
- self .__addIssue (DiagnosisLevel .ERROR ,
172
+ self .__addIssue (DiagnosisLevel .WARNING if isOptionalSensor else DiagnosisLevel . ERROR ,
172
173
f"Found { dataGaps } gaps in the data longer than { SECONDS_TO_MILLISECONDS * thresholdDataGap :.1f} ms." )
173
174
174
175
if badDeltaTimes > MAX_BAD_DELTA_TIME_RATIO * total and not allowDataGaps :
@@ -180,12 +181,12 @@ def toPercent(value):
180
181
181
182
frequency = 1.0 / medianDeltaTime
182
183
if minFrequencyHz is not None and frequency < minFrequencyHz :
183
- self .__addIssue (DiagnosisLevel .ERROR ,
184
+ self .__addIssue (DiagnosisLevel .WARNING if isOptionalSensor else DiagnosisLevel . ERROR ,
184
185
f"Minimum required frequency is { minFrequencyHz :.1f} Hz but data is { frequency :.1f} Hz"
185
186
)
186
187
187
188
if maxFrequencyHz is not None and frequency > maxFrequencyHz :
188
- self .__addIssue (DiagnosisLevel .ERROR ,
189
+ self .__addIssue (DiagnosisLevel .WARNING if isOptionalSensor else DiagnosisLevel . ERROR ,
189
190
f"Maximum allowed frequency is { maxFrequencyHz :.1f} Hz but data is { frequency :.1f} Hz"
190
191
)
191
192
@@ -233,16 +234,15 @@ def analyzeSignalNoise(
233
234
signal ,
234
235
timestamps ,
235
236
samplingRate ,
236
- cutoffFrequency ,
237
237
noiseThreshold ,
238
238
sensorName ,
239
239
measurementUnit ):
240
240
WINDOW_SIZE_SECONDS = 1.0
241
241
count = np .shape (timestamps )[0 ]
242
242
windowSize = int (WINDOW_SIZE_SECONDS * samplingRate )
243
+ cutoffFrequency = samplingRate / 4.0
243
244
if windowSize <= 0 : return
244
245
if count < windowSize : return
245
- if cutoffFrequency >= 2.0 * samplingRate : return
246
246
247
247
def highpass (signal , fs , cutoff , order = 3 ):
248
248
from scipy .signal import butter , filtfilt
@@ -428,7 +428,6 @@ def diagnoseAccelerometer(data, output):
428
428
ACC_MIN_FREQUENCY_HZ = 50.0
429
429
ACC_MAX_FREQUENCY_HZ = 1e4
430
430
ACC_NOISE_THRESHOLD = 2.5 # m/s²
431
- ACC_CUTOFF_FREQUENCY_HZ = 50.0
432
431
ACC_UNIT_CHECK_THRESHOLD = 200.0 # m/s²
433
432
434
433
sensor = data ["accelerometer" ]
@@ -447,7 +446,6 @@ def diagnoseAccelerometer(data, output):
447
446
return
448
447
449
448
samplingRate = computeSamplingRate (deltaTimes )
450
- cutoffThreshold = min (samplingRate / 4.0 , ACC_CUTOFF_FREQUENCY_HZ )
451
449
452
450
status = Status ()
453
451
status .analyzeTimestamps (
@@ -470,7 +468,6 @@ def diagnoseAccelerometer(data, output):
470
468
signal ,
471
469
timestamps ,
472
470
samplingRate ,
473
- cutoffThreshold ,
474
471
ACC_NOISE_THRESHOLD ,
475
472
sensorName = "Accelerometer" ,
476
473
measurementUnit = "m/s²" )
@@ -572,7 +569,8 @@ def diagnoseMagnetometer(data, output):
572
569
MAGN_MAX_FREQUENCY_HZ ,
573
570
plotArgs = {
574
571
"title" : "Magnetometer time diff"
575
- })
572
+ },
573
+ isOptionalSensor = True )
576
574
status .analyzeSignalDuplicateValues (signal )
577
575
status .analyzeSignalUnit (
578
576
signal ,
@@ -622,7 +620,8 @@ def diagnoseBarometer(data, output):
622
620
BARO_MAX_FREQUENCY_HZ ,
623
621
plotArgs = {
624
622
"title" : "Barometer time diff"
625
- })
623
+ },
624
+ isOptionalSensor = True )
626
625
status .analyzeSignalDuplicateValues (signal , BARO_DUPLICATE_VALUE_THRESHOLD )
627
626
status .analyzeSignalUnit (
628
627
signal ,
@@ -670,7 +669,8 @@ def diagnoseGps(data, output):
670
669
plotArgs = {
671
670
"title" : "GPS time diff"
672
671
},
673
- allowDataGaps = True )
672
+ allowDataGaps = True ,
673
+ isOptionalSensor = True )
674
674
status .analyzeSignalDuplicateValues (signal )
675
675
676
676
output ["gps" ] = {
0 commit comments