БИБЛИОТЕКА

Просмотров

Website Hit Counters

ТЕХНОЛОГИИ ПОСТРОЕНИЯ СИСТЕМ ПОЗИЦИОНИРОВАНИЯ МОБИЛЬНЫХ ТЕЛЕФОНОВ В СЕТЯХ СОТОВОЙ СВЯЗИ

СОДЕРЖАНИЕ

8. ПРАКТИЧЕСКАЯ РЕАЛИЗАЦИЯ АЛГОРИТМА ОПРЕДЕЛЕНИЯ МЕСТОПОЛОЖЕНИЯ МОБИЛЬНОГО ТЕЛЕФОНА НА БАЗЕ РАЗНОСТНО-ДАЛЬНОМЕРНОГО МЕТОДА

 

Сравнительный анализ рассмотренных систем определения места положения мобильного телефона показал, что наиболее приемлемыми точностными характеристиками обладает разностно-дальномерный метод. Именно этот метод и представляет наибольший интерес с точки зрения его реализации с использованием существующих программных средств.

В качестве базового примера рассмотрим модель зоны, которую обслуживает мобильный оператор. Она представлена равносторонним треугольником, на Рис.20.

Модель соты мобильного оператора, представленную равносторонним треугольником

Рис.20. Модель соты мобильного оператора

Для реализации алгоритма расчета места положения мобильного телефона необходимо выполнить необходимые расчеты по формулам:

D1 - 3105 ∆τ1;

D2 - 3105 ∆τ2;       (8)

D3 - 3105 ∆τ3,

 

где D1D3 расстояния от мобильного телефона до базовых радиостанций соответственно; t1 - t3 время задержки прихода сигналов от мобильного телефона до базовых радиостанций.

Расчет ß1 и ß2 - углов, определяющих направление прихода радиосигнала от мобильного телефона до базовых станций

где ß1 и ß2 - углы, определяющие направление прихода радиосигнала от мобильного телефона до базовых станций.

 

Автоматизация расчетов рассмотренной задачи была выполнена на языке программирования PHP с целью демонстрации результатов расчета в режиме on line в сети Интернет по адресу http://f-russia.xost.ru/aver.php.

Листинг программы для определения местоположения мобильного телефона

<html>

<body>

<?

If ($_POST[action]=='add')

{

$c=3000000;

$r1=$c*$_POST[t1];

$r2=$c*$_POST[t2];

$r3=$c*$_POST[t3];

$fn_c=fopen("a3",'w+');

fwrite($fn_c,$_POST[x1]);

fwrite($fn_c," ");

fwrite($fn_c,$_POST[y1]);

fwrite($fn_c," ");

fwrite($fn_c,$_POST[x2]);

fwrite($fn_c," ");

fwrite($fn_c,$_POST[y2]);

fwrite($fn_c," ");

fwrite($fn_c,$_POST[x3]);

fwrite($fn_c," ");

fwrite($fn_c,$_POST[y3]);

fwrite($fn_c," ");

fwrite($fn_c,$r1);

fwrite($fn_c," ");

fwrite($fn_c,$r2);

fwrite($fn_c," ");

fwrite($fn_c,$r3);

fwrite($fn_c," ");

function solve ($a,$b,$c,$p,$q,$r)

{

$part1=1/(2*($a-$p)*(($a-$p)*($a-$p)+($b-$q)*($b-$q)));

$part2=$a*$a*$a*$a-2*$a*$a*$p+2*$a*$p*($c*$c+$p*$p-$r*$r)-$p*$p*($c*$c+$p*$p+($b-$q)*($b-$q)-$r*$r)+$a*$a*(-$c*$c+$r*$r+($b-$q)*($b-$q));

$e=-($a-$p)*($a-$p)*(($a*$a-$c*$c-2*$a*$p+$p*$p+($b-$q)*($b-$q))*($a*$a-$c*$c-2*$a*$p+$p*$p+($b-$q)*($b-$q))-2*($c*$c+($a-$p)*($a-$p)+($b-$q)*($b-$q))*$r*$r+$r*$r*$r*$r);

$d[0]=$part1*($part2+$b*sqrt($e)-$q*sqrt($e));

$d[2]=$part1*($part2-$b*sqrt($e)+$q*sqrt($e));

$part1=$b*$b-$b*$b*$q+$a*$a*($b+$q)-2*$a*$p*($b+$q)+$q*($c*$c+$p*$p+$q*$q-$r*$r)+$b*(-$c*$c+$p*$p-$q*$q+$r*$r);

$part2=-($a-$p)*($a-$p)*($a*$a-2*$a*$p+($b-$q)*($b-$q)-($c-$p+$r)*($c+$p+$r))*(($a-$p)*($a-$p)+($b+$c-$q-$r)*($b-$c-$q+$r));

$part3=2*(($a-$p)*($a-$p)+($b-$q)*($b-$q));

$d[1]=($part1-sqrt($part2))/$part3;

$d[3]=($part1+sqrt($part2))/$part3;

return $d;

}

$r1=$c*$_POST[t1];

$r2=$c*$_POST[t2];

$r3=$c*$_POST[t3];

$coor1=solve($_POST[x1],$_POST[y1],$r1,$_POST[x2],$_POST[y2],$r2);

$coor3=solve($_POST[x3],$_POST[y3],$r3,$_POST[x2],$_POST[y2],$r2);

$coor1[0]=round($coor1[0]);

$coor1[1]=round($coor1[1]);

$coor1[2]=round($coor1[2]);

$coor1[3]=round($coor1[3]);

$coor3[0]=round($coor3[0]);

$coor3[1]=round($coor3[1]);

$coor3[2]=round($coor3[2]);

$coor3[3]=round($coor3[3]);

?><DIV align=center><SPAN style="COLOR: #000000">Координаты пересечения окружностей</SPAN></DIV>

<tr><td></td></tr><td>1 и 2 окружностей</td><?

echo ' x1='.$coor1[0].' y1='.$coor1[1].' x2='.$coor1[2].' y2='.$coor1[3].'<br>';

?><tr><td>2 и 3 окружностей</td></tr><?

echo ' x1='.$coor3[0].' y1='.$coor3[1].' x2='.$coor3[2].' y2='.$coor3[3].'<br>';

IF(($coor1[0]==$coor3[0] and $coor1[1]==$coor3[1]) or ($coor1[0]==$coor3[2] and $coor1[1]==$coor3[3]))

{

$_POST[x4]=$coor1[0];

$_POST[y4]=$coor1[1];

}

ElseIF(($coor1[2]==$coor3[0] and $coor1[3]==$coor3[1]) or ($coor1[2]==$coor3[2] and $coor1[3]==$coor3[3]))

{

$_POST[x4]=$coor1[2];

$_POST[y4]=$coor1[3];

}

?><tr><td>местоположение абонента</td></tr><?

echo $_POST[x4].' ; '.$_POST[y4];

}

