ПРАКТИЧЕСКАЯ РЕАЛИЗАЦИЯ АЛГОРИТМА ОПРЕДЕЛЕНИЯ МЕСТОПОЛОЖЕНИЯ МОБИЛЬНОГО ТЕЛЕФОНА НА БАЗЕ РАЗНОСТНО-ДАЛЬНОМЕРНОГО МЕТОДА
Сравнительный анализ рассмотренных систем определения места положения мобильного телефона показал, что наиболее приемлемыми
точностными характеристиками обладает
разностно-дальномерный метод.
Именно этот метод и представляет наибольший интерес с точки зрения его реализации с использованием существующих программных средств.
В качестве базового примера рассмотрим модель зоны, которую обслуживает мобильный оператор.
Она представлена равносторонним треугольником, на Рис.20.
Рис.20. Модель соты мобильного оператора
Для реализации алгоритма расчета места положения мобильного телефона необходимо выполнить необходимые расчеты по формулам:
D1 - 3 • 105
∆τ1;
D2
- 3 • 105 ∆τ2;
(8)
D3
- 3 • 105 ∆τ3,
где D1 — D3
расстояния от мобильного телефона до базовых радиостанций соответственно; ∆t1 - ∆t3
время задержки прихода сигналов от мобильного телефона до базовых радиостанций.
где
ß1 и ß2 -
углы, определяющие
направление прихода радиосигнала от мобильного телефона до базовых станций.
Листинг программы для определения местоположения мобильного телефона <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.
|