Сигналы со спутников

До того как заняться приёмом сигналов со спутников, я ничего не знал о радио сигналах. Тем более о радио сигналах со спутников. В моём представлении это было: навести антенну на спутник и выставить частоту приёма.

На самом деле частота сигнала меняется и на спектограмме выглядит как-то вот так:

Если схематично представить, то принимаемый сигнал будет выглядеть вот так:

С этим сигналом есть 2 проблемы (на самом деле больше):

  1. Эффект Доплера. Спутник движется очень быстро, поэтому частота будет смещаться. При этом смещение зависит от расстояния до спутника.
  2. Постоянная составляющая сигнала (DC spike). Появляется при конвертации входящей частоты в рабочую. Обычно присутствует в супергетеродинной архитектуре радиоприёмника.

Каждый из этих эффектов можно компенсировать:

  1. Зная положение спутника и станции приёма сигнала, можно очень точно рассчитать расстояние до спутника и смещение частоты в момент пролёта. Если сдвигать принимаемую частоту на это смещение, то можно выровнять сигнал и компенсировать эффект Доплера.
  2. С DC spike можно бороться двумя способами: добавить фильтр, который будет сдвигать сигнал так, чтобы средняя мощность была равна 0, либо принимать на другой частоте, а сигнал смещать и отфильтровывать от DC spike.

Я выбрал второй способ фильтрации постоянной составляющей, поэтому формула вычисления смещения для сигнала следующая:

long startFrequency = частота сигнала в начале приёма
long endFrequency = частота сигнала по окончанию приёма
long satelliteFrequency = настоящая частота передачи сигнала спутником
long maxOffset = Math.max(Math.abs(satelliteFrequency - startFrequency), Math.abs(satelliteFrequency - endFrequency));
long bandwidth = ширина сигнала спутника // обычно задаётся производителем

long offset = maxOffset + bandwidth / 2;

После того как смещение посчитано, нужно настроить приёмник на эту частоту + смещение. А при обработке сигнала, необходимо сместить сигнал назад на это же смещение. Это можно сделать, например, с помощью Frequency Xlating FIR Filter.