@sh.add_function(dsp, outputs=['velocity_speed_ratios'], weight=49)
def identify_velocity_speed_ratios_v1(
n_gears, engine_speeds_out, velocities, idle_engine_speed,
stop_velocity):
"""
Identifies velocity speed ratios from gear box speed vector [km/(h*RPM)].
:param n_gears:
Number of gears [-].
:type n_gears: int
:param engine_speeds_out:
Engine speed [RPM].
:type engine_speeds_out: numpy.array
:param velocities:
Velocity vector [km/h].
:type velocities: numpy.array
:param idle_engine_speed:
Engine speed idle median and std [RPM].
:type idle_engine_speed: (float, float)
:param stop_velocity:
Maximum velocity to consider the vehicle stopped [km/h].
:type stop_velocity: float
:return:
Constant velocity speed ratios of the gear box [km/(h*RPM)].
:rtype: dict
"""
import sklearn.cluster as sk_clu
idle_speed = idle_engine_speed[0] + idle_engine_speed[1]
b = (engine_speeds_out > idle_speed) & (velocities > stop_velocity)
x = (velocities[b] / engine_speeds_out[b])[:, None]
ms = sk_clu.KMeans(n_clusters=int(n_gears), copy_x=False, random_state=0)
ms.fit(x)
vsr = {k + 1: v for k, v in enumerate(sorted(ms.cluster_centers_[:, 0]))}
vsr[0] = 0.0
return vsr