Forum WiFi-ITA.com
http://www.wifi-ita.com/forum/

Gain Calculator. uno script per calcolare il gain
http://www.wifi-ita.com/forum/viewtopic.php?f=5&t=19475
Pagina 1 di 1

Autore:  Fabio82 [ gio 28 mag 2015, 0:34 ]
Oggetto del messaggio:  Gain Calculator. uno script per calcolare il gain

Oggi in un'oretta nella quale avrei potuto anche decidere di guardare il soffitto o girarmi i pollici ho deciso di fare un piccolo script che può aiutare a calcolare il gain di un'antenna.

lo script è scritto in bash... quindi dovrete usare linux per farlo girare.
tutto quello che dovete fare è copiarlo in un foglio di testo vuoto, dare i permessi di esecuzione e lanciarlo tramite riga di comando.
prima di lanciarlo è bene che leggiate giusto un paio di premesse per comprendere come ho deciso di realizzare questo programma e magari adattarlo meglio alle vostre esigenze.

per eseguire i test è NECESSARIO essere collegati ad una rete. i dati espressi saranno in funzione alla potenza del segnale ricevuti dalla rete a cui siete connessi.

il segnale wifi come noi tutti sappiamo è spesso incostante ed ha diverse fluttuazzioni. tali fluttuazioni possono rendere difficile il calcolo del guadagno in quanto non si sa mai quale valore prendere come riferimento.
Per mitigare questo problema ho pensato di creare un programma che potesse raccogliere un numero N di letture, mediarle ed esprimere questa media in maniera costante.

per calcolare il guadagno di un'antenna abbiamo bisogno però di un'antenna di riferimento a guadagno noto. per fare ciò potete usare un'antenna classica da router che ha come guadagno 2 dbi.

la prima cosa che dovete fare prima di avviare il programma è vedere qual'è il nome dell'interfaccia che usate e cambiare wlan0 in quello che utilizzate voi. per conoscere quale interfaccia userete fare semplicemente
Codice:
iwconfig


il programma una volta lanciato chiederà di collegare l'antenna di riferimento e successivamente di inserirne il guadagno che teoricamente dovremmo conoscere.
il programma comincierà ad acquisire dati (la quantità è variabile semplicemente impostando la variabile nello script) ed alla fine mostrerà il segnale medio in dB. durante questa fase evitate di muovere l'antenna o di interporre oggetti nel suo campo visivo.

fatto ciò disinserite l'antenna e collegate l'antenna della quale volete conoscere il gain.
a questo punto il programma comincierà una lettura in continuo senza fermarsi mai mediando sempre i dati in continuo ed esprimendo tale media.
maggior numero di campioni mediati vuol dire maggiore stabilità nel segnale ma anche maggior ritardo nell'espressione del risultato. se ad esempio volete effettuare un puntamente cercate di effettuare piccoli movimenti ed aspettate che il segnale si stabilizzi.
potete infine regolare il tempo che deve trascorrere tra un campionamento ed il successivo a vostro piacimento.
io lo setterò a 0.1 secondi perchè reputo che sia un buon compromesso. cmq potete fare voi le vostre prove e scegliere quello che più vi soddisfa.
quando avete finito premete "ctrl + c" per uscire dal programma

se avrò tempo, ho intenzione di scriverne uno anche per window solo che devo trovare un po di tempo libero in quanto devo programmare in c e utilizzare le API di windows il che richiede un impegno maggiore.

CONSIGLIO:
per rendere il segnale ancora più costante vi consiglio di aprire un'altra shell e lanciare un ping con un intervallo molto basso come per esempio:
Codice:
ping 192.168.1.1 -s 10000 -i 0.03

ovviamente sostituite a 192.168.1.1 un indirizzo che possa rispondere al ping. nella maggior parte dei casi 192.168.1.1 va bene.

ma adesso basta chiacchere ed ecco il programma:

Codice:
#!/bin/sh
clear
#========== VARIABLES ==========
wlan="wlan0"     # wireless interface (MAKE SURE BEFORE LAUNCHING THE SCRIPT THAT THE DEVICE EXISTS!!!)
TimeGap=0.1     # time gap between samples (the shorter is the gap the more resources will be needed)
N=40             # number of samples of unknown antenna
NStd=60         # number of samples for reference antenna
#================================

#=== DO NOT EDIT THE FOLLOWING TWO PARAMETERS ===
n=$[ $N + 1 ]
nstd=$[ $NStd + 1 ]
#================================================

