Приемник FRS/GMRS Walkie-Talkie

В этом примере показано, как создать приемник раций с помощью MATLAB ® и Communications Toolbox™. Конкретным стандартом радиосвязи, приведенным в данном примере, является FRS/GMRS (Family Radio Service/General Mobile Radio Service) с CTCSS (система непрерывного кодирования тонов). Можно использовать имитированные сигналы, записанные сигналы или принятые сигналы от коммерческой рации с помощью пакета поддержки Communications Toolbox для Радио RTL-SDR.

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

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

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

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

  • Радио RTL-SDR

  • Рация

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

Полный список поддерживаемых Communications Toolbox платформ SDR см. в разделах «Аппаратная поддержка MATLAB и Simulink для SDR» Программно определяемого радио (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. Порог обнаружения для принимаемого сигнала

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

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

Следующий блок суммирует структуру кода приемника. Обработка состоит из четырех основных частей: Signal Source, Channel Selector, FM Demodulator и CTCSS.

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

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

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

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

  3. «Радио RTL-SDR»: радио RTL-SDR на 240e3 отсчетах/сек

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

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

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

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

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

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

CTCSS

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

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

Наконец, фильтр высоких частот с частотой отключения 260 Гц отфильтровывает тональные сигналы CTCSS, которые имеют максимальную частоту 250 Гц. Используйте audioDeviceWriter System 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 вычисляет ДПФ (дискретное преобразование Фурье) входящего сигнала с помощью алгоритма Гертцеля и вычисляет степень на тоновых частотах. Поскольку частоты тонов очень близки друг к другу (только 3-4 Гц с интервалом), длина блока DFT должна быть достаточно большой, чтобы обеспечить достаточное разрешение для частотного анализа. Однако длинные блоки вызывают задержку декодирования. Для примера, длина блока 16384 вызовет 2 секунды задержки, потому что декодер CTCSS работает с частотой частотой дискретизации 8 кГц. Это создает компромисс между эффективностью обнаружения и задержкой обработки. Оптимальная длина блока может зависеть от качества передатчика и приемника, расстояния между передатчиком и приемником и других факторов. Рекомендуется изменить длину блока в функции инициализации путем перехода к функции helperFRSReceiverConfig и изменения значения поля CTCSSDecodeBlockLength. Это позволит вам наблюдать компромисс и найти оптимальное значение для пары передатчик/получатель.

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

Ссылки