Широковещательный приемник FM

В этом примере показано, как создать FM-моно- или стерео-приемник с помощью MATLAB ® и Communications Toolbox™. Можно использовать или захваченные сигналы, или получить сигналы в режиме реального времени с помощью Радио RTL-SDR или Радио ADALM-PLUTO.

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

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

Для приема сигналов в режиме реального времени также необходимо одно из следующего оборудования:

Полный список поддерживаемых Communications Toolbox платформ SDR см. в разделах «Аппаратная поддержка MATLAB и Simulink для SDR» Программно определяемого радио (SDR).

Фон

FM-вещание использует частотную модуляцию (FM), чтобы обеспечить высокоточную передачу звука по широковещательным радиоканалам. Фильтры предварительного акцента и снятия акцента используются, чтобы уменьшить эффект шума на высокие звуковые частоты. Стереокодирование позволяет одновременно передавать как левый, так и правый аудиоканалы по одному и тому же FM-каналу [1].

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

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

  1. Длительность приема в секундах

  2. Источник сигнала (захваченные данные, радио RTL-SDR или радио ADALM-PLUTO)

  3. Частота 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. Этот пользовательский интерфейс показан на следующем рисунке

Избранная библиография

Для просмотра документации необходимо авторизоваться на сайте