Вот типичный комментарий от
govorun на один из моих постов: "чисто теоретически, если можно стандартными средствами определить расстояние от БС до телефона, то по расстояниям от трех БС можно получить точные координаты аппарата, а во расстоянию от двух БС - 2 точки, в одной из которых будет находиться телефон".
Комментарий достаточно типичный - подобное мнение широко распространено на просторах интернета. Так как часть этого утверждения - сущая правда (стандартными средствами иногда можно определить расстояние от БС до телефона (тсс! ни слова о точности измерения!)), кажется, что все утверждение целиком - тоже правда. Так ли это? Давайте разберем его на части и исследуем подробнее.
UPDATE: для тех, кто в материале. Я в курсе, что существуют A-GPS, TOA, AOA, и другие страшные слова. Я в курсе, что иногда достаточно знать местоположение телефона с точностью до location area. Я в курсе, что можно послать на телефон SMS или позвонить, и при этом обновится информация о camped cell, что тоже может быть приемлимым способом "засечь" местоположение конкретного телефона для каких-то конкретных применений. Данный пост не ставит своей целью показать, что все эти способы - чушь и не могут существовать. Данный пост посвящен одной вполне конкретной легенде: что, мол, базовые станции GSM триангулируют местоположение телефона (вариант - всех телефонов в зоне покрытия) и эта возможность является стандартной функцией любой BS.
Начнем с аналогии (кто же из нас не любит начать с аналогии?). Рассмотрим такое утверждение: "поскольку при помощи ping-а можно определить расстояние от одного компьютера до другого, то по расстояниям от трех компьютеров (зная их координаты), можно получить точные координаты искомого компьютера". Не торопитесь кричать: "Бред!".
А что если мы возьмем четыре компьютера, соединим их проводами (если надо - с репитерами) по схеме "звезда" (один - в центре, три - соединены с ним), причем провода проложим строго по прямой, и обеспечим такую длину проводов, чтобы ошибка измерения времени пинга не влияла существенно на вычисление расстояния.
Сможем ли мы в таком случае определить координаты центрального компьютера, зная координаты периферийных и пользуясь только ping-ом? Сможем. Означает ли это, что подобный способ можно использовать всегда? Безусловно, нет. Во-первых, провода редко соединяют два компьютера строго по прямой, во-вторых мы как правило не знаем точных координат тех машин, которые мы пингуем, и т.п. Думаю, вы сами сможете продолжить этот список.
Теперь вернемся к исходному утверждению. Можно ли "стандартными средствами определить расстояние от БС до телефона?". Короткий и ничего не объясняющий ответ - "можно". Зададимся дополнительными вопросами:
1)Кто сказал, что это будет кратчайшее расстояние?
2)Кто занимается измерениями - базовая или телефон?
3)С какой точностью будет произведено измерение?
Ответы на эти вопросы будут такими:
Действительно, базовая станция в процессе обслуживания разговора занимается расчетом величин т.н. timing advance и передает их телефону. Телефон использует их, чтобы корректировать ход своего clock timer-а так, чтобы у него и у базовой "часы тикали одинаково". Действительно, базовая "замеряет" время прохождения сигнала от базовой до телефона, но ей абсолютно пофиг, сколько раз по пути следования сигнал отразился от зданий и т.п.
Итак, вот первая ложка дегтя: несмотря на то, что базовая измеряет время прохождения сигнала от себя до телефона, делает она это только в процессе обслуживания звонка и мы не можем рассчитать на основании этого времени расстояние от базовой до телефона по прямой. Плюс ко всему, даже в идеальных условиях TA дает точность измерения до 500 метров [1].
Едем дальше. Знает ли базовая, сколько телефонов находятся в зоне ее покрытия в режиме ожидания и каково время прохождения сигнала до них? Нет и нет.
Знает ли телефон, какие базовые находятся в "зоне слышимости" и каково время прохождения сигнала до них? Да и нет. Телефон может измерить уровень сигнала базовой (и занимается этим все время), но он не знает/не может измерить величину затухания сигнала.
Даже если телефон мог бы измерить уровень затухания и/или время прохождения сигнала до соседних базовых, мог бы он сам вычислить свои координаты? Нет, т.к. он не знает координат базовых.
О! Идея! Раз базовые (или BSC - не суть важно) "знают" свои координаты и "знают", какова мощность их передатчиков, а телефон "знает", насколько хорошо он их "слышит", давайте каким-то образом сведем эти данные в одну точку, и там проведем расчет координат.
Допустим, в SIM-карте телефона будет специальный applet, которых по сигналу извне (или с какой-то периодичностью) будет передавать по RACH пакетик, в котором будут CellID и RxLevel соседних базовых, а BSC будет получать эти пакетики, и на их основании высчитывать координаты телефона и передавать их дальше, какому-то выделенному серверу (для простоты, назовем его LBS), который будет хранить координаты и при нужде отдавать другим системам. А если какой-то телефон надумает позвонить или принять звонок, BSC дополнительно скорректирует уже имеющиеся координаты с учетом TA.
Смотрите, мы построили систему, которая по запросу к LBS-серверу может отдать нам координаты произвольного телефона в этой GSM-сети (при условии наличия в его SIM-карте нужного нам applet-а). Казалось бы, победа?
А теперь давайте посчитаем, что нам пришлось (пусть и умозрительно) модифицировать в обычной GSM Phase 2+ сети, чтобы получить такой результат:
1)Добавить в SIM-карту applet
2)Модифицировать все BSC и/или BS
3)Добавить LBS-сервер и обеспечить его каналами (физическими или логическими) связи с BSC.
Другими словами - мы разработали и "внедрили" на сети GSM-оператора решение для предоставление location-based services.
А теперь вернемся к начальному утверждению. Как видно, понадобилось существенно модифицировать сеть для того, чтобы превратить теоретическую возможность в возможность практическую. Очевидно, что далеко не все GSM-операторы проделали такую работу (или подобную [2]) работу и обладают возможностью определять местоположение вашего телефона.
Соответственно, если не тыкать пальцем в конкретного оператора, а говорить о GSM как о технологии вообще, то лучше ограничится тем, что "стандартные возможности сети GSM допускают построение системы определения местоположения абонента на основании измерения параметров прохождения радиосигнала, но стандарта GSM Phase 2+ на такие системы/технологии - нет". И не более того.
Ну как, теперь-то темасисек триангуляции раскрыта полностью?
Литература:
Комментарий достаточно типичный - подобное мнение широко распространено на просторах интернета. Так как часть этого утверждения - сущая правда (стандартными средствами иногда можно определить расстояние от БС до телефона (тсс! ни слова о точности измерения!)), кажется, что все утверждение целиком - тоже правда. Так ли это? Давайте разберем его на части и исследуем подробнее.
UPDATE: для тех, кто в материале. Я в курсе, что существуют A-GPS, TOA, AOA, и другие страшные слова. Я в курсе, что иногда достаточно знать местоположение телефона с точностью до location area. Я в курсе, что можно послать на телефон SMS или позвонить, и при этом обновится информация о camped cell, что тоже может быть приемлимым способом "засечь" местоположение конкретного телефона для каких-то конкретных применений. Данный пост не ставит своей целью показать, что все эти способы - чушь и не могут существовать. Данный пост посвящен одной вполне конкретной легенде: что, мол, базовые станции GSM триангулируют местоположение телефона (вариант - всех телефонов в зоне покрытия) и эта возможность является стандартной функцией любой BS.
Начнем с аналогии (кто же из нас не любит начать с аналогии?). Рассмотрим такое утверждение: "поскольку при помощи ping-а можно определить расстояние от одного компьютера до другого, то по расстояниям от трех компьютеров (зная их координаты), можно получить точные координаты искомого компьютера". Не торопитесь кричать: "Бред!".
А что если мы возьмем четыре компьютера, соединим их проводами (если надо - с репитерами) по схеме "звезда" (один - в центре, три - соединены с ним), причем провода проложим строго по прямой, и обеспечим такую длину проводов, чтобы ошибка измерения времени пинга не влияла существенно на вычисление расстояния.
Сможем ли мы в таком случае определить координаты центрального компьютера, зная координаты периферийных и пользуясь только ping-ом? Сможем. Означает ли это, что подобный способ можно использовать всегда? Безусловно, нет. Во-первых, провода редко соединяют два компьютера строго по прямой, во-вторых мы как правило не знаем точных координат тех машин, которые мы пингуем, и т.п. Думаю, вы сами сможете продолжить этот список.
Теперь вернемся к исходному утверждению. Можно ли "стандартными средствами определить расстояние от БС до телефона?". Короткий и ничего не объясняющий ответ - "можно". Зададимся дополнительными вопросами:
1)Кто сказал, что это будет кратчайшее расстояние?
2)Кто занимается измерениями - базовая или телефон?
3)С какой точностью будет произведено измерение?
Ответы на эти вопросы будут такими:
Действительно, базовая станция в процессе обслуживания разговора занимается расчетом величин т.н. timing advance и передает их телефону. Телефон использует их, чтобы корректировать ход своего clock timer-а так, чтобы у него и у базовой "часы тикали одинаково". Действительно, базовая "замеряет" время прохождения сигнала от базовой до телефона, но ей абсолютно пофиг, сколько раз по пути следования сигнал отразился от зданий и т.п.
Итак, вот первая ложка дегтя: несмотря на то, что базовая измеряет время прохождения сигнала от себя до телефона, делает она это только в процессе обслуживания звонка и мы не можем рассчитать на основании этого времени расстояние от базовой до телефона по прямой. Плюс ко всему, даже в идеальных условиях TA дает точность измерения до 500 метров [1].
Едем дальше. Знает ли базовая, сколько телефонов находятся в зоне ее покрытия в режиме ожидания и каково время прохождения сигнала до них? Нет и нет.
Знает ли телефон, какие базовые находятся в "зоне слышимости" и каково время прохождения сигнала до них? Да и нет. Телефон может измерить уровень сигнала базовой (и занимается этим все время), но он не знает/не может измерить величину затухания сигнала.
Даже если телефон мог бы измерить уровень затухания и/или время прохождения сигнала до соседних базовых, мог бы он сам вычислить свои координаты? Нет, т.к. он не знает координат базовых.
О! Идея! Раз базовые (или BSC - не суть важно) "знают" свои координаты и "знают", какова мощность их передатчиков, а телефон "знает", насколько хорошо он их "слышит", давайте каким-то образом сведем эти данные в одну точку, и там проведем расчет координат.
Допустим, в SIM-карте телефона будет специальный applet, которых по сигналу извне (или с какой-то периодичностью) будет передавать по RACH пакетик, в котором будут CellID и RxLevel соседних базовых, а BSC будет получать эти пакетики, и на их основании высчитывать координаты телефона и передавать их дальше, какому-то выделенному серверу (для простоты, назовем его LBS), который будет хранить координаты и при нужде отдавать другим системам. А если какой-то телефон надумает позвонить или принять звонок, BSC дополнительно скорректирует уже имеющиеся координаты с учетом TA.
Смотрите, мы построили систему, которая по запросу к LBS-серверу может отдать нам координаты произвольного телефона в этой GSM-сети (при условии наличия в его SIM-карте нужного нам applet-а). Казалось бы, победа?
А теперь давайте посчитаем, что нам пришлось (пусть и умозрительно) модифицировать в обычной GSM Phase 2+ сети, чтобы получить такой результат:
1)Добавить в SIM-карту applet
2)Модифицировать все BSC и/или BS
3)Добавить LBS-сервер и обеспечить его каналами (физическими или логическими) связи с BSC.
Другими словами - мы разработали и "внедрили" на сети GSM-оператора решение для предоставление location-based services.
А теперь вернемся к начальному утверждению. Как видно, понадобилось существенно модифицировать сеть для того, чтобы превратить теоретическую возможность в возможность практическую. Очевидно, что далеко не все GSM-операторы проделали такую работу (или подобную [2]) работу и обладают возможностью определять местоположение вашего телефона.
Соответственно, если не тыкать пальцем в конкретного оператора, а говорить о GSM как о технологии вообще, то лучше ограничится тем, что "стандартные возможности сети GSM допускают построение системы определения местоположения абонента на основании измерения параметров прохождения радиосигнала, но стандарта GSM Phase 2+ на такие системы/технологии - нет". И не более того.
Ну как, теперь-то тема
Литература:
- http://en.wikipedia.org/wiki/Timing_advance
- http://gsm.net.ua/position.html
- http://www.technocom-wireless.com/pdf/COMDEX_Fall2001.pdf (тут - веселые картинки, которые показывают точность работы разных методов определения местоположения)
(no subject)
Date: 2006-11-18 02:06 am (UTC)в смысле теории - да, тема раскрыта почти полностью. почти, потому что остались мелкие вопросы, например: следует ли понимать "только в процессе обслуживания звонка" буквально, или сюда же входит обслуживание прохождения SMS, поднятый GPRS etc.
большая тройка - конечно же, первые две из перечисленных.
PS сервисы типа предоставляемых на locator.ru (см. сразу картинку (http://new.locator.ru/Images/UploadPics/2006-08/fdf0e263-3ba7-4ee7-8e00-73877a8eacc7.gif)) вписываются в описанную теорию вчистую или есть неохваченные моменты, как думаете?
PPS лично мне больше интересно практическое применение штатных, или - не штатных, но существующих в сети и доступных для обычного терминала функций на стороне этого самого терминала, а не на стороне оператора.
пример - софт для смартфона, определяющий по сочетанию активных БС своё местоположение. всю нужную для этого информацию он с БС имеет, а скажем координаты БС для этого знать не нужно - для достоверного определения "я дома/на работе/в метро/на даче" и привязке к определённому режиму хватит сочетания LAC/CellID/ARFCN/RxLev, а если использовать ещё и Time Advance, то по идее можно строить нехитрую формулу вычисления "точки в пространстве" по шести (а не двум-трём) соответствиям пар БС/расстояние до неё в каждый момент времени.
вычислительной мощности смартфона на это должно хватить с лихвой, скорее грабли будут с расходом батарейки на такое количество реконнектов..
(no subject)
Date: 2006-11-18 02:42 pm (UTC)Ну так белые нитки лучше всего видны именно с изнанки :) Вон спросите у
Нет, прохождение СМС и активный GPRS тоже сюда попадают.
Про большие тройки. Что-то есть у Киевстара, МТС. Ничего нет у UMC, Life. Ничего не знаю про Beeline :) В принципе, поискав в инете по ключевым словам "Beeline LBS solution", можно найти (или не найти) пресс-релизы либо самих операторов, либо компаний, которые поставляли им решения. Как правило, там же можно накопать каких-то подробностей об используемом решении - на каких принципах и с какой точностью работает, и т.п.
Про локатор.ру: судя по тому, что написано на их сайте, они пользуются услугами МТС для того, чтобы собственно определять местоположение абонентов, а своих ЛБС-решений не имеют.
Про пассивное наблюдение за сетью и вычисление на его основании своего местоположения: безусловно, все описанное возможно. Но надо понимать, что мы говорим о "местоположении в сети с точностью до базовой", а не о "определении координат с точностью до Х метров". Изменив, таким образом, поставноку задачи, мы обнаруживаем, что в большинстве случаев нам будет хватать CellID для достижения более-менее пристойного результата, а все остальное - это дополнительная возня, которая не приносит дополнительной точности. Естественно, про всякие "положения точки в пространстве" при этом лучше забыть :)