From 4db673f695b83fcf69011cdea52cb6d3d7c78892 Mon Sep 17 00:00:00 2001 From: ali Date: Sun, 1 Mar 2015 00:50:08 +0100 Subject: [PATCH 1/1] Update by Ali --- CHAPITRE_01.tex | 0 CHAPITRE_02.tex | 0 CHAPITRE_03.tex | 2 +- CHAPITRE_04.tex | 0 CHAPITRE_05.tex | 0 CHAPITRE_06.tex | 568 +++++++++ Figures/CHAPITRE_01.tex~ | 0 Figures/CHAPITRE_02.tex~ | 0 Figures/Introduction.tex~ | 0 Figures/bib.tex~ | 0 Figures/ch1/RDM-eps-converted-to.pdf | Bin Figures/ch1/RDM.eps | 0 Figures/ch1/RDM.pdf | Bin Figures/ch1/WNT-eps-converted-to.pdf | Bin Figures/ch1/WNT.eps | 0 Figures/ch1/WNT.pdf | Bin Figures/ch1/WSN-M.eps | 0 Figures/ch1/WSN-M.pdf | Bin Figures/ch1/WSN-S.pdf | Bin Figures/ch1/WSNAP-eps-converted-to.pdf | Bin Figures/ch1/WSNAP.eps | 0 Figures/ch1/WSNAP.pdf | Bin Figures/ch1/WSNT.jpg | Bin Figures/ch1/twsn2.pdf | Bin Figures/ch1/typesWSN.pdf | Bin Figures/ch1/wsn-t-eps-converted-to.pdf | Bin Figures/ch1/wsn-t.eps | 0 Figures/ch1/wsn.jpg | Bin Figures/ch2/DESK.jpeg | Bin Figures/ch2/GAF1.jpeg | Bin Figures/ch2/GAF2.jpeg | Bin Figures/ch4/FirstModel.pdf | Bin 0 -> 70337 bytes Figures/ch4/R1/ASR.pdf | Bin Figures/ch4/R1/CR.pdf | Bin Figures/ch4/R1/EC50.pdf | Bin Figures/ch4/R1/EC95.pdf | Bin Figures/ch4/R1/LT50.pdf | Bin Figures/ch4/R1/LT95.pdf | Bin Figures/ch4/R1/SR.pdf | Bin Figures/ch4/R1/T.eps | 913 ++++++++++++++ Figures/ch4/R1/T.pdf | Bin Figures/ch4/R1/T.ps | 899 ++++++++++++++ Figures/ch4/R2/ASR.pdf | Bin 0 -> 12086 bytes Figures/ch4/R2/CR.pdf | Bin 0 -> 12028 bytes Figures/ch4/R2/EC50.pdf | Bin 0 -> 7963 bytes Figures/ch4/R2/EC95.pdf | Bin 0 -> 7991 bytes Figures/ch4/R2/LT50.pdf | Bin 0 -> 7976 bytes Figures/ch4/R2/LT95.pdf | Bin 0 -> 7918 bytes Figures/ch4/R2/SR.pdf | Bin 0 -> 8612 bytes Figures/ch4/R2/T.eps | 945 +++++++++++++++ Figures/ch4/R2/T.pdf | Bin 0 -> 7948 bytes Figures/ch4/R2/T.ps | 931 ++++++++++++++ Figures/ch4/R3/ASR.pdf | Bin 0 -> 11798 bytes Figures/ch4/R3/CR.pdf | Bin 0 -> 11999 bytes Figures/ch4/R3/EC50.pdf | Bin 0 -> 8246 bytes Figures/ch4/R3/EC95.pdf | Bin 0 -> 8255 bytes Figures/ch4/R3/LT50.pdf | Bin 0 -> 8324 bytes Figures/ch4/R3/LT95.pdf | Bin 0 -> 8324 bytes Figures/ch4/R3/SR.pdf | Bin 0 -> 9148 bytes Figures/ch4/fig21.pdf | Bin 0 -> 50967 bytes Figures/ch4/fig22.pdf | Bin 0 -> 52655 bytes Figures/ch4/fig23.pdf | Bin 0 -> 54891 bytes Figures/ch4/fig24.pdf | Bin 0 -> 59081 bytes Figures/ch4/fig25.pdf | Bin 0 -> 60619 bytes Figures/ch4/fig26.pdf | Bin 0 -> 62812 bytes Figures/ch4/fig27.pdf | Bin 0 -> 62906 bytes Figures/ch4/principles13.pdf | Bin 0 -> 57812 bytes Figures/ch5/GeneralModel.jpg | Bin 0 -> 93904 bytes Figures/ch5/Modelgeneral.pdf | Bin 0 -> 93022 bytes Figures/ch5/R1/ASR.pdf | Bin 0 -> 13766 bytes Figures/ch5/R1/CR.pdf | Bin 0 -> 13978 bytes Figures/ch5/R1/EC50.pdf | Bin 0 -> 8677 bytes Figures/ch5/R1/EC95.pdf | Bin 0 -> 8742 bytes Figures/ch5/R1/LT50.pdf | Bin 0 -> 8807 bytes Figures/ch5/R1/LT95.pdf | Bin 0 -> 8613 bytes Figures/ch5/R1/SR.pdf | Bin 0 -> 10792 bytes Figures/ch5/R1/T.pdf | Bin 0 -> 7931 bytes Figures/ch6/Model.pdf | Bin 0 -> 95995 bytes Figures/ch6/R/ASR-eps-converted-to.pdf | Bin 0 -> 12695 bytes Figures/ch6/R/ASR.eps | 1472 +++++++++++++++++++++++ Figures/ch6/R/ASR.pdf | Bin 0 -> 12695 bytes Figures/ch6/R/CR-eps-converted-to.pdf | Bin 0 -> 12638 bytes Figures/ch6/R/CR.eps | 1472 +++++++++++++++++++++++ Figures/ch6/R/CR.pdf | Bin 0 -> 12638 bytes Figures/ch6/R/EC50-eps-converted-to.pdf | Bin 0 -> 8180 bytes Figures/ch6/R/EC50.eps | 882 ++++++++++++++ Figures/ch6/R/EC50.pdf | Bin 0 -> 8180 bytes Figures/ch6/R/EC95-eps-converted-to.pdf | Bin 0 -> 8179 bytes Figures/ch6/R/EC95.eps | 882 ++++++++++++++ Figures/ch6/R/EC95.pdf | Bin 0 -> 8179 bytes Figures/ch6/R/LT50-eps-converted-to.pdf | Bin 0 -> 8466 bytes Figures/ch6/R/LT50.eps | 942 +++++++++++++++ Figures/ch6/R/LT50.pdf | Bin 0 -> 8466 bytes Figures/ch6/R/LT95-eps-converted-to.pdf | Bin 0 -> 8351 bytes Figures/ch6/R/LT95.eps | 882 ++++++++++++++ Figures/ch6/R/LT95.pdf | Bin 0 -> 8351 bytes Figures/ch6/R/LTa-eps-converted-to.pdf | Bin 0 -> 7927 bytes Figures/ch6/R/LTa.eps | 1000 +++++++++++++++ Figures/ch6/R/LTa.pdf | Bin 0 -> 7927 bytes Figures/ch6/ex4pcm.jpg | Bin 0 -> 40413 bytes Figures/ch6/ex5pcm.jpg | Bin 0 -> 110151 bytes Figures/ch6/expcm.pdf | Bin 0 -> 166541 bytes Figures/ch6/expcm2.jpg | Bin 0 -> 120585 bytes Figures/ch6/pcm.jpg | Bin 0 -> 66915 bytes Figures/ch6/twosensors.jpg | Bin 0 -> 50265 bytes Figures/citation.tex~ | 0 Figures/entete.tex~ | 0 Figures/these.tex~ | 0 INTRODUCTION.tex | 0 Thesis.tex | 6 +- Thesis.toc | 0 algorithme.sty | 0 bib.bib | 0 changemargin.sty | 0 drop.sty | 0 dropping.sty | 0 entete.tex | 0 missfont.log | 0 upmethodology-document.sty | 0 upmethodology-fmt.sty | 0 upmext-spimufcphdthesis.cfg | 0 yfonts.sty | 0 122 files changed, 11792 insertions(+), 4 deletions(-) mode change 100644 => 100755 CHAPITRE_01.tex mode change 100644 => 100755 CHAPITRE_02.tex mode change 100644 => 100755 CHAPITRE_03.tex mode change 100644 => 100755 CHAPITRE_04.tex mode change 100644 => 100755 CHAPITRE_05.tex create mode 100755 CHAPITRE_06.tex mode change 100644 => 100755 Figures/CHAPITRE_01.tex~ mode change 100644 => 100755 Figures/CHAPITRE_02.tex~ mode change 100644 => 100755 Figures/Introduction.tex~ mode change 100644 => 100755 Figures/bib.tex~ mode change 100644 => 100755 Figures/ch1/RDM-eps-converted-to.pdf mode change 100644 => 100755 Figures/ch1/RDM.eps mode change 100644 => 100755 Figures/ch1/RDM.pdf mode change 100644 => 100755 Figures/ch1/WNT-eps-converted-to.pdf mode change 100644 => 100755 Figures/ch1/WNT.eps mode change 100644 => 100755 Figures/ch1/WNT.pdf mode change 100644 => 100755 Figures/ch1/WSN-M.eps mode change 100644 => 100755 Figures/ch1/WSN-M.pdf mode change 100644 => 100755 Figures/ch1/WSN-S.pdf mode change 100644 => 100755 Figures/ch1/WSNAP-eps-converted-to.pdf mode change 100644 => 100755 Figures/ch1/WSNAP.eps mode change 100644 => 100755 Figures/ch1/WSNAP.pdf mode change 100644 => 100755 Figures/ch1/WSNT.jpg mode change 100644 => 100755 Figures/ch1/twsn2.pdf mode change 100644 => 100755 Figures/ch1/typesWSN.pdf mode change 100644 => 100755 Figures/ch1/wsn-t-eps-converted-to.pdf mode change 100644 => 100755 Figures/ch1/wsn-t.eps mode change 100644 => 100755 Figures/ch1/wsn.jpg mode change 100644 => 100755 Figures/ch2/DESK.jpeg mode change 100644 => 100755 Figures/ch2/GAF1.jpeg mode change 100644 => 100755 Figures/ch2/GAF2.jpeg create mode 100755 Figures/ch4/FirstModel.pdf mode change 100644 => 100755 Figures/ch4/R1/ASR.pdf mode change 100644 => 100755 Figures/ch4/R1/CR.pdf mode change 100644 => 100755 Figures/ch4/R1/EC50.pdf mode change 100644 => 100755 Figures/ch4/R1/EC95.pdf mode change 100644 => 100755 Figures/ch4/R1/LT50.pdf mode change 100644 => 100755 Figures/ch4/R1/LT95.pdf mode change 100644 => 100755 Figures/ch4/R1/SR.pdf create mode 100755 Figures/ch4/R1/T.eps mode change 100644 => 100755 Figures/ch4/R1/T.pdf create mode 100755 Figures/ch4/R1/T.ps create mode 100755 Figures/ch4/R2/ASR.pdf create mode 100755 Figures/ch4/R2/CR.pdf create mode 100755 Figures/ch4/R2/EC50.pdf create mode 100755 Figures/ch4/R2/EC95.pdf create mode 100755 Figures/ch4/R2/LT50.pdf create mode 100755 Figures/ch4/R2/LT95.pdf create mode 100755 Figures/ch4/R2/SR.pdf create mode 100755 Figures/ch4/R2/T.eps create mode 100755 Figures/ch4/R2/T.pdf create mode 100755 Figures/ch4/R2/T.ps create mode 100755 Figures/ch4/R3/ASR.pdf create mode 100755 Figures/ch4/R3/CR.pdf create mode 100755 Figures/ch4/R3/EC50.pdf create mode 100755 Figures/ch4/R3/EC95.pdf create mode 100755 Figures/ch4/R3/LT50.pdf create mode 100755 Figures/ch4/R3/LT95.pdf create mode 100755 Figures/ch4/R3/SR.pdf create mode 100755 Figures/ch4/fig21.pdf create mode 100755 Figures/ch4/fig22.pdf create mode 100755 Figures/ch4/fig23.pdf create mode 100755 Figures/ch4/fig24.pdf create mode 100755 Figures/ch4/fig25.pdf create mode 100755 Figures/ch4/fig26.pdf create mode 100755 Figures/ch4/fig27.pdf create mode 100755 Figures/ch4/principles13.pdf create mode 100755 Figures/ch5/GeneralModel.jpg create mode 100755 Figures/ch5/Modelgeneral.pdf create mode 100755 Figures/ch5/R1/ASR.pdf create mode 100755 Figures/ch5/R1/CR.pdf create mode 100755 Figures/ch5/R1/EC50.pdf create mode 100755 Figures/ch5/R1/EC95.pdf create mode 100755 Figures/ch5/R1/LT50.pdf create mode 100755 Figures/ch5/R1/LT95.pdf create mode 100755 Figures/ch5/R1/SR.pdf create mode 100755 Figures/ch5/R1/T.pdf create mode 100755 Figures/ch6/Model.pdf create mode 100755 Figures/ch6/R/ASR-eps-converted-to.pdf create mode 100755 Figures/ch6/R/ASR.eps create mode 100755 Figures/ch6/R/ASR.pdf create mode 100755 Figures/ch6/R/CR-eps-converted-to.pdf create mode 100755 Figures/ch6/R/CR.eps create mode 100755 Figures/ch6/R/CR.pdf create mode 100755 Figures/ch6/R/EC50-eps-converted-to.pdf create mode 100755 Figures/ch6/R/EC50.eps create mode 100755 Figures/ch6/R/EC50.pdf create mode 100755 Figures/ch6/R/EC95-eps-converted-to.pdf create mode 100755 Figures/ch6/R/EC95.eps create mode 100755 Figures/ch6/R/EC95.pdf create mode 100755 Figures/ch6/R/LT50-eps-converted-to.pdf create mode 100755 Figures/ch6/R/LT50.eps create mode 100755 Figures/ch6/R/LT50.pdf create mode 100755 Figures/ch6/R/LT95-eps-converted-to.pdf create mode 100755 Figures/ch6/R/LT95.eps create mode 100755 Figures/ch6/R/LT95.pdf create mode 100755 Figures/ch6/R/LTa-eps-converted-to.pdf create mode 100755 Figures/ch6/R/LTa.eps create mode 100755 Figures/ch6/R/LTa.pdf create mode 100755 Figures/ch6/ex4pcm.jpg create mode 100755 Figures/ch6/ex5pcm.jpg create mode 100755 Figures/ch6/expcm.pdf create mode 100755 Figures/ch6/expcm2.jpg create mode 100755 Figures/ch6/pcm.jpg create mode 100755 Figures/ch6/twosensors.jpg mode change 100644 => 100755 Figures/citation.tex~ mode change 100644 => 100755 Figures/entete.tex~ mode change 100644 => 100755 Figures/these.tex~ mode change 100644 => 100755 INTRODUCTION.tex mode change 100644 => 100755 Thesis.tex mode change 100644 => 100755 Thesis.toc mode change 100644 => 100755 algorithme.sty mode change 100644 => 100755 bib.bib mode change 100644 => 100755 changemargin.sty mode change 100644 => 100755 drop.sty mode change 100644 => 100755 dropping.sty mode change 100644 => 100755 entete.tex mode change 100644 => 100755 missfont.log mode change 100644 => 100755 upmethodology-document.sty mode change 100644 => 100755 upmethodology-fmt.sty mode change 100644 => 100755 upmext-spimufcphdthesis.cfg mode change 100644 => 100755 yfonts.sty diff --git a/CHAPITRE_01.tex b/CHAPITRE_01.tex old mode 100644 new mode 100755 diff --git a/CHAPITRE_02.tex b/CHAPITRE_02.tex old mode 100644 new mode 100755 diff --git a/CHAPITRE_03.tex b/CHAPITRE_03.tex old mode 100644 new mode 100755 index 9c63893..8194f52 --- a/CHAPITRE_03.tex +++ b/CHAPITRE_03.tex @@ -2,7 +2,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% -%% CHAPTER 04 %% +%% CHAPTER 03 %% %% %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/CHAPITRE_04.tex b/CHAPITRE_04.tex old mode 100644 new mode 100755 diff --git a/CHAPITRE_05.tex b/CHAPITRE_05.tex old mode 100644 new mode 100755 diff --git a/CHAPITRE_06.tex b/CHAPITRE_06.tex new file mode 100755 index 0000000..6ac91bf --- /dev/null +++ b/CHAPITRE_06.tex @@ -0,0 +1,568 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% %% +%% CHAPTER 06 %% +%% %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\chapter{Perimeter-based Coverage Optimization to Improve Lifetime in Wireless Sensor Networks} +\label{ch6} + + +\section{summary} +\label{ch6:sec:01} + +The most important problem in a Wireless Sensor Network (WSN) is to optimize the +use of its limited energy provision, so that it can fulfill its monitoring task +as long as possible. Among known available approaches that can be used to +improve power management, lifetime coverage optimization provides activity +scheduling which ensures sensing coverage while minimizing the energy cost. In +this paper, we propose such an approach called Perimeter-based Coverage Optimization +protocol (PeCO). It is a hybrid of centralized and distributed methods: the +region of interest is first subdivided into subregions and our protocol is then +distributed among sensor nodes in each subregion. +The novelty of our approach lies essentially in the formulation of a new +mathematical optimization model based on the perimeter coverage level to schedule +sensors' activities. Extensive simulation experiments have been performed using +OMNeT++, the discrete event simulator, to demonstrate that PeCO can +offer longer lifetime coverage for WSNs in comparison with some other protocols. + +\section{THE PeCO PROTOCOL DESCRIPTION} +\label{ch6:sec:02} + +\noindent In this section, we describe in details our Lifetime Coverage +Optimization protocol. First we present the assumptions we made and the models +we considered (in particular the perimeter coverage one), second we describe the +background idea of our protocol, and third we give the outline of the algorithm +executed by each node. + + + +\subsection{Assumptions and Models} +\label{ch6:sec:02:01} +PeCO protocol uses the same assumptions and network model that presented in chapter 4, section \ref{ch4:sec:02:01}. + +The PeCO protocol uses the same perimeter-coverage model as Huang and +Tseng in~\cite{ref133}. It can be expressed as follows: a sensor is +said to be perimeter covered if all the points on its perimeter are covered by +at least one sensor other than itself. They proved that a network area is +$k$-covered if and only if each sensor in the network is $k$-perimeter-covered (perimeter covered by at least $k$ sensors). + +Figure~\ref{pcm2sensors}(a) shows the coverage of sensor node~$0$. On this +figure, we can see that sensor~$0$ has nine neighbors and we have reported on +its perimeter (the perimeter of the disk covered by the sensor) for each +neighbor the two points resulting from intersection of the two sensing +areas. These points are denoted for neighbor~$i$ by $iL$ and $iR$, respectively +for left and right from neighbor point of view. The resulting couples of +intersection points subdivide the perimeter of sensor~$0$ into portions called +arcs. + +\begin{figure}[ht!] + \centering + \begin{tabular}{@{}cr@{}} + \includegraphics[width=95mm]{Figures/ch6/pcm.jpg} & \raisebox{3.25cm}{(a)} \\ + \includegraphics[width=95mm]{Figures/ch6/twosensors.jpg} & \raisebox{2.75cm}{(b)} + \end{tabular} + \caption{(a) Perimeter coverage of sensor node 0 and (b) finding the arc of + $u$'s perimeter covered by $v$.} + \label{pcm2sensors} +\end{figure} + +Figure~\ref{pcm2sensors}(b) describes the geometric information used to find the +locations of the left and right points of an arc on the perimeter of a sensor +node~$u$ covered by a sensor node~$v$. Node~$v$ is supposed to be located on the +west side of sensor~$u$, with the following respective coordinates in the +sensing area~: $(v_x,v_y)$ and $(u_x,u_y)$. From the previous coordinates we can +compute the euclidean distance between nodes~$u$ and $v$: $Dist(u,v)=\sqrt{\vert + u_x - v_x \vert^2 + \vert u_y-v_y \vert^2}$, while the angle~$\alpha$ is +obtained through the formula: $$\alpha = \arccos \left(\dfrac{Dist(u,v)}{2R_s} +\right).$$ The arc on the perimeter of~$u$ defined by the angular interval $[\pi + - \alpha,\pi + \alpha]$ is said to be perimeter-covered by sensor~$v$. + +Every couple of intersection points is placed on the angular interval $[0,2\pi]$ +in a counterclockwise manner, leading to a partitioning of the interval. +Figure~\ref{pcm2sensors}(a) illustrates the arcs for the nine neighbors of +sensor $0$ and Figure~\ref{expcm} gives the position of the corresponding arcs +in the interval $[0,2\pi]$. More precisely, we can see that the points are +ordered according to the measures of the angles defined by their respective +positions. The intersection points are then visited one after another, starting +from the first intersection point after point~zero, and the maximum level of +coverage is determined for each interval defined by two successive points. The +maximum level of coverage is equal to the number of overlapping arcs. For +example, +between~$5L$ and~$6L$ the maximum level of coverage is equal to $3$ +(the value is highlighted in yellow at the bottom of Figure~\ref{expcm}), which +means that at most 2~neighbors can cover the perimeter in addition to node $0$. +Table~\ref{my-label} summarizes for each coverage interval the maximum level of +coverage and the sensor nodes covering the perimeter. The example discussed +above is thus given by the sixth line of the table. + + +\begin{figure*}[t!] +\centering +\includegraphics[width=150.5mm]{Figures/ch6/expcm2.jpg} +\caption{Maximum coverage levels for perimeter of sensor node $0$.} +\label{expcm} +\end{figure*} + + + \begin{table}[h!] + \caption{Coverage intervals and contributing sensors for sensor node 0.} + \centering +\begin{tabular}{|c|c|c|c|c|c|c|c|c|} +\hline +\begin{tabular}[c]{@{}c@{}}Left \\ point \\ angle~$\alpha$ \end{tabular} & \begin{tabular}[c]{@{}c@{}}Interval \\ left \\ point\end{tabular} & \begin{tabular}[c]{@{}c@{}}Interval \\ right \\ point\end{tabular} & \begin{tabular}[c]{@{}c@{}}Maximum \\ coverage\\ level\end{tabular} & \multicolumn{5}{c|}{\begin{tabular}[c]{@{}c@{}}Set of sensors\\ involved \\ in coverage interval\end{tabular}} \\ \hline +0.0291 & 1L & 2L & 4 & 0 & 1 & 3 & 4 & \\ \hline +0.104 & 2L & 3R & 5 & 0 & 1 & 3 & 4 & 2 \\ \hline +0.3168 & 3R & 4R & 4 & 0 & 1 & 4 & 2 & \\ \hline +0.6752 & 4R & 1R & 3 & 0 & 1 & 2 & & \\ \hline +1.8127 & 1R & 5L & 2 & 0 & 2 & & & \\ \hline +1.9228 & 5L & 6L & 3 & 0 & 2 & 5 & & \\ \hline +2.3959 & 6L & 2R & 4 & 0 & 2 & 5 & 6 & \\ \hline +2.4258 & 2R & 7L & 3 & 0 & 5 & 6 & & \\ \hline +2.7868 & 7L & 8L & 4 & 0 & 5 & 6 & 7 & \\ \hline +2.8358 & 8L & 5R & 5 & 0 & 5 & 6 & 7 & 8 \\ \hline +2.9184 & 5R & 7R & 4 & 0 & 6 & 7 & 8 & \\ \hline +3.3301 & 7R & 9R & 3 & 0 & 6 & 8 & & \\ \hline +3.9464 & 9R & 6R & 4 & 0 & 6 & 8 & 9 & \\ \hline +4.767 & 6R & 3L & 3 & 0 & 8 & 9 & & \\ \hline +4.8425 & 3L & 8R & 4 & 0 & 3 & 8 & 9 & \\ \hline +4.9072 & 8R & 4L & 3 & 0 & 3 & 9 & & \\ \hline +5.3804 & 4L & 9R & 4 & 0 & 3 & 4 & 9 & \\ \hline +5.9157 & 9R & 1L & 3 & 0 & 3 & 4 & & \\ \hline +\end{tabular} + +\label{my-label} +\end{table} + + +In the PeCO protocol, the scheduling of the sensor nodes' activities is formulated with an +integer program based on coverage intervals. The formulation of the coverage +optimization problem is detailed in~section~\ref{ch6:sec:03}. Note that when a sensor +node has a part of its sensing range outside the WSN sensing field, as in +Figure~\ref{ex4pcm}, the maximum coverage level for this arc is set to $\infty$ +and the corresponding interval will not be taken into account by the +optimization algorithm. + + +\begin{figure}[h!] +\centering +\includegraphics[width=95.5mm]{Figures/ch6/ex4pcm.jpg} +\caption{Sensing range outside the WSN's area of interest.} +\label{ex4pcm} +\end{figure} + + + + + +\subsection{The Main Idea} +\label{ch6:sec:02:02} + +\noindent The WSN area of interest is, in a first step, divided into regular +homogeneous subregions using a divide-and-conquer algorithm. In a second step +our protocol will be executed in a distributed way in each subregion +simultaneously to schedule nodes' activities for one sensing period. + +As shown in Figure~\ref{fig2}, node activity scheduling is produced by our +protocol in a periodic manner. Each period is divided into 4 stages: Information +(INFO) Exchange, Leader Election, Decision (the result of an optimization +problem), and Sensing. For each period there is exactly one set cover +responsible for the sensing task. Protocols based on a periodic scheme, like +PeCO, are more robust against an unexpected node failure. On the one hand, if +a node failure is discovered before taking the decision, the corresponding sensor +node will not be considered by the optimization algorithm. On the other +hand, if the sensor failure happens after the decision, the sensing task of the +network will be temporarily affected: only during the period of sensing until a +new period starts, since a new set cover will take charge of the sensing task in +the next period. The energy consumption and some other constraints can easily be +taken into account since the sensors can update and then exchange their +information (including their residual energy) at the beginning of each period. +However, the pre-sensing phases (INFO Exchange, Leader Election, and Decision) +are energy consuming, even for nodes that will not join the set cover to monitor +the area. + +\begin{figure}[t!] +\centering +\includegraphics[width=95.5mm]{Figures/ch6/Model.pdf} +\caption{PeCO protocol.} +\label{fig2} +\end{figure} + + + + +\subsection{PeCO Protocol Algorithm} +\label{ch6:sec:02:03} + + +\noindent The pseudocode implementing the protocol on a node is given below. +More precisely, Algorithm~\ref{alg:PeCO} gives a brief description of the +protocol applied by a sensor node $s_k$ where $k$ is the node index in the WSN. + +\begin{algorithm}[h!] + % \KwIn{all the parameters related to information exchange} +% \KwOut{$winer-node$ (: the id of the winner sensor node, which is the leader of current round)} + \BlankLine + %\emph{Initialize the sensor node and determine it's position and subregion} \; + + \If{ $RE_k \geq E_{th}$ }{ + \emph{$s_k.status$ = COMMUNICATION}\; + \emph{Send $INFO()$ packet to other nodes in subregion}\; + \emph{Wait $INFO()$ packet from other nodes in subregion}\; + \emph{Update K.CurrentSize}\; + \emph{LeaderID = Leader election}\; + \If{$ s_k.ID = LeaderID $}{ + \emph{$s_k.status$ = COMPUTATION}\; + + \If{$ s_k.ID $ is Not previously selected as a Leader }{ + \emph{ Execute the perimeter coverage model}\; + % \emph{ Determine the segment points using perimeter coverage model}\; + } + + \If{$ (s_k.ID $ is the same Previous Leader) And (K.CurrentSize = K.PreviousSize)}{ + + \emph{ Use the same previous cover set for current sensing stage}\; + } + \Else{ + \emph{Update $a^j_{ik}$; prepare data for IP~Algorithm}\; + \emph{$\left\{\left(X_{1},\dots,X_{l},\dots,X_{K}\right)\right\}$ = Execute Integer Program Algorithm($K$)}\; + \emph{K.PreviousSize = K.CurrentSize}\; + } + + \emph{$s_k.status$ = COMMUNICATION}\; + \emph{Send $ActiveSleep()$ to each node $l$ in subregion}\; + \emph{Update $RE_k $}\; + } + \Else{ + \emph{$s_k.status$ = LISTENING}\; + \emph{Wait $ActiveSleep()$ packet from the Leader}\; + \emph{Update $RE_k $}\; + } + } + \Else { Exclude $s_k$ from entering in the current sensing stage} +\caption{PeCO($s_k$)} +\label{alg:PeCO} +\end{algorithm} + +In this algorithm, K.CurrentSize and K.PreviousSize respectively represent the +current number and the previous number of living nodes in the subnetwork of the +subregion. Initially, the sensor node checks its remaining energy $RE_k$, which +must be greater than a threshold $E_{th}$ in order to participate in the current +period. Each sensor node determines its position and its subregion using an +embedded GPS or a location discovery algorithm. After that, all the sensors +collect position coordinates, remaining energy, sensor node ID, and the number +of their one-hop live neighbors during the information exchange. The sensors +inside a same region cooperate to elect a leader. The selection criteria for the +leader, in order of priority, are: larger numbers of neighbors, larger remaining +energy, and then in case of equality, larger index. Once chosen, the leader +collects information to formulate and solve the integer program which allows to +construct the set of active sensors in the sensing stage. + + + +\section{Perimeter-based Coverage Problem Formulation} +\label{ch6:sec:03} + + +\noindent In this section, the coverage model is mathematically formulated. We +start with a description of the notations that will be used throughout the +section. + +First, we have the following sets: +\begin{itemize} +\item $S$ represents the set of WSN sensor nodes; +\item $A \subseteq S $ is the subset of alive sensors; +\item $I_j$ designates the set of coverage intervals (CI) obtained for + sensor~$j$. +\end{itemize} +$I_j$ refers to the set of coverage intervals which have been defined according +to the method introduced in subsection~\ref{ch6:sec:02:01}. For a coverage interval $i$, +let $a^j_{ik}$ denotes the indicator function of whether sensor~$k$ is involved +in coverage interval~$i$ of sensor~$j$, that is: +\begin{equation} +a^j_{ik} = \left \{ +\begin{array}{lll} + 1 & \mbox{if sensor $k$ is involved in the } \\ + & \mbox{coverage interval $i$ of sensor $j$}, \\ + 0 & \mbox{otherwise.}\\ +\end{array} \right. +%\label{eq12} +\notag +\end{equation} +Note that $a^k_{ik}=1$ by definition of the interval. + +Second, we define several binary and integer variables. Hence, each binary +variable $X_{k}$ determines the activation of sensor $k$ in the sensing phase +($X_k=1$ if the sensor $k$ is active or 0 otherwise). $M^j_i$ is an integer +variable which measures the undercoverage for the coverage interval $i$ +corresponding to sensor~$j$. In the same way, the overcoverage for the same +coverage interval is given by the variable $V^j_i$. + +If we decide to sustain a level of coverage equal to $l$ all along the perimeter +of sensor $j$, we have to ensure that at least $l$ sensors involved in each +coverage interval $i \in I_j$ of sensor $j$ are active. According to the +previous notations, the number of active sensors in the coverage interval $i$ of +sensor $j$ is given by $\sum_{k \in A} a^j_{ik} X_k$. To extend the network +lifetime, the objective is to activate a minimal number of sensors in each +period to ensure the desired coverage level. As the number of alive sensors +decreases, it becomes impossible to reach the desired level of coverage for all +coverage intervals. Therefore we use variables $M^j_i$ and $V^j_i$ as a measure +of the deviation between the desired number of active sensors in a coverage +interval and the effective number. And we try to minimize these deviations, +first to force the activation of a minimal number of sensors to ensure the +desired coverage level, and if the desired level cannot be completely satisfied, +to reach a coverage level as close as possible to the desired one. + + +Our coverage optimization problem can then be mathematically expressed as follows: +%Objective: +\begin{equation} %\label{eq:ip2r} +\left \{ +\begin{array}{ll} +\min \sum_{j \in S} \sum_{i \in I_j} (\alpha^j_i ~ M^j_i + \beta^j_i ~ V^j_i )&\\ +\textrm{subject to :}&\\ +\sum_{k \in A} ( a^j_{ik} ~ X_{k}) + M^j_i \geq l \quad \forall i \in I_j, \forall j \in S\\ +%\label{c1} +\sum_{k \in A} ( a^j_{ik} ~ X_{k}) - V^j_i \leq l \quad \forall i \in I_j, \forall j \in S\\ +% \label{c2} +% \Theta_{p}\in \mathbb{N}, &\forall p \in P\\ +% U_{p} \in \{0,1\}, &\forall p \in P\\ +X_{k} \in \{0,1\}, \forall k \in A +\end{array} +\right. +\notag +\end{equation} +$\alpha^j_i$ and $\beta^j_i$ are nonnegative weights selected according to the +relative importance of satisfying the associated level of coverage. For example, +weights associated with coverage intervals of a specified part of a region may +be given by a relatively larger magnitude than weights associated with another +region. This kind of integer program is inspired from the model developed for +brachytherapy treatment planning for optimizing dose distribution +\cite{0031-9155-44-1-012}. The integer program must be solved by the leader in +each subregion at the beginning of each sensing phase, whenever the environment +has changed (new leader, death of some sensors). Note that the number of +constraints in the model is constant (constraints of coverage expressed for all +sensors), whereas the number of variables $X_k$ decreases over periods, since we +consider only alive sensors (sensors with enough energy to be alive during one +sensing phase) in the model. + +\section{Performance Evaluation and Analysis} +\label{ch6:sec:04} + +\subsection{Simulation Settings} +\label{ch6:sec:04:01} + +The WSN area of interest is supposed to be divided into 16~regular subregions. %and we use the same energy consumption than in our previous work~\cite{Idrees2}. +Table~\ref{table3} gives the chosen parameters settings. + +\begin{table}[ht] +\caption{Relevant parameters for network initialization.} +% title of Table +\centering +% used for centering table +\begin{tabular}{c|c} +% centered columns (4 columns) +\hline +Parameter & Value \\ [0.5ex] + +\hline +% inserts single horizontal line +Sensing field & $(50 \times 25)~m^2 $ \\ + +WSN size & 100, 150, 200, 250, and 300~nodes \\ +%\hline +Initial energy & in range 500-700~Joules \\ +%\hline +Sensing period & duration of 60 minutes \\ +$E_{th}$ & 36~Joules\\ +$R_s$ & 5~m \\ +%\hline +$\alpha^j_i$ & 0.6 \\ +% [1ex] adds vertical space +%\hline +$\beta^j_i$ & 0.4 +%inserts single line +\end{tabular} +\label{table3} +% is used to refer this table in the text +\end{table} + + +To obtain experimental results which are relevant, simulations with five +different node densities going from 100 to 300~nodes were performed considering +each time 25~randomly generated networks. The nodes are deployed on a field of +interest of $(50 \times 25)~m^2 $ in such a way that they cover the field with a +high coverage ratio. Each node has an initial energy level, in Joules, which is +randomly drawn in the interval $[500-700]$. If its energy provision reaches a +value below the threshold $E_{th}=36$~Joules, the minimum energy needed for a +node to stay active during one period, it will no more participate in the +coverage task. This value corresponds to the energy needed by the sensing phase, +obtained by multiplying the energy consumed in active state (9.72 mW) with the +time in seconds for one period (3600 seconds), and adding the energy for the +pre-sensing phases. According to the interval of initial energy, a sensor may +be active during at most 20 periods. + + +The values of $\alpha^j_i$ and $\beta^j_i$ have been chosen to ensure a good +network coverage and a longer WSN lifetime. We have given a higher priority to +the undercoverage (by setting the $\alpha^j_i$ with a larger value than +$\beta^j_i$) so as to prevent the non-coverage for the interval~$i$ of the +sensor~$j$. On the other hand, we have assigned to +$\beta^j_i$ a value which is slightly lower so as to minimize the number of active sensor nodes which contribute +in covering the interval. + +We applied the performance metrics, which are described in chapter 4, section \ref{ch4:sec:04:04} in order to evaluate the efficiency of our approach. We used the modeling language and the optimization solver which are mentioned in chapter 4, section \ref{ch4:sec:04:02}. In addition, we employed an energy consumption model, which is presented in chapter 4, section \ref{ch4:sec:04:03}. + + +\subsection{Simulation Results} +\label{ch6:sec:04:02} + +In order to assess and analyze the performance of our protocol we have implemented PeCO protocol in OMNeT++~\cite{ref158} simulator. Besides PeCO, three other protocols, described in the next paragraph, will be evaluated for comparison purposes. +%The simulations were run on a laptop DELL with an Intel Core~i3~2370~M (2.4~GHz) processor (2 cores) whose MIPS (Million Instructions Per Second) rate is equal to 35330. To be consistent with the use of a sensor node based on Atmels AVR ATmega103L microcontroller (6~MHz) having a MIPS rate equal to 6, the original execution time on the laptop is multiplied by 2944.2 $\left(\frac{35330}{2} \times \frac{1}{6} \right)$. The modeling language for Mathematical Programming (AMPL)~\cite{AMPL} is employed to generate the integer program instance in a standard format, which is then read and solved by the optimization solver GLPK (GNU linear Programming Kit available in the public domain) \cite{glpk} through a Branch-and-Bound method. +As said previously, the PeCO is compared with three other approaches. The first one, called DESK, is a fully distributed coverage algorithm proposed by \cite{DESK}. The second one, called GAF~\cite{GAF}, consists in dividing the monitoring area into fixed squares. Then, during the decision phase, in each square, one sensor is chosen to remain active during the sensing phase. The last one, the DiLCO protocol~\cite{Idrees2}, is an improved version of a research work we presented in~\cite{ref159}. Let us notice that PeCO and DiLCO protocols are based on the same framework. In particular, the choice for the simulations of a partitioning in 16~subregions was chosen because it corresponds to the configuration producing the better results for DiLCO. The protocols are distinguished from one another by the formulation of the integer program providing the set of sensors which have to be activated in each sensing phase. DiLCO protocol tries to satisfy the coverage of a set of primary points, whereas PeCO protocol objective is to reach a desired level of coverage for each sensor perimeter. In our experimentations, we chose a level of coverage equal to one ($l=1$). + + + +\subsubsection{Coverage Ratio} +\label{ch6:sec:04:02:01} + +Figure~\ref{fig333} shows the average coverage ratio for 200 deployed nodes +obtained with the four protocols. DESK, GAF, and DiLCO provide a slightly better +coverage ratio with respectively 99.99\%, 99.91\%, and 99.02\%, compared to the 98.76\% +produced by PeCO for the first periods. This is due to the fact that at the +beginning the DiLCO protocol puts to sleep status more redundant sensors (which +slightly decreases the coverage ratio), while the three other protocols activate +more sensor nodes. Later, when the number of periods is beyond~70, it clearly +appears that PeCO provides a better coverage ratio and keeps a coverage ratio +greater than 50\% for longer periods (15 more compared to DiLCO, 40 more +compared to DESK). The energy saved by PeCO in the early periods allows later a +substantial increase of the coverage performance. + +\parskip 0pt +\begin{figure}[h!] +\centering + \includegraphics[scale=0.5] {Figures/ch6/R/CR.eps} +\caption{Coverage ratio for 200 deployed nodes.} +\label{fig333} +\end{figure} + + + +\subsubsection{Active Sensors Ratio} +\label{ch6:sec:04:02:02} + +Having the less active sensor nodes in each period is essential to minimize the +energy consumption and thus to maximize the network lifetime. Figure~\ref{fig444} +shows the average active nodes ratio for 200 deployed nodes. We observe that +DESK and GAF have 30.36 \% and 34.96 \% active nodes for the first fourteen +rounds and DiLCO and PeCO protocols compete perfectly with only 17.92 \% and +20.16 \% active nodes during the same time interval. As the number of periods +increases, PeCO protocol has a lower number of active nodes in comparison with +the three other approaches, while keeping a greater coverage ratio as shown in +Figure \ref{fig333}. + +\begin{figure}[h!] +\centering +\includegraphics[scale=0.5]{Figures/ch6/R/ASR.eps} +\caption{Active sensors ratio for 200 deployed nodes.} +\label{fig444} +\end{figure} + +\subsubsection{The Energy Consumption} +\label{ch6:sec:04:02:03} + +We studied the effect of the energy consumed by the WSN during the communication, +computation, listening, active, and sleep status for different network densities +and compared it for the four approaches. Figures~\ref{fig3EC}(a) and (b) +illustrate the energy consumption for different network sizes and for +$Lifetime95$ and $Lifetime50$. The results show that our PeCO protocol is the +most competitive from the energy consumption point of view. As shown in both +figures, PeCO consumes much less energy than the three other methods. One might +think that the resolution of the integer program is too costly in energy, but +the results show that it is very beneficial to lose a bit of time in the +selection of sensors to activate. Indeed the optimization program allows to +reduce significantly the number of active sensors and so the energy consumption +while keeping a good coverage level. + +\begin{figure}[h!] + \centering + \begin{tabular}{@{}cr@{}} + \includegraphics[scale=0.475]{Figures/ch6/R/EC95.eps} & \raisebox{2.75cm}{(a)} \\ + \includegraphics[scale=0.475]{Figures/ch6/R/EC50.eps} & \raisebox{2.75cm}{(b)} + \end{tabular} + \caption{Energy consumption per period for (a)~$Lifetime_{95}$ and (b)~$Lifetime_{50}$.} + \label{fig3EC} +\end{figure} + + + +\subsubsection{The Network Lifetime} +\label{ch6:sec:04:02:04} + +We observe the superiority of PeCO and DiLCO protocols in comparison with the +two other approaches in prolonging the network lifetime. In +Figures~\ref{fig3LT}(a) and (b), $Lifetime95$ and $Lifetime50$ are shown for +different network sizes. As highlighted by these figures, the lifetime +increases with the size of the network, and it is clearly largest for DiLCO +and PeCO protocols. For instance, for a network of 300~sensors and coverage +ratio greater than 50\%, we can see on Figure~\ref{fig3LT}(b) that the lifetime +is about twice longer with PeCO compared to DESK protocol. The performance +difference is more obvious in Figure~\ref{fig3LT}(b) than in +Figure~\ref{fig3LT}(a) because the gain induced by our protocols increases with + time, and the lifetime with a coverage of 50\% is far longer than with +95\%. + +\begin{figure}[h!] + \centering + \begin{tabular}{@{}cr@{}} + \includegraphics[scale=0.475]{Figures/ch6/R/LT95.eps} & \raisebox{2.75cm}{(a)} \\ + \includegraphics[scale=0.475]{Figures/ch6/R/LT50.eps} & \raisebox{2.75cm}{(b)} + \end{tabular} + \caption{Network Lifetime for (a)~$Lifetime_{95}$ and (b)~$Lifetime_{50}$.} + \label{fig3LT} +\end{figure} + +Figure~\ref{figLTALL} compares the lifetime coverage of our protocols for +different coverage ratios. We denote by Protocol/50, Protocol/80, Protocol/85, +Protocol/90, and Protocol/95 the amount of time during which the network can +satisfy an area coverage greater than $50\%$, $80\%$, $85\%$, $90\%$, and $95\%$ +respectively, where the term Protocol refers to DiLCO or PeCO. Indeed there are applications +that do not require a 100\% coverage of the area to be monitored. PeCO might be +an interesting method since it achieves a good balance between a high level +coverage ratio and network lifetime. PeCO always outperforms DiLCO for the three +lower coverage ratios, moreover the improvements grow with the network +size. DiLCO is better for coverage ratios near 100\%, but in that case PeCO is +not ineffective for the smallest network sizes. + +\begin{figure}[h!] +\centering \includegraphics[scale=0.5]{Figures/ch6/R/LTa.eps} +\caption{Network lifetime for different coverage ratios.} +\label{figLTALL} +\end{figure} + + + +\section{Conclusion} +\label{ch6:sec:04} + +In this chapter, we have studied the problem of Perimeter-based Coverage Optimization in +WSNs. We have designed a new protocol, called Perimeter-based Coverage Optimization, which +schedules nodes' activities (wake up and sleep stages) with the objective of +maintaining a good coverage ratio while maximizing the network lifetime. This +protocol is applied in a distributed way in regular subregions obtained after +partitioning the area of interest in a preliminary step. It works in periods and +is based on the resolution of an integer program to select the subset of sensors +operating in active status for each period. Our work is original in so far as it +proposes for the first time an integer program scheduling the activation of +sensors based on their perimeter coverage level, instead of using a set of +targets/points to be covered. We have carried out several simulations to evaluate the proposed protocol. The simulation results show that PeCO is more energy-efficient than other approaches, with respect to lifetime, coverage ratio, active sensors ratio, and +energy consumption. + +We plan to extend our framework so that the schedules are planned for multiple +sensing periods. +%in order to compute all active sensor schedules in only one step for many periods; +We also want to improve our integer program to take into account heterogeneous +sensors from both energy and node characteristics point of views. +%the third, we are investigating new optimization model based on the sensing range so as to maximize the lifetime coverage in WSN; +Finally, it would be interesting to implement our protocol using a +sensor-testbed to evaluate it in real world applications. diff --git a/Figures/CHAPITRE_01.tex~ b/Figures/CHAPITRE_01.tex~ old mode 100644 new mode 100755 diff --git a/Figures/CHAPITRE_02.tex~ b/Figures/CHAPITRE_02.tex~ old mode 100644 new mode 100755 diff --git a/Figures/Introduction.tex~ b/Figures/Introduction.tex~ old mode 100644 new mode 100755 diff --git a/Figures/bib.tex~ b/Figures/bib.tex~ old mode 100644 new mode 100755 diff --git a/Figures/ch1/RDM-eps-converted-to.pdf b/Figures/ch1/RDM-eps-converted-to.pdf old mode 100644 new mode 100755 diff --git a/Figures/ch1/RDM.eps b/Figures/ch1/RDM.eps old mode 100644 new mode 100755 diff --git a/Figures/ch1/RDM.pdf b/Figures/ch1/RDM.pdf old mode 100644 new mode 100755 diff --git a/Figures/ch1/WNT-eps-converted-to.pdf b/Figures/ch1/WNT-eps-converted-to.pdf old mode 100644 new mode 100755 diff --git a/Figures/ch1/WNT.eps b/Figures/ch1/WNT.eps old mode 100644 new mode 100755 diff --git a/Figures/ch1/WNT.pdf b/Figures/ch1/WNT.pdf old mode 100644 new mode 100755 diff --git a/Figures/ch1/WSN-M.eps b/Figures/ch1/WSN-M.eps old mode 100644 new mode 100755 diff --git a/Figures/ch1/WSN-M.pdf b/Figures/ch1/WSN-M.pdf old mode 100644 new mode 100755 diff --git a/Figures/ch1/WSN-S.pdf b/Figures/ch1/WSN-S.pdf old mode 100644 new mode 100755 diff --git a/Figures/ch1/WSNAP-eps-converted-to.pdf b/Figures/ch1/WSNAP-eps-converted-to.pdf old mode 100644 new mode 100755 diff --git a/Figures/ch1/WSNAP.eps b/Figures/ch1/WSNAP.eps old mode 100644 new mode 100755 diff --git a/Figures/ch1/WSNAP.pdf b/Figures/ch1/WSNAP.pdf old mode 100644 new mode 100755 diff --git a/Figures/ch1/WSNT.jpg b/Figures/ch1/WSNT.jpg old mode 100644 new mode 100755 diff --git a/Figures/ch1/twsn2.pdf b/Figures/ch1/twsn2.pdf old mode 100644 new mode 100755 diff --git a/Figures/ch1/typesWSN.pdf b/Figures/ch1/typesWSN.pdf old mode 100644 new mode 100755 diff --git a/Figures/ch1/wsn-t-eps-converted-to.pdf b/Figures/ch1/wsn-t-eps-converted-to.pdf old mode 100644 new mode 100755 diff --git a/Figures/ch1/wsn-t.eps b/Figures/ch1/wsn-t.eps old mode 100644 new mode 100755 diff --git a/Figures/ch1/wsn.jpg b/Figures/ch1/wsn.jpg old mode 100644 new mode 100755 diff --git a/Figures/ch2/DESK.jpeg b/Figures/ch2/DESK.jpeg old mode 100644 new mode 100755 diff --git a/Figures/ch2/GAF1.jpeg b/Figures/ch2/GAF1.jpeg old mode 100644 new mode 100755 diff --git a/Figures/ch2/GAF2.jpeg b/Figures/ch2/GAF2.jpeg old mode 100644 new mode 100755 diff --git a/Figures/ch4/FirstModel.pdf b/Figures/ch4/FirstModel.pdf new file mode 100755 index 0000000000000000000000000000000000000000..4ff568ad3bf61c00ea8b05cb125c2fedfdb109e5 GIT binary patch literal 70337 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 matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +% +% Encoding for ISO-8859-1 (also called Latin1) +% +/reencodeISO { +dup dup findfont dup length dict begin +{ 1 index /FID ne { def }{ pop pop } ifelse } forall +currentdict /CharStrings known { + CharStrings /Idieresis known { + /Encoding ISOLatin1Encoding def } if +} if +currentdict end definefont +} def +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/minus/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve +/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut +/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] def +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +/Helvetica reencodeISO def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title () + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 0) + /Author (ali) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Sat Jun 14 03:19:11 2014) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.100 0.100 scale +0 setgray +newpath +(Helvetica) findfont 110 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {gsave BackgroundColor C clippath fill grestore} if +1.000 UL +LTb +671 352 M +63 0 V +4107 0 R +-63 0 V +stroke +605 352 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 1)] +] -36.7 MRshow +1.000 UL +LTb +671 544 M +31 0 V +4139 0 R +-31 0 V +671 797 M +63 0 V +4107 0 R +-63 0 V +stroke +605 797 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 5)] +] -36.7 MRshow +1.000 UL +LTb +671 989 M +31 0 V +4139 0 R +-31 0 V +671 1242 M +63 0 V +4107 0 R +-63 0 V +stroke +605 1242 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 25)] +] -36.7 MRshow +1.000 UL +LTb +671 1434 M +31 0 V +4139 0 R +-31 0 V +671 1687 M +63 0 V +4107 0 R +-63 0 V +stroke +605 1687 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 125)] +] -36.7 MRshow +1.000 UL +LTb +671 1879 M +31 0 V +4139 0 R +-31 0 V +671 2133 M +63 0 V +4107 0 R +-63 0 V +stroke +605 2133 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 625)] +] -36.7 MRshow +1.000 UL +LTb +671 2324 M +31 0 V +4139 0 R +-31 0 V +671 2578 M +63 0 V +4107 0 R +-63 0 V +stroke +605 2578 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 3125)] +] -36.7 MRshow +1.000 UL +LTb +671 2769 M +31 0 V +4139 0 R +-31 0 V +671 3023 M +63 0 V +4107 0 R +-63 0 V +stroke +605 3023 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 15625)] +] -36.7 MRshow +1.000 UL +LTb +671 3215 M +31 0 V +4139 0 R +-31 0 V +671 3468 M +63 0 V +4107 0 R +-63 0 V +stroke +605 3468 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 78125)] +] -36.7 MRshow +1.000 UL +LTb +671 352 M +0 63 V +0 3053 R +0 -63 V +stroke +671 242 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 25)] +] -36.7 MCshow +1.000 UL +LTb +1088 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1088 242 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 50)] +] -36.7 MCshow +1.000 UL +LTb +1505 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1505 242 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 75)] +] -36.7 MCshow +1.000 UL +LTb +1922 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1922 242 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 100)] +] -36.7 MCshow +1.000 UL +LTb +2339 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2339 242 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 125)] +] -36.7 MCshow +1.000 UL +LTb +2756 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2756 242 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 150)] +] -36.7 MCshow +1.000 UL +LTb +3173 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3173 242 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 175)] +] -36.7 MCshow +1.000 UL +LTb +3590 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3590 242 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 200)] +] -36.7 MCshow +1.000 UL +LTb +4007 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4007 242 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 225)] +] -36.7 MCshow +1.000 UL +LTb +4424 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4424 242 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 250)] +] -36.7 MCshow +1.000 UL +LTb +4841 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4841 242 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 275)] +] -36.7 MCshow +1.000 UL +LTb +1.000 UL +LTb +671 3468 N +671 352 L +4170 0 V +0 3116 V +-4170 0 V +Z stroke +LCb setrgbcolor +88 1910 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 110.0 0.0 true true 0 (Execution Time \(s\) )] +] -36.7 MCshow +grestore +LTb +LCb setrgbcolor +2756 77 M +[ [(Helvetica) 110.0 0.0 true true 0 (Number of Wireless Sensor Nodes)] +] -36.7 MCshow +LTb +1.000 UP +1.000 UL +LTb +% Begin plot #1 +1.000 UP +2.000 UL +LT0 +0.00 0.55 0.55 C LCb setrgbcolor +1380 3402 M +[ [(Helvetica) 110.0 0.0 true true 0 (DiLCO-2)] +] -36.7 MRshow +LT0 +0.00 0.55 0.55 C 1446 3402 M +327 0 V +1088 1727 M +834 407 V +834 313 V +834 333 V +834 260 V +1088 1727 TriUF +1922 2134 TriUF +2756 2447 TriUF +3590 2780 TriUF +4424 3040 TriUF +1609 3402 TriUF +% End plot #1 +% Begin plot #2 +1.000 UP +2.000 UL +LT1 +0.50 0.00 0.00 C LCb setrgbcolor +1380 3292 M +[ [(Helvetica) 110.0 0.0 true true 0 (DiLCO-4)] +] -36.7 MRshow +LT1 +0.50 0.00 0.00 C 1446 3292 M +327 0 V +1088 1334 M +834 367 V +834 227 V +834 183 V +834 142 V +1088 1334 Star +1922 1701 Star +2756 1928 Star +3590 2111 Star +4424 2253 Star +1609 3292 Star +% End plot #2 +% Begin plot #3 +1.000 UP +2.000 UL +LT2 +0.00 0.00 0.55 C LCb setrgbcolor +1380 3182 M +[ [(Helvetica) 110.0 0.0 true true 0 (DiLCO-8)] +] -36.7 MRshow +LT2 +0.00 0.00 0.55 C 1446 3182 M +327 0 V +1088 1000 M +834 310 V +834 215 V +834 155 V +834 118 V +1088 1000 CircleF +1922 1310 CircleF +2756 1525 CircleF +3590 1680 CircleF +4424 1798 CircleF +1609 3182 CircleF +% End plot #3 +% Begin plot #4 +1.000 UP +2.000 UL +LT3 +0.00 0.39 0.00 C LCb setrgbcolor +1380 3072 M +[ [(Helvetica) 110.0 0.0 true true 0 (DiLCO-16)] +] -36.7 MRshow +LT3 +0.00 0.39 0.00 C 1446 3072 M +327 0 V +1088 921 M +834 85 V +834 134 V +834 113 V +834 93 V +1088 921 DiaF +1922 1006 DiaF +2756 1140 DiaF +3590 1253 DiaF +4424 1346 DiaF +1609 3072 DiaF +% End plot #4 +% Begin plot #5 +1.000 UP +2.000 UL +LT4 +0.50 0.00 0.50 C LCb setrgbcolor +1380 2962 M +[ [(Helvetica) 110.0 0.0 true true 0 (DiLCO-32)] +] -36.7 MRshow +LT4 +0.50 0.00 0.50 C 1446 2962 M +327 0 V +1088 659 M +834 91 V +834 86 V +834 65 V +834 74 V +1088 659 BoxF +1922 750 BoxF +2756 836 BoxF +3590 901 BoxF +4424 975 BoxF +1609 2962 BoxF +% End plot #5 +1.000 UL +LTb +671 3468 N +671 352 L +4170 0 V +0 3116 V +-4170 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 +%%Trailer +cleartomark +countdictstack +exch sub { end } repeat +restore +%%EOF diff --git a/Figures/ch4/R1/T.pdf b/Figures/ch4/R1/T.pdf old mode 100644 new mode 100755 diff --git a/Figures/ch4/R1/T.ps b/Figures/ch4/R1/T.ps new file mode 100755 index 0000000..8becb38 --- /dev/null +++ b/Figures/ch4/R1/T.ps @@ -0,0 +1,899 @@ +%!PS-Adobe-2.0 +%%Creator: gnuplot 4.6 patchlevel 0 +%%CreationDate: Sat Jun 14 03:19:11 2014 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 554 410 +%%Orientation: Portrait +%%Pages: (atend) +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following true/false flags may be edited by hand if desired. +% The unit line width and grayscale image gamma correction may also be changed. +% +/Color false def +/Blacktext false def +/Solid false def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/ClipToBoundingBox false def +/SuppressPDFMark false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/Gamma 1.0 def +/BackgroundColor {-1.000 -1.000 -1.000} def +% +/vshift -36 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/doclip { + ClipToBoundingBox { + newpath 50 50 moveto 554 50 lineto 554 410 lineto 50 410 lineto closepath + clip + } if +} def +% +% Gnuplot Prolog Version 4.4 (August 2010) +% +%/SuppressPDFMark true def +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/g {setgray} bind def +/Gshow {show} def % May be redefined later in the file to support UTF-8 +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +3.8 setmiterlimit +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + gsave 1 setgray fill grestore clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +% +% Encoding for ISO-8859-1 (also called Latin1) +% +/reencodeISO { +dup dup findfont dup length dict begin +{ 1 index /FID ne { def }{ pop pop } ifelse } forall +currentdict /CharStrings known { + CharStrings /Idieresis known { + /Encoding ISOLatin1Encoding def } if +} if +currentdict end definefont +} def +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/minus/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve +/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut +/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] def +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} def +/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +/Helvetica reencodeISO def +Level1 SuppressPDFMark or +{} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title () + /Subject (gnuplot plot) + /Creator (gnuplot 4.6 patchlevel 0) + /Author (ali) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Sat Jun 14 03:19:11 2014) + /DOCINFO pdfmark +end +} ifelse +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +doclip +50 50 translate +0.100 0.100 scale +0 setgray +newpath +(Helvetica) findfont 110 scalefont setfont +BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {gsave BackgroundColor C clippath fill grestore} if +1.000 UL +LTb +671 352 M +63 0 V +4107 0 R +-63 0 V +stroke +605 352 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 1)] +] -36.7 MRshow +1.000 UL +LTb +671 544 M +31 0 V +4139 0 R +-31 0 V +671 797 M +63 0 V +4107 0 R +-63 0 V +stroke +605 797 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 5)] +] -36.7 MRshow +1.000 UL +LTb +671 989 M +31 0 V +4139 0 R +-31 0 V +671 1242 M +63 0 V +4107 0 R +-63 0 V +stroke +605 1242 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 25)] +] -36.7 MRshow +1.000 UL +LTb +671 1434 M +31 0 V +4139 0 R +-31 0 V +671 1687 M +63 0 V +4107 0 R +-63 0 V +stroke +605 1687 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 125)] +] -36.7 MRshow +1.000 UL +LTb +671 1879 M +31 0 V +4139 0 R +-31 0 V +671 2133 M +63 0 V +4107 0 R +-63 0 V +stroke +605 2133 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 625)] +] -36.7 MRshow +1.000 UL +LTb +671 2324 M +31 0 V +4139 0 R +-31 0 V +671 2578 M +63 0 V +4107 0 R +-63 0 V +stroke +605 2578 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 3125)] +] -36.7 MRshow +1.000 UL +LTb +671 2769 M +31 0 V +4139 0 R +-31 0 V +671 3023 M +63 0 V +4107 0 R +-63 0 V +stroke +605 3023 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 15625)] +] -36.7 MRshow +1.000 UL +LTb +671 3215 M +31 0 V +4139 0 R +-31 0 V +671 3468 M +63 0 V +4107 0 R +-63 0 V +stroke +605 3468 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 78125)] +] -36.7 MRshow +1.000 UL +LTb +671 352 M +0 63 V +0 3053 R +0 -63 V +stroke +671 242 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 25)] +] -36.7 MCshow +1.000 UL +LTb +1088 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1088 242 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 50)] +] -36.7 MCshow +1.000 UL +LTb +1505 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1505 242 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 75)] +] -36.7 MCshow +1.000 UL +LTb +1922 352 M +0 63 V +0 3053 R +0 -63 V +stroke +1922 242 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 100)] +] -36.7 MCshow +1.000 UL +LTb +2339 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2339 242 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 125)] +] -36.7 MCshow +1.000 UL +LTb +2756 352 M +0 63 V +0 3053 R +0 -63 V +stroke +2756 242 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 150)] +] -36.7 MCshow +1.000 UL +LTb +3173 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3173 242 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 175)] +] -36.7 MCshow +1.000 UL +LTb +3590 352 M +0 63 V +0 3053 R +0 -63 V +stroke +3590 242 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 200)] +] -36.7 MCshow +1.000 UL +LTb +4007 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4007 242 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 225)] +] -36.7 MCshow +1.000 UL +LTb +4424 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4424 242 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 250)] +] -36.7 MCshow +1.000 UL +LTb +4841 352 M +0 63 V +0 3053 R +0 -63 V +stroke +4841 242 M +[ [(Helvetica) 110.0 0.0 true true 0 ( 275)] +] -36.7 MCshow +1.000 UL +LTb +1.000 UL +LTb +671 3468 N +671 352 L +4170 0 V +0 3116 V +-4170 0 V +Z stroke +LCb setrgbcolor +88 1910 M +currentpoint gsave translate -270 rotate 0 0 moveto +[ [(Helvetica) 110.0 0.0 true true 0 (Execution Time \(s\) )] +] -36.7 MCshow +grestore +LTb +LCb setrgbcolor +2756 77 M +[ [(Helvetica) 110.0 0.0 true true 0 (Number of Wireless Sensor Nodes)] +] -36.7 MCshow +LTb +1.000 UP +1.000 UL +LTb +% Begin plot #1 +1.000 UP +2.000 UL +LT0 +0.00 0.55 0.55 C LCb setrgbcolor +1380 3402 M +[ [(Helvetica) 110.0 0.0 true true 0 (DiLCO-2)] +] -36.7 MRshow +LT0 +0.00 0.55 0.55 C 1446 3402 M +327 0 V +1088 1727 M +834 407 V +834 313 V +834 333 V +834 260 V +1088 1727 TriUF +1922 2134 TriUF +2756 2447 TriUF +3590 2780 TriUF +4424 3040 TriUF +1609 3402 TriUF +% End plot #1 +% Begin plot #2 +1.000 UP +2.000 UL +LT1 +0.50 0.00 0.00 C LCb setrgbcolor +1380 3292 M +[ [(Helvetica) 110.0 0.0 true true 0 (DiLCO-4)] +] -36.7 MRshow +LT1 +0.50 0.00 0.00 C 1446 3292 M +327 0 V +1088 1334 M +834 367 V +834 227 V +834 183 V +834 142 V +1088 1334 Star +1922 1701 Star +2756 1928 Star +3590 2111 Star +4424 2253 Star +1609 3292 Star +% End plot #2 +% Begin plot #3 +1.000 UP +2.000 UL +LT2 +0.00 0.00 0.55 C LCb setrgbcolor +1380 3182 M +[ [(Helvetica) 110.0 0.0 true true 0 (DiLCO-8)] +] -36.7 MRshow +LT2 +0.00 0.00 0.55 C 1446 3182 M +327 0 V +1088 1000 M +834 310 V +834 215 V +834 155 V +834 118 V +1088 1000 CircleF +1922 1310 CircleF +2756 1525 CircleF +3590 1680 CircleF +4424 1798 CircleF +1609 3182 CircleF +% End plot #3 +% Begin plot #4 +1.000 UP +2.000 UL +LT3 +0.00 0.39 0.00 C LCb setrgbcolor +1380 3072 M +[ [(Helvetica) 110.0 0.0 true true 0 (DiLCO-16)] +] -36.7 MRshow +LT3 +0.00 0.39 0.00 C 1446 3072 M +327 0 V +1088 921 M +834 85 V +834 134 V +834 113 V +834 93 V +1088 921 DiaF +1922 1006 DiaF +2756 1140 DiaF +3590 1253 DiaF +4424 1346 DiaF +1609 3072 DiaF +% End plot #4 +% Begin plot #5 +1.000 UP +2.000 UL +LT4 +0.50 0.00 0.50 C LCb setrgbcolor +1380 2962 M +[ [(Helvetica) 110.0 0.0 true true 0 (DiLCO-32)] +] -36.7 MRshow +LT4 +0.50 0.00 0.50 C 1446 2962 M +327 0 V +1088 659 M +834 91 V +834 86 V +834 65 V +834 74 V +1088 659 BoxF +1922 750 BoxF +2756 836 BoxF +3590 901 BoxF +4424 975 BoxF +1609 2962 BoxF +% End plot #5 +1.000 UL +LTb +671 3468 N +671 352 L +4170 0 V +0 3116 V +-4170 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/Figures/ch4/R2/ASR.pdf b/Figures/ch4/R2/ASR.pdf new file mode 100755 index 0000000000000000000000000000000000000000..4e1160aa9269155cd50ba539e63db5b2b08eb645 GIT binary patch literal 12086 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