In WiFi network design, signal strength is measured in dBm (decibel-milliwatts), with values ranging from 0 (strongest) to -100 (weakest). The industry has established practical thresholds for reliable connectivity:
- -30 dBm to -50 dBm: Excellent signal (near perfect connectivity)
- -50 dBm to -65 dBm: Good signal (reliable for most applications)
- -65 dBm to -75 dBm: Fair signal (basic connectivity, may experience slowdowns)
- -75 dBm to -85 dBm: Poor signal (unstable connections, frequent drops)
- Below -85 dBm: Unusable connection
Modern 802.11 standards have different sensitivity requirements:
# Python example: Checking signal quality thresholds
def check_signal_quality(rssi, protocol):
thresholds = {
'802.11ax': -70, # WiFi 6
'802.11ac': -72, # WiFi 5
'802.11n': -75, # WiFi 4
'802.11g': -80
}
if rssi >= thresholds.get(protocol, -75):
return "Reliable connection"
else:
return "Marginal connection"
For office network design, we recommend:
- Design for -65 dBm minimum coverage in primary work areas
- Maintain -70 dBm or better for high-density zones
- Use -67 dBm as handoff threshold between access points
Here's how to programmatically analyze WiFi coverage using Python:
import numpy as np
def analyze_coverage(signal_map):
"""Analyze WiFi signal strength heatmap"""
signal_array = np.array(signal_map)
# Calculate coverage metrics
excellent_coverage = np.sum(signal_array >= -55) / signal_array.size
good_coverage = np.sum(signal_array >= -65) / signal_array.size
poor_areas = np.sum(signal_array < -75) / signal_array.size
return {
'excellent_coverage': excellent_coverage,
'good_coverage': good_coverage,
'poor_areas': poor_areas
}
2.4GHz vs 5GHz signal propagation varies significantly:
Frequency | Penetration | Range | Ideal RSSI |
---|---|---|---|
2.4GHz | Better | Longer | -70dBm |
5GHz | Worse | Shorter | -65dBm |
When designing enterprise WiFi networks, the most critical metric is Received Signal Strength Indicator (RSSI) measured in dBm. The industry generally considers these thresholds for different use cases:
- -50 dBm to -60 dBm: Excellent signal (4-5 bars)
- -60 dBm to -70 dBm: Good signal (3-4 bars)
- -70 dBm to -80 dBm: Minimum for reliable connectivity (2-3 bars)
- -80 dBm to -90 dBm: Unstable connection (may work for basic IoT)
- Below -90 dBm: Connection drops likely
Modern protocols have different sensitivity requirements:
# Python example for protocol thresholds
protocol_requirements = {
'802.11b': -80, # Minimum for 1Mbps
'802.11g': -76,
'802.11n': -70, # HT40 requires stronger signal
'802.11ac': -65, # For VHT80 operation
'802.11ax': -62 # For OFDMA efficiency
}
For office network design, we recommend:
- Aim for -67 dBm minimum at all work areas
- Maintain -55 dBm in high-density zones
- Use this JavaScript snippet for signal validation:
function validateCoverage(rssiMap) {
const MIN_STRENGTH = -70;
const CRITICAL_AREAS = ['conference', 'workstation'];
return Object.entries(rssiMap).map(([area, strength]) => ({
area,
strength,
status: strength >= MIN_STRENGTH ||
(CRITICAL_AREAS.includes(area) && strength >= -65)
}));
}
Professional WiFi planning tools typically use these algorithms:
// Sample path loss calculation (simplified)
function calculatePathLoss(frequencyMHz, distanceMeters) {
const freeSpaceLoss = 20 * Math.log10(distanceMeters) +
20 * Math.log10(frequencyMHz) - 27.55;
return freeSpaceLoss;
}
Remember that 5GHz signals attenuate faster than 2.4GHz due to higher frequency, requiring more APs for equivalent coverage.
For a 5,000 sqft office with 50 users:
# Bash script for AP placement validation
#!/bin/bash
MIN_COVERAGE=-70
AP_LOCATIONS=("north" "south" "east" "west" "center")
for ap in "${AP_LOCATIONS[@]}"; do
signal_strength=$(iwconfig wlan0 | grep -i signal | awk '{print $4}')
if [[ ${signal_strength//[^0-9]/} -lt ${MIN_COVERAGE//-/} ]]; then
echo "Warning: $ap AP needs adjustment (Current: $signal_strength)"
fi
done