exponenta event banner

Калибровка смещения частоты для приемников

В этом примере показано, как измерить и откалибровать сдвиг частоты между передатчиком и приемником в приемнике с помощью MATLAB ® и Communications Toolbox™. С помощью пакета поддержки Communications Toolbox Support Package for RTL-SDR Radio можно либо использовать захваченные сигналы, либо принимать их в режиме реального времени. Приемник отслеживает принятый сигнал, вычисляет сдвиг частоты между передатчиком и приемником и отображает его в окне команд MATLAB ®.

Необходимое оборудование и программное обеспечение

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

Для приема сигналов в режиме реального времени также необходимо следующее оборудование:

  • Радиоблок RTL-SDR

и следующее программное обеспечение

Полный список платформ SDR, поддерживаемых Communications Toolbox, см. в разделе Поддерживаемые аппаратные средства на странице обнаружения Software Defined Radio (SDR).

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

Фон

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

В примере представлена следующая информация о линии связи:

  • Количественное значение сдвига частоты в Гц и PPM

  • Графическое представление качественного уровня SNR принятого сигнала

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

Если у вас нет передатчика, вы можете использовать широковещательный сигнал. Например, в США сигналы цифрового ТВ ATSC включают в себя узкополосный тон пилот-сигнала на радиочастотной несущей. Тон пилот-сигнала обычно находится на номинальной частоте 309,440 кГц над нижним краем канала. Если такой сигнал присутствует в вашей области, можно установить ожидаемое значение центральной частоты на частоту тонального сигнала. В этом примере используется тон пилот-сигнала канала 29, который составляет приблизительно 560e6 + 309.440e3 Гц. Список номеров каналов и частотных значений см. в разделе Североамериканские телевизионные частоты.

Если в качестве приемника используется радиоприемник RTL-SDR, укажите отображаемое значение коррекции PPM в качестве свойства FrequencyCorrection object™ системы приемника RTL-SDR для компенсации смещения частоты. Обязательно используйте знак смещения в спецификации. После этого спектр, отображаемый системным объектом анализатора спектра приемника, должен иметь максимальную амплитуду приблизительно 0 Гц.

Выполнить пример

Начните передачу с известного источника сигнала. Если вы находитесь в США, вы можете установить ожидаемую центральную частоту на пилотный тон близкого цифрового телевизионного передатчика. Затем введите Frequency CalibrationExample в окне команд MATLAB или щелкните ссылку для запуска примера.

В этом примере отображается спектр принятого сигнала в диапазоне частот от -200 кГц до 200 кГц и в окне команд отображается оценочное смещение частоты в Гц и PPM. В случае, показанном ниже, частота максимальной мощности принимаемого сигнала составляет приблизительно -35 кГц.

Пример кода

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

% Request user input from command-line for application parameters
userInput = helperFrequencyCalibrationUserInput;

% Calculate system parameters based on the user input
[fcParam,sigSrc] = helperFrequencyCalibrationConfig(userInput);

% Create a DC blocker system object to remove the DC component of the
% received signal and increase accuracy of the frequency offset estimation.
dcBlocker = dsp.DCBlocker('Algorithm', 'Subtract mean');

% Create a coarse frequency offset estimation System Object to calculate
% the offset. The system object performs an FFT on its input signal and
% finds the frequency of maximum power. This quantity is the frequency
% offset.
CFO = comm.CoarseFrequencyCompensator( ...
    'FrequencyResolution',  25, ...
    'SampleRate',           fcParam.FrontEndSampleRate);

% Create a spectrum analyzer scope to visualize the signal spectrum
scope = dsp.SpectrumAnalyzer(...
    'Name',             'Actual Frequency Offset',...
    'Title',            'Actual Frequency Offset', ...
    'SpectrumType',     'Power',...
    'FrequencySpan',    'Full', ...
    'SampleRate',       fcParam.FrontEndSampleRate, ...
    'YLimits',          [-40,10],...
    'SpectralAverages', 50, ...
    'FrequencySpan',    'Start and stop frequencies', ...
    'StartFrequency',   -200e3, ...
    'StopFrequency',    200e3,...
    'Position',         figposition([50 30 30 40]));

Потоковая обработка

msgLength = 0;
radioTime = 0;
secondCounter = 1;
while radioTime < userInput.Duration
  rxSig = sigSrc();
  rxSig = dcBlocker(rxSig);
  [~, offset] = CFO(rxSig);
  freqCorrection = (-offset / fcParam.ExpectedFrequency) * fcParam.FrontEndSampleRate;

  % Visualize spectrum and print results
  scope(rxSig);
  if radioTime > secondCounter
    fprintf(repmat('\b', 1, msgLength));
    msg = sprintf(['Frequency offset = %f Hz,\n' ...
      'Frequency correction value (Hz) = %f \n' ...
      'Frequency correction value (PPM) = %f \n'], ...
      offset, -offset, freqCorrection);
    fprintf(msg);
    msgLength = numel(msg);
    secondCounter = secondCounter + 1;
  end

  % Update radio time
  radioTime = radioTime + fcParam.FrameDuration;
end

% Release all System objects
release(sigSrc);
release(dcBlocker);
release(CFO);

Заключение

В этом примере объекты Communications Toolbox™ System используются для построения приемника, который вычисляет относительное смещение частоты между передатчиком и приемником.