我正在使用python中的UDP广播将数据包从移动节点发送到固定节点。我想要的是在移动节点接近静态节点时提高数据速率,而在节点移开时降低数据速率,这样我就可以向接收节点传输更多的数据包。
实际上,我正在为我的论文做一个实验,我想测量信号强度以及相对于静态节点的距离。因此,基于接收信号强度的值,我想调整广播速率。
任何帮助和建议都会非常有帮助。
以下是代码
from socket import *
import os
import time
# A dummy string that I want to send
a = os.urandom(1400)
s = socket(AF_INET, SOCK_DGRAM)
s.bind(('', 0))
s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
# Send data along with the sequence number and current time
i=0
while 1:
if os.system("iwconfig wlan0 | awk '/Signal level/ {print $4}'|cut -c 7-9") >= -90: #-90 dbm is set as threshold
data = (str(i)+"###"+str(time.time())+"@@@"+ a.encode('hex'))[:1400] # only send 1400bytes of data
s.sendto(data, ('192.168.169.255', 5000))
i+=1
else sleep('<broadcast interval>') # sleep until the next broadcast interval 我非常不确定如何调整广播速率,所以我没有它的代码。
提前谢谢你
发布于 2012-12-06 02:57:21
如果你想以线性的方式完成它,你可以使用下面这样的方法
def calc_delay(signal):
rate = 11 * ( float(signal) + 90 ) / 20
return(rate)
rate_cmd = 'iwconfig wlan0 rate %sM" % calc_delay(signal)
os.system(rate_cmd)这是假设你得到的信号强度在-90和-70之间,并且你的无线网卡的最大速率是11M。所以在你的循环中,你可以等待这个函数的返回值。如果信号强度是不同的范围,90和20显然需要改变。
https://stackoverflow.com/questions/13702219
复制相似问题