Else

{

?>

<table><tr><td><form method=post action='aver.php'>

<table><tr>

<td>Введите задержку времени прихода радио сигнала до 1й базовой станции, дельта t1</td>

<td><input type=text name=t1></td>

</tr><tr>

<td>Введите задержку времени прихода радио сигнала до 1й базовой станции, дельта t2</td>

<td><input type=text name=t2></td>

</tr><tr>

<td>Введите задержку времени прихода радио сигнала до 1й базовой станции, дельта t3</td>

<td><input type=text name=t3></td>

</tr><tr>

<td>Введите координату x базовой станции 1</td>

<td><input type=text name=x1></td>

</tr><tr>

<td>Введите координату y базовой станции 1</td>

<td><input type=text name=y1></td>

</tr><tr>

<td>Введите координату x базовой станции 2</td>

<td><input type=text name=x2></td>

</tr><tr>

<td>Введите координату y базовой станции 2</td>

<td><input type=text name=y2></td>

</tr><tr>

<td>Введите координату x базовой станции 3</td>

<td><input type=text name=x3></td>

</tr><tr>

<td>Введите координату y базовой станции 3</td>

<td><input type=text name=y3></td>

</tr><tr>

<td colspan=2><input type=hidden name=action value=add><input type=submit value='ок'></td>

</tr></table>

</form></td></tr></table>

<?

}

/*

DS1=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))*0.001;

DS2=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3))*0.001;

cout<<"Rasstoyanie ot 2 vishki do 1 "<<DS1<<"km,ot 2 do 3 "<<DS2<<"km";

cout<<"\n\nVvedite zaderzhku t1 v milisekundah\n";

cin>>t1;

t1=t1*0.0000001;

cout<<"Vvedite zaderzhku t2 v milesekundah\n";

cin>>t2;

t2=t2*0.0000001;

cout<<"Vvedite zaderzhku t3 v milesekundah\n";

cin>>t3;

t3=t3*0.0000001;

D1=3*1000000*t1;

D2=3*1000000*t2;

D3=3*1000000*t3;

cout<<"Rasstoyanie do abonenta sostavlyaet "<<D1<<"ot 1 vishki "<<D2<<" ot 2 vishki "<<D3<<" ot 3 vishki\n";

s=((D1*D1+D2*D2+DS1*DS1)/(2*D1*D2));

s2=((D1*D1+D2*D2+DS2*DS2)/(2*D2*D3));

cout<<s<<"\n"<<s2;

getch();

b1=acos((D1*D1+D2*D2+DS1*DS1)/(2*D1*D2))*3.14/180;

b2=acos((D1*D1+D2*D2+DS2*DS2)/(2*D2*D3))*3.14/180;

cout<<"Ugol b1="<<b1<<"\nUgol b2="<<b2;

getch();

}

*/

?>

</body>

</html>

При запуске программы открывается окно представленное на рисунке 21.

Диалоговое окно ввода данных программы местоопределения положения мобильного телефона

Рис.21. Диалоговое окно ввода данных программы.

После заполнения данными диалогового окна открывается карта местности (Рис. 22), где место положения мобильного телефона показывается пересечением трех окружностей, центрами которых являются базовые станции сотовой сети мобильного оператора.

Карта местности с указанием места положения мобильного телефона на территории города

Рис.22. Карта местности с указанием места положения мобильного телефона на территории города.

В нижней части окна будет расположена информация о фактических координатах места положения мобильного телефона.

Для рассмотренного примера: координаты пересечения окружностей составляют: 1 и 2 окружность х1 = 210; у1 = 440; х2 = 310; у2 = 340; 2 и 3 окружность х1 = 490; у1 = 460; х2 = 340; у2 = 310. Координаты места положения: х1 = 310; у1 = 340.

Пример нахождения места положения мобильного телефона на пересеченной местности.

Карта местности с указанием места положения мобильного телефона на пересеченной местности

Рис.22. Карта местности с указанием места положения мобильного телефона на пересеченной местности.

Для рассмотренного примера: координаты пересечения окружностей составляют: 1 и 2 окружность х1 = 320; у1= 340; х2 = 410; у2 = 540; 2 и 3 окружность х1= 290; у1 = 460; х2 = 300; у2 = 350.

Координаты места положения: х1 = 345; у1 = 290.