В этом примере показано, как создать FM-моно- или стерео-приемник с помощью MATLAB ® и Communications Toolbox™. Можно использовать или захваченные сигналы, или получить сигналы в режиме реального времени с помощью Радио RTL-SDR или Радио ADALM-PLUTO.
Чтобы запустить этот пример с помощью записанных сигналов, вам нужно следующее программное обеспечение:
Для приема сигналов в режиме реального времени также необходимо одно из следующего оборудования:
Радио RTL-SDR и соответствующий программный пакет поддержки Communications Toolbox для радио RTL-SDR
Радио ADALM-PLUTO и соответствующий программный пакет Поддержки Communications Toolbox для радио ADALM-PLUTO
Полный список поддерживаемых Communications Toolbox платформ SDR см. в разделах «Аппаратная поддержка MATLAB и Simulink для SDR» Программно определяемого радио (SDR).
FM-вещание использует частотную модуляцию (FM), чтобы обеспечить высокоточную передачу звука по широковещательным радиоканалам. Фильтры предварительного акцента и снятия акцента используются, чтобы уменьшить эффект шума на высокие звуковые частоты. Стереокодирование позволяет одновременно передавать как левый, так и правый аудиоканалы по одному и тому же FM-каналу [1].
Тип FMReceiverExample
в Командном Окне MATLAB или нажмите кнопку «Открыть пример», чтобы открыть и запустить пример. Необходимо ввести следующую информацию:
Длительность приема в секундах
Источник сигнала (захваченные данные, радио RTL-SDR или радио ADALM-PLUTO)
Частота FM-канала
Пример воспроизводит полученный звук через динамики компьютера.
ПРИМЕЧАНИЕ. В этом примере используется центральная частота, которая находится вне заданного по умолчанию области значений настройки PlutoSDR. Щелкните configurePlutoRadio ('AD9364'), чтобы использовать радио ADALM-PLUTO вне квалифицированной области значений настройки.
FM Broadcast Demodulator Baseband System object™ преобразует входную частоту дискретизации 228 кГц в 45,6 кГц, частоту дискретизации для вашего хоста-компьютера аудио устройства. Согласно стандарту FM-вещания в Соединенных Штатах, временная константа lowpass деудаления устанавливается на 75 микросекунд. Этот пример обрабатывает принятые моно-сигналы. Демодулятор может также обрабатывать стереосигналы.
Для выполнения стереодекодирования объект FM Broadcast Demodulator Baseband использует пиковый фильтр, который выбирает пилот-тональный сигнал 19 кГц, из которого создается несущая 38 кГц. Используя полученный сигнал несущей, блок FM Broadcast Demodulator Baseband преобразует сигнал L-R, центрированный на частоте 38 кГц, в полосу основных частот. После этого сигналы L-R и L + R проходят через 75-микросекундный фильтр удаления акцента. Блок FM Broadcast Demodulator Baseband разделяет сигналы L и R и преобразует их в аудиосигнал 45,6 кГц.
Приемник запрашивает вход пользователя и инициализирует переменные. Затем он вызывает источник сигнала и FM широковещательный приемник в цикле. Цикл также отслеживает время радиосвязи, используя длительность системы координат и потерянные выборки, сообщенные источником сигнала.
Выход задержки источника сигнала является показателем того, когда выборки действительно были получены, и может использоваться, чтобы определить, насколько близко к реальному времени работает приемник. Значение задержки 1 и значение потерянных выборок 0 указывает, что система работает в реальном времени. Значение задержки, больше единицы, указывает, что приемник не смог обработать выборки в реальном времени. Задержка указывается в терминах количества систем координат. Это может быть между 1 и 128. Если задержка больше 128, то выборки теряются.
% Request user input from the command-line for application parameters userInput = helperFMUserInput; % Calculate FM system parameters based on the user input [fmRxParams,sigSrc] = helperFMConfig(userInput); % Create FM broadcast receiver object and configure based on user input fmBroadcastDemod = comm.FMBroadcastDemodulator(... 'SampleRate', fmRxParams.FrontEndSampleRate, ... 'FrequencyDeviation', fmRxParams.FrequencyDeviation, ... 'FilterTimeConstant', fmRxParams.FilterTimeConstant, ... 'AudioSampleRate', fmRxParams.AudioSampleRate, ... 'Stereo', false); % Create audio player player = audioDeviceWriter('SampleRate',fmRxParams.AudioSampleRate); % Initialize radio time radioTime = 0; % Main loop while radioTime < userInput.Duration % Receive baseband samples (Signal Source) if fmRxParams.isSourceRadio if fmRxParams.isSourcePlutoSDR rcv = sigSrc(); lost = 0; late = 1; else [rcv,~,lost,late] = sigSrc(); end else rcv = sigSrc(); lost = 0; late = 1; end % Demodulate FM broadcast signals and play the decoded audio audioSig = fmBroadcastDemod(rcv); player(audioSig); % Update radio time. If there were lost samples, add those too. radioTime = radioTime + fmRxParams.FrontEndFrameTime + ... double(lost)/fmRxParams.FrontEndSampleRate; end % Release the audio and the signal source release(sigSrc) release(fmBroadcastDemod) release(player)
Для дальнейшего изучения примера можно варьировать центральную частоту радио RTL-SDR или радио ADALM-PLUTO и слушать другие радиостанции.
Можно задать свойство Stereo объекта FM-демодулятора true, чтобы обработать сигналы в стерео-режиме и сравнить качество звука.
Для получения дополнительной информации о системных параметрах можно исследовать следующую функцию:
Можно дополнительно изучить FM-сигналы с помощью пользовательского интерфейса FMReceiverExampleApp. Это приложение позволяет вам выбрать источник сигнала и изменить центральную частоту радио RTL-SDR или радио ADALM-PLUTO. Чтобы запустить приложение, введите FMReceiverExampleApp в Командном окне MATLAB. Этот пользовательский интерфейс показан на следующем рисунке