TDOA (Time difference of approach) - метод пеленгации или
триангуляции источника радиосигнала по разнице времени прихода
сигнала на несколько синхронизированных приемников.
Есть пара вариантов исполнения. Либо определение направления на
источник, тогда антенны приемников расположены близко, а источник
сигнала находится вне площади окруженной антеннами. При этом методе
измеряется разность фаз несущей между близко расположенными
антеннами синхронных приемников, поэтому расстояние между антеннами
не должно превышать четверть волны.

Есть конечно способ куда проще чем использование четырех
синхронизированных SDR приемников-псевдодопплеровский пеленгатор,
который можно собрать на ардуине, восьми диодах, звуковой карте ПК и
баофенге


Но если все намеренно усложнять то самые дешевые представители этого
семейства сейчас- kraken и kerberos. Используют 4 и 5
модифицированных rtl-sdr. Во первых все 4 микросхемы АЦП
синхронизируются от одного тактового генератора. Во-вторых поскольку
тюнеры нельзя синхронизировать до фазы то на их входы вместе с
сигналом периодически подается синфазно шум от генератора шума,
затем с помощью вычисления корреляции между сигналами от разных
приемников вычисляется фазовый сдвиг между тюнерами и дальше
используется для измерения сдвига фаз пеленгуемого сигнала.


Второй вариант-синхронизированные приемники устанавливаются далеко
друг от друга. Синхронизация возможна по атомным часам gps как в
сетях TDOA KiwiSDR
так и по косвенным расчетам времени с помощью передатчиков
координаты которых точно известны, как в новой сети дешевых станций
AEDA.


Принцип относительно прост. На синхронизированные приемники приходит
сигнал, задержка времени от передатчика до каждого приемника
неизвестны, но известна разница времени прихода.
Возьмем пока два приемника. Допустим расстояние между ними-3 км, а
разница времени прихода говорит о том что передатчик на 1 км ближе к
первому приемнику, чем ко второму. Тогда передатчик может находиться
на расстояниях до первого и второго приемников вида X и Х+1 км,
например 1 и 2 км, 2 и 3 км, 100 и 101км. Эти точки образуют
гиперболу симметричную относительно линии соединяющей передатчики.

Затем берем разницу времени с первого и третьего приемников, строим
на карте гиперболу для них, и их пересечение укажет расположение
передатчика.

Пеленговать можно на дешевые RTLки которые невозможно
синхронизировать с помощью GPS. Суть такова. В зоне работы
приемников выбирается передатчик который слышат все приемники, и
координаты которого точно известны. Координаты всех приемников
известны тоже. Тогда можно точно рассчитать задержку сигнала от
известного передатчика до каждого из приемников, Каждый приемник
делает запись эфира, сначала известного передатчка, потом быстро
перестроив тюнер-того который надо найти. Записи отсылаются на
анализирующий компьютер. На нем сначала по участку записи известного
передатчика определяется точновремя прихода сигнала с него,
вычитаются известные задержки прихода сигнала, получаем три точно
синхронизированные записи. По ним уже определяем разницу времен
прихода сигналов пеленгуемого передатчика, гиперболы итд.

Пдфки с описанием
tdoa_RTL1

TDOA
RTL-test
Конкретно в последней ПДФке использовались три rtl sdr раскиданные
по городу, с raspberry pi3.

Из ПО на них использовались приложения для калибровки частоты по gsm
передатчикам и модифицированная библиотека позволяющая делать запись
сигнала во время перестройки тюнера, автоматически делающая запись
по очереди опорного и неизвестного передатчика.

https://github.com/DC9ST/librtlsdr-2freq
По SSH удаленно на трех приемниках запускалась запись iq сигнала
командой
rtl_sdr -f <freq_1_hz> -h <freq_2_hz> -n 1.2e6
filename.dat
Где F1-частота передатчика синхронизации, расположение которого
известно, F2-пеленгуемого передатчика. Затем запись filename.dat
скачивается на основной компьютер опять же по ssh для анализа.
Пример одновременного запуска записи на трех приемниках в локальной
сети https://panoradio-sdr.de/set-up-a-tdoa-system/
ssh alarm@192.168.0.4 /home/alarm/librtlsdr-2freq/build/src/rtl_sdr -f <freq_1_hz> -h <freq_2_hz> -n 1.2e6 1_filename.dat &
ssh alarm@192.168.0.5 /home/alarm/librtlsdr-2freq/build/src/rtl_sdr -f <freq_1_hz> -h <freq_2_hz> -n 1.2e6 2_filename.dat &
ssh alarm@192.168.0.9 /home/alarm/librtlsdr-2freq/build/src/rtl_sdr -f <freq_1_hz> -h <freq_2_hz> -n 1.2e6 3_filename.dat
Далее записи анализируются скриптом для Matlab/Octave
https://github.com/DC9ST/rtl-sdr-data-read
Очевидно в скрипте надо указать координаты приемников и опорного
передатчика, в файле config

Там же на сайте есть пример скрипта для запуска записи, скачивания.
автоматического запуска анализа и генерации пеленга для Google maps