@@ -230,11 +230,30 @@ def test_car_vib_amp_realistic(self):
230230 assert np .std (w ['a_vert' ]) > 0.001 , \
231231 f"car a_vert std too low: { np .std (w ['a_vert' ]):.4f} — road noise not modelled"
232232
233- def test_truck_speed_lt_car (self ):
234- """truck v_mean must be less than car — primary urban speed discriminator """
233+ def test_car_truck_speed_realistic (self ):
234+ """car and truck v_mean must both be realistic urban speeds (1–20 m/s) """
235235 from sgi ._internal .generator import MOTION_PARAMS
236- assert MOTION_PARAMS ['truck' ][0 ] < MOTION_PARAMS ['car' ][0 ], \
237- "truck v_mean should be less than car (urban: truck ~30km/h, car ~50km/h)"
236+ car_vm = MOTION_PARAMS ['car' ][0 ]
237+ truck_vm = MOTION_PARAMS ['truck' ][0 ]
238+ assert 1.0 < car_vm < 20.0 , f"car v_mean={ car_vm } outside realistic urban range"
239+ assert 1.0 < truck_vm < 20.0 , f"truck v_mean={ truck_vm } outside realistic urban range"
240+
241+ def test_car_vmean_calibrated (self ):
242+ """car v_mean must be calibrated to PVS dataset: 9.5 m/s (34.2 km/h)"""
243+ from sgi ._internal .generator import MOTION_PARAMS
244+ assert MOTION_PARAMS ['car' ][0 ] == 9.5 , (
245+ f"car v_mean should be 9.5 m/s (PVS calibrated), got { MOTION_PARAMS ['car' ][0 ]} "
246+ )
247+
248+ def test_car_truck_vmean_overlap (self ):
249+ """car and truck v_mean must be within 5 m/s — speed distributions overlap in reality"""
250+ from sgi ._internal .generator import MOTION_PARAMS
251+ car_vm = MOTION_PARAMS ['car' ][0 ]
252+ truck_vm = MOTION_PARAMS ['truck' ][0 ]
253+ assert abs (car_vm - truck_vm ) < 5.0 , (
254+ f"car ({ car_vm } ) and truck ({ truck_vm } ) v_mean too far apart — "
255+ "classifier cannot separate them by speed alone"
256+ )
238257
239258 def test_truck_vib_amp_gt_car (self ):
240259 """truck a_vert std must exceed car (heavier vehicle, rougher vibration)"""
0 commit comments