Java 确定信号强度对wifi网络速度的影响

Java 确定信号强度对wifi网络速度的影响,java,android,networking,wifi,qos,Java,Android,Networking,Wifi,Qos,我正在开发一个网络支持框架(最初用于Android),它包括三个基本服务:主机发现、网络通信和QoS监视器 对于最后一个服务,我尝试实现一个方法,该方法返回单个主机可以定期向另一个主机发送的最大每秒消息数(MPS) 根据要发送的对象的大小和网络速度,我可以很容易地得到通过网络发送的理想MPS的粗略估计。当我试图将信号强度(SS)包含在等式中时,问题就出现了 protected int getMPS(NetworkApplicationData message, Context context)

我正在开发一个网络支持框架(最初用于Android),它包括三个基本服务:主机发现、网络通信和QoS监视器

对于最后一个服务,我尝试实现一个方法,该方法返回单个主机可以定期向另一个主机发送的最大每秒消息数(MPS)

根据要发送的对象的大小和网络速度,我可以很容易地得到通过网络发送的理想MPS的粗略估计。当我试图将信号强度(SS)包含在等式中时,问题就出现了

protected int getMPS(NetworkApplicationData message, Context context) {
    int messageSizeBits  = MemoryUtils.sizeOf(message) * 8;
    int networkSpeedMbps = getNetworkSpeed(context);
    float signalStrength = getNetworkSignalStrength(context);
    // FIXME: what about signalStrength?
    return networkSpeedMbps * 1024 * 1024 / messageSizeBits;
}
因此,这里的基本问题是:有没有关于无线网络中信号强度对速度影响的预先研究

在做一些测试时,我注意到,根据信号强度,已建立的网络速度会发生变化。例如,使用“标准化”的100%SS,Android API返回54Mbps的网络速度值;当SS为40%时,API返回7Mbps的网络速度值。我应该只依赖Android API返回的网络速度值吗?在这种情况下,我会得到一个被高估的议员


无论如何,我需要知道解决这个问题的正确方法,并将计算建立在正式研究的基础上。

这是EE和CS中研究得很好的主题。WiFi网络吞吐量主要取决于两个因素:信噪比(SNR)值和网络拥塞。前者是物理层(PHY)问题,而后者是MAC层问题。在这两层上测量的数据速率绝对不同

在PHY上,数据速率由SS(或者更准确地说,是信噪比)决定。根据Shannon的信息理论,SS越高意味着数据速率越高。PHY的数据速率假设单个WiFi设备连续传输而没有任何争用。但现实世界并非如此。54Mbps是具有高SS的典型PHY数据速率

在MAC上,数据速率由PHY数据速率乘以WiFi设备在CSMA协议下赢得竞争的时间百分比得到。即使只有一对WiFi设备,在MAC层测得的数据速率(与在应用层测得的数据速率几乎相同)大约是物理层数据速率的一半


回到你的问题,在一个清晰的WiFi网络中,将Android API返回的网络速度除以一半,粗略估计实际数据速率。在繁忙的网络中,您的实际数据速率只能通过在线测量得出,并且它会一直变化。

您应该指定您的目标通信技术。从你的价值观来看,它似乎是Wi-Fi?版本811a/g?@Luis它确实适用于当前移动设备(a/b/g/n)中使用的WiFi网络。感谢您的反馈。感谢您的详细解释!我将尝试应用您的方法并检查结果,以便将此答案设置为已接受。