Приемник Портативной радиостанции FRS/GMRS

В этом примере показано, как создать приемник портативной радиостанции с помощью MATLAB® и Communications Toolbox™. Определенный радио-стандарт, за которым следует этот пример, является FRS/GMRS (Сервис Радио Семейства / Общий Сервис Рации) с CTCSS (Непрерывная Закодированная Тоном Бесшумная Система). Можно использовать симулированные сигналы, записанные сигналы или полученные сигналы от коммерческой портативной радиостанции с помощью Пакета Поддержки Communications Toolbox для Радио RTL-SDR.

Этот пример спроектирован, чтобы работать со стандартами США для операции FRS/GMRS. Технические характеристики для этих стандартов могут быть найдены в списке ссылок ниже. Операция в других странах может или не может работать.

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

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

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

  • Радио RTL-SDR

  • Портативная радиостанция

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

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

Фон

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

Современные портативные радиостанции работают со стандартами FRS/GMRS. Оба стандарта используют частотную модуляцию (FM) на уровне 462 или 467 МГц, которая находится в полосе UHF (Ultra High Frequency).

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

Введите FRSReceiverExample в командном окне MATLAB или нажатии кнопки кнопка 'Open example', чтобы открыться и запустить пример. Необходимо ввести следующую информацию:

  1. Длительность приема в секундах

  2. Источник сигнала (симулированный сигнал, записанный сигнал или радио RTL-SDR)

  3. Номер канала (1-14)

  4. Код CTCSS (1-38, 0 никаких CTCSS, фильтрующий)

  5. Порог обнаружения для полученного сигнала

Пример проигрывает полученное аудио по динамикам вашего компьютера.

Структура приемника

Следующая блок-схема обобщает структуру приемника кода. Обработка имеет четыре основных части: Источник Сигнала, Селектор Канала, Демодулятор FM и обработка CTCSS.

Источник сигнала

Этот пример может использовать три источника сигнала:

  1. ''Симулированный Сигнал'': Симулированные FRS/GMRS сигнализируют в 240e3 выборки/секунда

  2. ''Записанный сигнал'': Беспроводные сигналы, записанные в файл и полученные из основополосного средства чтения файлов, возражают в 240e3 выборки/секунда

  3. ''Радио RTL-SDR'': радио RTL-SDR в 240e3 выборки/секунда

Если вы выберете ''Радио RTL-SDR'' в качестве источника сигнала, это приложение будет искать ваш компьютер радио RTL-SDR и просить, чтобы вы выбрали одного из них как источник сигнала.

Селектор канала

Приемник удаляет компонент DC и применяет переменное усиление к полученному сигналу получить приблизительно известный амплитудный сигнал с уменьшаемой интерференцией. Приемник затем применяет низкий фильтр разделения каналов передачи, чтобы уменьшать сигналы от смежных каналов. Разрыв между смежными каналами составляет 25 кГц, что означает, что основополосная пропускная способность - самое большее, 12,5 кГц. Таким образом мы выбираем частоту среза, чтобы быть 10 кГц.

Затем селектор канала вычисляет среднюю степень отфильтрованного сигнала. Если это больше порога (набор к значению по умолчанию 10%), селектор канала решает, что полученный сигнал от правильного канала и позволяет сигналу пройти. В случае внеполосного сигнала, несмотря на то, что фильтр разделения каналов уменьшает свою величину, это - все еще модулируемый FM, и сигнал модуляции будет присутствовать после демодуляции FM. Полностью отклонить такой сигнал, селектор канала выходные параметры все нули.

Демодулятор FM

Этот пример использует Основополосную Систему Демодулятора FM object™, чья частота дискретизации и максимальное отклонение частоты установлены в 240 кГц и 2,5 кГц, соответственно.

CTCSS

Во-первых, децимирующий фильтр преобразует частоту дискретизации от 240 кГц до 8 кГц. Этот уровень является одной из нативных частот дискретизации выходного аудио устройства вашего хоста - компьютера. Затем декодер CTCSS вычисляет степень на каждой тональной частоте CTCSS с помощью алгоритма Goertzel и выводит код с самой большой степенью. Алгоритм Goertzel обеспечивает эффективный метод вычислить частотные составляющие на предопределенных частотах, то есть, тональные частоты кода, используемые FRS/GMRS.

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

Наконец, фильтр высоких частот с частотой среза 260 Гц отфильтровывает тоны CTCSS, которые имеют максимальную частоту 250 Гц. Используйте audioDeviceWriter Систему object™, чтобы проигрывать полученные сигналы через динамики вашего компьютера. Если вы не слышите звука, выберите другое устройство с помощью свойства DeviceName объекта средства записи аудио устройства, audioPlayer.

Пример кода

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

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

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

% Calculate FRS receiver parameters based on the user input
[frsRxParams,sigSrc] = helperFRSReceiverConfig(userInput);

% Create channel selector components
dcBlocker = dsp.DCBlocker('Algorithm', 'Subtract mean');
agc = comm.AGC;
channelFilter = frsRxParams.ChannelFilter;

% Create FM demodulator
fmDemod = comm.FMDemodulator(...
  'SampleRate', frsRxParams.FrontEndSampleRate, ...
  'FrequencyDeviation', frsRxParams.FrequencyDeviation);

% Create CTCSS and audio output components
decimator = dsp.FIRDecimator(...
  frsRxParams.DecimationFactor, ...
  frsRxParams.DecimationNumerator);
decoder = helperFRSCTCSSDecoder( ...
  'MinimumBlockLength', frsRxParams.CTCSSDecodeBlockLength, ...
  'SampleRate', frsRxParams.AudioSampleRate);
audioFilter = frsRxParams.AudioFilter;
audioPlayer = audioDeviceWriter(frsRxParams.AudioSampleRate);

% Initialize radio time
radioTime = 0;

% Main loop
while radioTime < userInput.Duration
  % Receive baseband samples (Signal Source)
  if frsRxParams.isSourceRadio
    [rcv,~,lost,late] = sigSrc();
  else
    rcv = sigSrc();
    lost = 0;
    late = 1;
  end

  % Channel selector
  rcv = dcBlocker(rcv);
  outAGC = agc(rcv);
  outChanFilt = channelFilter(outAGC);
  rxAmp = mean(abs(outChanFilt));
  if rxAmp > frsRxParams.DetectionThreshold
    x = outChanFilt;
  else
    x = complex(single(zeros(frsRxParams.FrontEndSamplesPerFrame, 1)));
  end

  % FM demodulator
  y = fmDemod(x);

  % CTCSS decoder and audio output
  outRC = decimator(y);
  rcvdCode = decoder(outRC);
  if (rcvdCode == frsRxParams.CTCSSCode) || (frsRxParams.CTCSSCode == 0)
    rcvdSig = outRC;
  else
    rcvdSig = single(zeros(frsRxParams.AudioFrameLength, 1));
  end
  audioSig = audioFilter(rcvdSig);
  audioPlayer(audioSig);

  % Update radio time. If there were lost samples, add those too.
  radioTime = radioTime + frsRxParams.FrontEndFrameTime + ...
    double(lost)/frsRxParams.FrontEndSampleRate;
end

% Release the resources
release(fmDemod)
release(audioPlayer)
release(sigSrc)

Дальнейшее исследование

Декодирование CTCSS вычисляет ДПФ (Дискретное преобразование Фурье) входящего сигнала с помощью алгоритма Goertzel и вычисляет степень на тональных частотах. Поскольку тональные частоты очень друг близко к другу (на расстоянии только в 3-4 Гц), длина блока ДПФ должна быть достаточно большой, чтобы обеспечить достаточно разрешения для анализа частоты. Однако задержка декодирования причины длин длинного блока. Например, длина блока 16 384 вызовет 2 секунды задержки, потому что декодер CTCSS действует на частоте дискретизации на 8 кГц. Это создает компромисс между задержкой эффективности и обработки обнаружения. Оптимальная длина блока может зависеть от качества передатчика и приемника, расстояния между передатчиком и приемником и другими факторами. Вы поощряетесь изменить длину блока в функции инициализации путем навигации к функции helperFRSReceiverConfig и изменения значения поля CTCSSDecodeBlockLength. Это позволит вам наблюдать компромисс и найти оптимальное значение для вашей пары передатчика/приемника.

Можно исследовать следующие функции и Системные объекты для деталей реализации физического уровня:

Ссылки