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

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

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

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

Чтобы получить сигналы в режиме реального времени, вам также нужно следующее оборудование:

  • Радио RTL-SDR

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

Для полного списка Communications Toolbox поддерживаемые платформы SDR обратитесь к разделу Supported Hardware страницы открытия Программно определяемого радио (SDR).

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

Фон

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

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

  • Количественное значение смещения частоты в Гц и PPM

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

Если у вас есть передатчик, можно использовать его, чтобы сгенерировать узкополосный сигнал, такой как тон.

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

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

Запустите пример

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

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

Пример кода

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

% 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™, чтобы создать приемник, который вычисляет относительное перемещение частоты между передатчиком и приемником.