1

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  

ブロードキャストレートを調整する方法がよくわからないので、コードがありません。

前もって感謝します

4

1 に答える 1

0

直線的に実行したい場合は、次のようなものを使用できます

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 は明らかに変更する必要があります。

于 2012-12-05T18:57:20.743 に答える