Генерация многополосного сигнала

Этот пример показывает, как эффективно сгенерировать многодиапазонный сигнал, используя Communications Toolbox™.

Введение

Взрывной рост потребительского спроса на более высокие скорости передачи данных в мобильных приложениях приводит к более высоким скоростям передачи. Большинство современных стандартов беспроводной связи включают в себя метод увеличения пропускной способности данных путем объединения двух или более несущих в один канал данных. Этот метод называется агрегацией несущих в терминологии 5G и LTE и связыванием каналов в терминологии Wi-Fi ®. Этот рисунок иллюстрирует три различных типа агрегации несущих.

Setup системы

Этот пример демонстрирует один подход к модели агрегации несущих в симуляции основной полосы частот. Генерируются два сгенерированных модулированных сигналов - один является модулированным сигналом QPSK, а другой является модулированным сигналом GMSK. Каждый сигнал занимает 60 кГц полосы пропускания.

A SignalAggregator Системная object™ выполняет задачи, необходимые для агрегирования поставщика услуг. Если частота дискретизации входных сигналов недостаточно высока, содержимое будет искажаться, когда исходные сигналы сдвинуты по частоте, чтобы создать желаемую совокупность несущих. Установка InterpolationMode свойство к 'Auto' конфигурирует объект, чтобы интерполировать два сигнала и убедиться, что результирующая частота выборки сигнала достаточно высока, чтобы избежать сглаживания. The info метод системного объекта показывает частоту дискретизации выходного сигнала. После интерполяции объект применяет указанные частотные сдвиги к сигналам и объединяет их в один сигнал. Этот блок иллюстрирует SignalAggregator обработка:

Системная симуляция

% Number of simulation iterations
nIter = 10;
% Modulation order (QPSK modulation)
M = 4;
% Sample rates
Fs1 = 60e3;
Fs2 = 240e3;
Fs3 = 360e3;

qpskTxFilter = comm.RaisedCosineTransmitFilter('RolloffFactor', 0.3, ...
    'OutputSamplesPerSymbol', 2);

gmskMod = comm.GMSKModulator('BitInput', true', 'SamplesPerSymbol', 2);

% Frequency offset for intra-band contiguous aggregation
sigCombinerCB = SignalAggregator('InterpolationMode', 'Auto', ...
    'FrequencyOffset', [30e3, 90e3], 'SampleRate', Fs1);

% Frequency offset for intra-band non contiguous aggregation
sigCombinerNCB = SignalAggregator('InterpolationMode', 'Auto', ...
    'FrequencyOffset', [30e3, 150e3], 'SampleRate', Fs1);

% Scale factor for scope position
scopeSF = 0.7;
spectrumBB = dsp.SpectrumAnalyzer('Name', 'Baseband Signals', ...
    'NumInputPorts', 2, ...
    'SampleRate', 60e3, 'Method', 'Filter bank', ...
    'AveragingMethod', 'Exponential', 'ShowLegend', true, ...
    'ChannelNames', {'QPSK Signal', 'GMSK Signal'});
spectrumBB.Position = scopeSF * spectrumBB.Position;
spectrumBB.Position(1) = spectrumBB.Position(1) - ...
    spectrumBB.Position(3);

spectrumCB = dsp.SpectrumAnalyzer('Name', 'Intra-Band Contiguous', ...
    'NumInputPorts', 1, ...
    'SampleRate', Fs2, 'Method', 'Filter bank', 'AveragingMethod', 'Exponential');
spectrumCB.Position = scopeSF * spectrumCB.Position;

spectrumNCB = dsp.SpectrumAnalyzer('Name', 'Intra-Band Non-Contiguous', ...
    'NumInputPorts', 1, ...
    'SampleRate', Fs3, 'Method', 'Filter bank', 'AveragingMethod', 'Exponential');
spectrumNCB.Position = scopeSF * spectrumNCB.Position;
spectrumNCB.Position(1) = spectrumNCB.Position(1) + ...
    spectrumNCB.Position(3);

for k=1:nIter

    % Generate QPSK signal
    data = randi([0, M-1], 200, 1);
    modSig = pskmod(data, M, pi/4, 'gray');
    qpskSignal = qpskTxFilter(modSig);

    % Generate GMSK signal
    data = randi([0, 1], 200, 1);
    gmskSignal = gmskMod(data);

    % Visualize the two signals
    spectrumBB(qpskSignal, gmskSignal);

    % Upsample, frequency shift and combine the two signals to model
    % intra-band contiguous carrier aggregation
    combinedSignal = sigCombinerCB([qpskSignal, gmskSignal]);

    % Visualize the resulting signal
    spectrumCB(combinedSignal);

    % Upsample, frequency shift and combine the two signals to model
    % intra-band non contiguous or inter-band non contiguous carrier
    % aggregation
    combinedSignal = sigCombinerNCB([qpskSignal, gmskSignal]);

    % Visualize the resulting signal
    spectrumNCB(combinedSignal);
end

release(spectrumBB);
release(spectrumCB);
release(spectrumNCB);

Визуализация

Внутриполосная смежная агрегация приводит к сигналу, который имеет два исходных сигнала, каждый шириной 60 кГц, занимая две смежные полосы частотой 60 кГц каждый. В внутриполосу несмежной агрегации два сигнала занимают несмежные полосы, как показано зазором между спектрами сигналов в Внутриполосу анализаторе несмежного спектра. Межполосное несмежное агрегирование может быть аналогично достигнуто соответствующими частотными сдвигами сигналов.

Резюме и дальнейшие исследования

Этот пример иллюстрирует метод моделирования агрегации несущих, который используется большинством современных стандартов радиосвязи для повышения скорости передачи данных. Системный объект используется, чтобы инкапсулировать необходимую обработку интерполяции, сдвига частоты и объединения сигналов. Вы можете исследовать дальше различными способами:

  1. Используйте сгенерированные модулированные сигналы с различными полосами пропускания. Как SignalAggregator Системный объект требует, чтобы все входные сигналы имели одинаковую частоту дискретизации, повторный выбор одного или нескольких сигналов, чтобы привести все сгенерированные модулированные сигналы к той же скорости перед использованием SignalAggregator Системный объект.

  2. Агрегируйте более двух сгенерированные модулированные сигналы,

  3. Используйте различные полосы агрегирования и несущие для моделирования межполосной несмежной агрегации.

Кроме того, исследуйте SignalAggregator Системный объект для изучения и, возможно, изменения обработки, необходимой для агрегирования несущей. В 'Auto' InterpolationMode, а SignalAggregator Системный объект интерполирует входные сигналы, чтобы убедиться, что результирующая скорость дискретизации сигналов достаточна, чтобы не искажать содержимое частот исходных сигналов после того, как они сдвинуты, чтобы создать необходимую агрегацию несущих. Можно также интерполировать входные сигналы основной полосы частот к желаемой скорости перед использованием объекта SignalAggregator и использовать 'None' InterpolationMode Системного объекта, который не будет выполнять интерполяцию.

Приложение

В этом примере используется следующий системный объект: