В этом примере показано, как создать получатель портативной радиостанции с помощью 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 или щелкните по ссылке, чтобы запустить пример. Необходимо ввести следующую информацию, когда вы запускаете пример:
Длительность приема в секундах
Источник сигнала (симулированный сигнал, записанный сигнал или радио RTL-SDR)
Номер канала (1-14)
Код CTCSS (1-38, 0 никаких CTCSS, фильтрующий)
Порог обнаружения для полученного сигнала
Пример проигрывает полученное аудио по динамикам вашего компьютера.
Следующая блок-схема обобщает структуру получателя кода. Обработка имеет четыре основных части: Источник Сигнала, Селектор Канала, Демодулятор FM и обработка CTCSS.
Источник сигнала
Этот пример может использовать три источника сигнала:
''Симулированный Сигнал'': Симулированные FRS/GMRS сигнализируют в 240e3 выборки/секунда
''Записанный сигнал'': Беспроводные сигналы, записанные в файл и полученные из основополосного средства чтения файлов, возражают в 240e3 выборки/секунда
''Радио 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. Это позволит вам наблюдать компромисс и найти оптимальное значение для вашей пары передатчика/получателя.
Можно исследовать следующие функции и Системные объекты для деталей реализации физического уровня: