В этом примере показано, как построить приемник рации с помощью MATLAB ® и Communications Toolbox™. Ниже приведен конкретный стандарт радиосвязи FRS/GMRS (Family Radio Service/General Mobile Radio Service) с CTCSS (системой непрерывной сигнализации с кодированием тональных сигналов). С помощью пакета поддержки Communications Toolbox Support Package for RTL-SDR Radio можно использовать смоделированные сигналы, захваченные сигналы или принятые сигналы с коммерческой рации.
Этот пример предназначен для работы со стандартами США для эксплуатации FRS/GMRS. Технические характеристики этих стандартов приведены ниже в справочном списке. Работа в других странах может работать, а может и не работать.
Для выполнения этого примера с использованием захваченных сигналов необходимо следующее программное обеспечение:
Для приема сигналов в режиме реального времени также необходимо следующее оборудование:
Радиоблок RTL-SDR
Рация
и следующее программное обеспечение
Полный список платформ SDR, поддерживаемых Communications Toolbox, см. в разделе «Поддержка аппаратного обеспечения MATLAB и Simulink для SDR» Программного радио (SDR).
Рации обеспечивают бесплатный способ связи на короткие расстояния. Хотя их популярность снизилась из-за роста сотовых телефонов, рации по-прежнему полезны, когда отсутствие приема или высокая поминутная плата препятствует использованию сотовых телефонов.
Современные рации работают по стандартам FRS/GMRS. Оба стандарта используют частотную модуляцию (ЧМ) на частоте 462 или 467 МГц, которая находится в диапазоне UHF (ультравысоких частот).
Напечатать FRSReceiverExample в окне команд MATLAB или нажмите кнопку «Открыть пример», чтобы открыть и запустить пример. Необходимо ввести следующую информацию:
Продолжительность приема в секундах
Источник сигнала (моделируемый сигнал, захваченный сигнал или радио RTL-SDR)
Номер канала (1-14)
Код CTCSS (1-38, 0 без фильтрации CTCSS)
Порог обнаружения для принятого сигнала
Пример воспроизведения полученного звука через динамики компьютера.
Следующая блок-схема суммирует структуру кода приемника. Обработка состоит из четырех основных частей: источник сигнала, селектор каналов, демодулятор FM и обработка CTCSS.

Источник сигнала
В этом примере можно использовать три источника сигнала:
«Моделируемый Сигнал»: Моделируемые FRS/GMRS сигнализируют в 240e3 образцы/секунда
«Захваченный сигнал»: эфирные сигналы, записанные в файл и исходящие из объекта чтения файлов основной полосы частот при 240e3 отсчетов/сек
«RTL-SDR Radio»: RTL-SDR radio at 240e3 выборок/сек
Если в качестве источника сигнала выбрано «RTL-SDR Radio», это приложение выполнит поиск радиоприемников RTL-SDR на компьютере и попросит выбрать один из них в качестве источника сигнала.
Селектор каналов
Приемник удаляет компонент постоянного тока и применяет переменный коэффициент усиления к принятому сигналу для получения приблизительно известного амплитудного сигнала с уменьшенными помехами. Затем приемник применяет фильтр разделения каналов нижних частот для уменьшения сигналов от соседних каналов. Зазор между соседними каналами составляет 25 кГц, что означает, что ширина полосы частот основной полосы частот составляет не более 12,5 кГц. Таким образом, мы выбираем частоту отсечки 10 кГц.
Затем селектор канала вычисляет среднюю мощность отфильтрованного сигнала. Если он превышает пороговое значение (значение по умолчанию равно 10%), селектор канала определяет, что принятый сигнал поступает из правильного канала, и разрешает прохождение сигнала. В случае внеполосного сигнала, хотя фильтр разделения каналов уменьшает его величину, он все еще модулируется ЧМ, и модулирующий сигнал будет присутствовать после ЧМ демодуляции. Для полного отклонения такого сигнала селектор канала выводит все нули.
Демодулятор FM
В этом примере используется система основной полосы частот демодулятора ЧМ object™ частота дискретизации которой и максимальное отклонение частоты установлены на 240 кГц и 2,5 кГц соответственно.
CTCSS
Во-первых, прореживающий фильтр преобразует частоту дискретизации от 240 кГц до 8 кГц. Эта частота является одной из собственных частот дискретизации выходного аудиоустройства компьютера. Затем декодер CTCSS вычисляет мощность на каждой частоте тонального сигнала CTCSS, используя алгоритм Гертцеля, и выводит код с наибольшей мощностью. Алгоритм Гертцеля обеспечивает эффективный способ вычисления частотных составляющих на заданных частотах, то есть частотах тонального кода, используемых FRS/GMRS.
Сценарий сравнивает оцененный полученный код с предварительно выбранным кодом. Если два кода совпадают, сигналы передаются в аудиоустройство. Когда предварительно выбранный код равен нулю, он указывает, что система подавления не используется, и блок принятия решения передает сигнал по каналу в аудиоустройство независимо от того, какой код используется.
Наконец, фильтр верхних частот с частотой отсечки 260 Гц отфильтровывает тональные сигналы CTCSS, которые имеют максимальную частоту 250 Гц. Используйте object™ AudioDeviceWriter System для воспроизведения полученных сигналов через динамики вашего компьютера. Если звук не слышен, выберите другое устройство с помощью свойства DeviceName объекта записи аудиоустройства audioPlayer.
Приемник запрашивает пользовательский ввод и инициализирует переменные. Затем он вызывает источник сигнала, селектор канала, демодулятор ЧМ и процессор 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 вычисляет DFT (дискретное преобразование Фурье) входящего сигнала с использованием алгоритма Гертцеля и вычисляет мощность на частотах тональных сигналов. Поскольку тональные частоты очень близки друг к другу (с интервалом только 3-4 Гц), длина блока DFT должна быть достаточно большой, чтобы обеспечить достаточное разрешение для анализа частоты. Однако длинные длины блоков вызывают задержку декодирования. Например, длина блока 16384 вызовет 2 секунды задержки, поскольку декодер CTCSS работает с частотой дискретизации 8 кГц. Это создает компромисс между производительностью обнаружения и задержкой обработки. Оптимальная длина блока может зависеть от качества передатчика и приемника, расстояния между передатчиком и приемником и других факторов. Рекомендуется изменить длину блока в функции инициализации путем перехода к функции helperFRSReceiverConfig и изменения значения поля CTCSSDecoBlockLength. Это позволит вам увидеть компромисс и найти оптимальное значение для вашей пары передатчик/приемник.
Для получения подробной информации о реализации физического уровня можно изучить следующие функции и системные объекты: