Mesure du signal



 Il est possible de mesurer la 'force du signal' reçu par une carte 802.11b avec les  'wireless tools' de Jean Tourrilhe pour peu que le driver le permette.  Ces mesures ont été effectuées sur une  carte Buffalo/Melco (WLI-PCM-L11) avec le driver 'wvlan_cs' (rendu obsolète par orinoco_cs...) sur un PC de table équipé d'un adaptateur PCI/PCMCIA Buffalo .  La communication s'effectue avec un portable Toshiba (2550CDT) équipé dans un premier temps d'une carte D-Link (DWL-650) avec le driver prism2 (la version 2001-07-11) fonctionnant en Access Point et ensuite d'une carte Avaya avec le driver 'wvlan_cs' en mode Ad-Hoc.  Les deux PCs 'tournent' Linux-2.4.9.
 

D-Link signal strength
 

Que voit-on?

En vert, le 'niveau de bruit'.  Il est relativement constant (l'activité de mon four à micro-onde n'est pas décelable (ouf! :-) )). En rouge, le 'niveau du signal', est beaucoup moins stable.  Ces deux niveaux sont donnés par le driver en dBm (i.e. c'est logarithmique).  On voit deux types de variation : de gros nuages avec fortes pertes de signal et des 'marches'.  Les 'gros nuages' sont dûs à ma présence devant le portable...  Les 'marches' sont dûes à des changements de l'orientation du portable.  Et bien-sûr, tout ceci ne se passe pas dans une chambre anéchoique (sourde), mais dans mon appartement (et sans antenne).  Les deux PCs sont situés à quelques mètres de distance dans deux pièces différentes.  En refaisant plus ou moins le même test avec la carte Avaya, cela donne le résultat suivant.  Le niveau a l'air meilleur, mais les conditions du test ne permettent pas de tirer la moindre conclusion.  Les tests ont duré un peu moins d'une demi-heure chacun; il y a un échantillon toutes les deux secondes.
 

Avaya signal strength
 

Comment j'ai fait?

'iwconfig' ne donne pas la 'force du signal' en mode 'Ad-Hoc'; il faut, pour cela utiliser la commande 'iwspy'.  D'abord pour signaler la station que l'on veut monitorer, ensuite pour obtenir la force du signal.  Pour l'obtenir de manière répétitive, on insérera la commande dans une boucle du shell avec une temporisation.
Il ne faut pas oublier de générer du trafic entre les deux ordinateurs afin que la mesure du signal soit mise régulièrement à jour.  Sinon, le 'updated' n'apparait pas et les niveau restent constants.  J'utilise pour cela 'ping toshi' qui échange un paquet par seconde (aller/retour), ce qui m'assure bien un échantillon différent pour chaque mesure (toute les deux secondes).  Il faut noter que 'eth0' est bien mon interface sans fil (?wlan0).
 
# iwspy eth0 + 00:02:2D:22:2B:AE
#
# iwspy eth0
eth0      Statistics collected:
    00:02:2D:22:2B:AE : Quality:31/92  Signal level:-66 dBm  Noise level:-97 dBm (updated)
#
# cat iwspying.sh
while true
do
        iwspy eth0
        sleep 2
done |grep Signal
#
#
# sh iwspying.sh
    00:02:2D:22:2B:AE : Quality:28/92  Signal level:-67 dBm  Noise level:-95 dBm (updated)
    00:02:2D:22:2B:AE : Quality:29/92  Signal level:-66 dBm  Noise level:-95 dBm (updated)
    00:02:2D:22:2B:AE : Quality:30/92  Signal level:-67 dBm  Noise level:-97 dBm (updated)
    00:02:2D:22:2B:AE : Quality:27/92  Signal level:-67 dBm  Noise level:-94 dBm (updated)
    00:02:2D:22:2B:AE : Quality:30/92  Signal level:-66 dBm  Noise level:-96 dBm (updated)
    00:02:2D:22:2B:AE : Quality:24/92  Signal level:-70 dBm  Noise level:-94 dBm (updated)
    00:02:2D:22:2B:AE : Quality:29/92  Signal level:-68 dBm  Noise level:-97 dBm (updated)
    00:02:2D:22:2B:AE : Quality:27/92  Signal level:-67 dBm  Noise level:-94 dBm (updated)
Ensuite, j'extrais ce qui m'intéresse avec un petit script Perl :
#!/usr/bin/perl
#    00:05:5D:F2:D9:CA : Quality:23/92  Signal level:-74 dBm  Noise level:-97 dBm (updated)
while ($line = <STDIN>)
        {
        if ($line =~ /level:(-[0-9]+).*level:(-[0-9]+)/)
                {
                print "$1 $2\n";
                }
        }
Et enfin, je crée le graphe avec 'gnuplot' :
gnuplot <<END
set title "iwspy for DLink (00:05:5D:F2:D9:CA)"
set yrange [-120:-50]
set ylabel "dBm"
set xlabel "Sample"
set term png
#
set output 'dlink-strength.png'
plot 'dlink' using :1 title "DLink Signal", 'dlink' using :2 title "Noise"

set title "iwspy for Avaya (00:02:2D:22:2B:AE)"
set output 'avaya-strength.png'
plot 'avaya' using :1 title "Avaya Signal", 'avaya' using :2 title "Noise"
END
Bref, on est presque prêt pour tester/comparer de nouvelles antennes...  :-)

Quelque chose de plus réactif

Pour aider le pointage des antennes, il faut un outil graphique avec suffisamment de réactivité :
 
------------------ File vu.pl ---------------------------

#!/usr/bin/perl
$scale="0....+....10...+....20...+....30...+....40...+....50...+....60...+....70...+....";
while (1)
        {
        `ping -c1 $ARGV[0]`;
        open STATS, "</proc/net/wireless" or die "boum!";
        while ($line = <STATS>)
                { #     eth0: 0000   22.  191.  169.       0      0      0 
                if ($line =~ /  ([0-9]+)/)
                        {
                        printf("%s*\n", substr($scale, 0, $1));
                        }
                }
        close STATS;
        }
-------------------
Qui donne ceci :
 
# iwspy eth0 + 00:02:2D:22:2B:AE
# vu.pl 192.168.1.1
0....+....10...+....20...+.*
0....+....10...+....20...*
0....+....10...+....20...*
0....+....10...+....20...*
0....+....10...+....20...*
0....+....10...+....20..*
0....+....10...+....20..*
0....+....10...+....20...+*
0....+....10...+....20...+*
0....+....10...+....20...+.*
0....+....10...+....20...+.*
0....+....10...+....20..*
0....+....10...+....20*
0....+....10...+....*
0....+....10...+..*
0....+....10.*
0....+....10.*
0....+....*
0....+.*      <- je met ma main pour empêcher les ondes d'entrer/sortir   ;-)
0....+..*
0....+...*
0....+....*
0....+....10*
0....+....10..*
0....+....10...*
^C
#
-------------------
 

 
 
 
 
 
 
 

!!! je ne suis pas très sûr du 'zéro'...(+/-1)
!!! le "$line =~ /  ([0-9]+)/" est un peu 'ad-hoc' (Quick & Dirty)
                (i.e. "le premier nombre précédé de deux espaces")
!!! le 'boum!' et le manque total de tests aussi...
!!! lire 'dBm' me rassurait avec iwspy.  Est-ce psychologique? ;-)

Philippe Teuwen propose une version améliorée  dans un mail à [lln-wave]



Autres pointeurs:

Une remarque? ( Christophe Cattelain ) (08nov,24dec2001) (original:  http://users.skynet.be/chricat/signal/signal-strength.html )( main )