Получатель Портативной радиостанции FRS/GMRS

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

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

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

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

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

  • Радио RTL-SDR

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

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

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

Фон

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

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

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

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

  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. Это позволит вам наблюдать компромисс и найти оптимальное значение для вашей пары передатчика/получателя.

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

Ссылки