echo "========================="
echo " interface = $wlan"
echo " Delay = $TimeGap"
echo " N samples = $n"
echo " Reference samples= $NStd"
echo "========================="
echo
echo " [+] Connect a reference antenna... press any button when done"
read return

read -p " [+] Insert the reference antenna's gain (dBi) : " StdGain
while true;do
   if [[ $StdGain =~ ^-?[0-9]+$ ]]; then
      break
   else
      echo " [!] Please insert an integer number..."
      sleep 1
      clear
      read -p " [+] Insert the reference antenna's gain (dBi): " StdGain
   fi
done

echo
echo " <==== COLLECTING DATA ... PLEASE WAIT ... ====>"

for i in $(seq 0 1 $NStd); do
   LIST+=("$(iwconfig $wlan | grep Quality | cut -d '=' -f 3 | cut -d ' ' -f 1)")
   sleep $TimeGap
   echo -en "       N= $i in $nstd  (strength = ${LIST[i]} dB)       "\\r
done

tot=$(awk 'BEGIN {t=0; for (i in ARGV) t+=ARGV[i]; print t}' "${LIST[@]}")
MediaStd=$(bc <<< "scale=1; $tot/$nstd")

echo
echo
echo  " [i] The average reference signal is $MediaStd dB"
sleep 1
echo
echo " [+] Connect the antenna you want to calculate the gain..."
echo "     ... the measurement will began in a few seconds ..."
sleep 2
unset LIST


for i in $(seq 0 1 $N); do
   LIST+=("$(iwconfig $wlan | grep Quality | cut -d '=' -f 3 | cut -d ' ' -f 1)")
   sleep $TimeGap
done

clear

while true; do
   for i in $(seq 0 1 $N); do
      LIST[$i]="$(iwconfig $wlan | grep Quality | cut -d '=' -f 3 | cut -d ' ' -f 1)"
      tot=$(awk 'BEGIN {t=0; for (i in ARGV) t+=ARGV[i]; print t}' "${LIST[@]}")
      media=$(bc -l <<< "scale=1;  - $MediaStd + $tot/$n + $StdGain")
      echo -en "  Gain = $media dBi   "\\r
      sleep $TimeGap
   done
done

Autore:  beva [ gio 28 mag 2015, 7:23 ]
Oggetto del messaggio:  Re: Gain Calculator. uno script per calcolare il gain

alla faccia del programmino, complimenti! : Thumbup :

Autore:  gcs [ gio 28 mag 2015, 8:07 ]
Oggetto del messaggio:  Re: Gain Calculator. uno script per calcolare il gain

: Thumbup : : Thumbup : : Thumbup :

Autore:  Fabio82 [ gio 28 mag 2015, 9:06 ]
Oggetto del messaggio:  Re: Gain Calculator. uno script per calcolare il gain

considerata che questa è una versione molto grezza senza quasi nessun controllo di errori. Era giusto per vedere se vi poteva interessare. In tal caso sorò lieto di apportare migliorie e quindi upgrade dello script.

Fatemi sapere cosa ne pensate e se avete idee. Ciao

Ovviamente provatelo e vedete come vi gira

Autore:  Imbesuito [ mar 2 giu 2015, 3:30 ]
Oggetto del messaggio:  Re: Gain Calculator. uno script per calcolare il gain

Provato molto velocemente con tre antenne diverse una panel, la mia vecchia airgrid e una biquad (una delle poche che in autocostruzione mi vengono bene).
Lo script funziona sia in live che con la distro che ho attualmente installata (Voyager) e non posso fare altro che i complimenti a Fabio per l'ottimo lavoro svolto.
Tra l'altro mi sembra uno script che con l'aggiunta di qualche altra variabile più "fighetta" possa trasformarsi in qualcosa di interessante anche a livello software.... non sarebbe male....
Intanto, grazie.... poi ti si fa sapere sull'uso continuativo.... : Chessygrin :

Autore:  Fabio82 [ mar 2 giu 2015, 9:02 ]
Oggetto del messaggio:  Re: Gain Calculator. uno script per calcolare il gain

mi fa piacere che t piaccia... ho apportato qualche miglioria nella selezione delle interfacce ... appena posso la uppo!
se cmq avete idee sugerite che se riesco le implemento!

Pagina 1 di 1 Tutti gli orari sono UTC + 1 ora [ ora legale ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/