59 lines
1.4 KiB
Python
59 lines
1.4 KiB
Python
"""
|
|
Channel Analysis Tools.
|
|
|
|
Functions for analyzing channel utilization and collisions.
|
|
"""
|
|
|
|
from typing import Dict, Any
|
|
|
|
|
|
def analyze_channel_utilization(collisions: int, busy_time: float, total_time: float) -> Dict[str, Any]:
|
|
"""
|
|
Analyze channel utilization.
|
|
|
|
Args:
|
|
collisions: Number of collisions
|
|
busy_time: Total channel busy time
|
|
total_time: Total simulation time
|
|
|
|
Returns:
|
|
Dictionary with channel analysis
|
|
"""
|
|
utilization = busy_time / total_time if total_time > 0 else 0
|
|
|
|
# Determine network state
|
|
if utilization < 0.3:
|
|
network_state = "LIGHT_LOAD"
|
|
elif utilization < 0.7:
|
|
network_state = "MODERATE"
|
|
else:
|
|
network_state = "SATURATED"
|
|
|
|
return {
|
|
'busy_time': busy_time,
|
|
'total_time': total_time,
|
|
'utilization': utilization,
|
|
'utilization_percent': round(utilization * 100, 2),
|
|
'collisions': collisions,
|
|
'collision_rate': collisions / total_time if total_time > 0 else 0,
|
|
'network_state': network_state,
|
|
}
|
|
|
|
|
|
def get_network_state(utilization: float) -> str:
|
|
"""
|
|
Get network state based on utilization.
|
|
|
|
Args:
|
|
utilization: Channel utilization ratio (0-1)
|
|
Network state string
|
|
"""
|
|
|
|
Returns:
|
|
if utilization < 0.3:
|
|
return "LIGHT_LOAD"
|
|
elif utilization < 0.7:
|
|
return "MODERATE"
|
|
else:
|
|
return "SATURATED"
|