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

В этом примере показан один подход к агрегированию несущих в модели при моделировании основной полосы частот. Генерируются два сигнала основной полосы частот - один является QPSK-модулированным сигналом, а другой - GMSK-модулированным сигналом. Каждый сигнал занимает 60 кГц полосы пропускания.
A SignalAggregator Система object™ выполняет задачи, необходимые для агрегирования операторов связи. Если частота дискретизации входных сигналов недостаточно высока, частотное содержание будет искажено, когда исходные сигналы сдвинуты по частоте для получения желаемой агрегации несущих. Установка InterpolationMode свойство для 'Auto' настраивает объект для интерполяции двух сигналов и гарантирует, что результирующая частота дискретизации сигнала достаточно высока, чтобы избежать наложения. info метод объекта System показывает частоту дискретизации выходного сигнала. После интерполяции объект применяет к сигналам заданные сдвиги частоты и объединяет их в один сигнал. Эта блок-схема иллюстрирует 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 кГц каждый. При внутриполосной несмежной агрегации два сигнала занимают несмежные полосы, как показано промежутком между спектрами сигналов в анализаторе внутриполосной несмежной спектра. Межполосная несмежная агрегация может быть аналогичным образом достигнута с помощью соответствующих сдвигов частоты сигналов.
Этот пример иллюстрирует способ моделирования агрегирования несущих, который используется большинством современных стандартов беспроводной связи для увеличения скоростей передачи данных. Системный объект используется для инкапсуляции необходимой обработки интерполяции, сдвига частоты и объединения сигналов. Вы можете исследовать далее различными способами:
Используйте сигналы основной полосы частот с различными полосами пропускания. Как SignalAggregator Объект системы требует, чтобы все входные сигналы имели одинаковую частоту дискретизации, повторную выборку одного или нескольких сигналов для приведения всех сигналов основной полосы частот к одинаковой скорости перед использованием SignalAggregator Системный объект.
Объединение более двух сигналов основной полосы,
Используйте различные полосы агрегации и несущие для моделирования межполосной несмежной агрегации.
Кроме того, изучите SignalAggregator Системный объект для изучения и возможного изменения обработки, необходимой для агрегирования несущих. В 'Auto' InterpolationMode, SignalAggregator Объект системы интерполирует входные сигналы, чтобы гарантировать, что результирующая частота дискретизации сигналов достаточна для того, чтобы не искажать частотное содержание исходных сигналов после того, как они сдвинуты по частоте для получения требуемой агрегации несущих. Можно также интерполировать входные сигналы основной полосы частот в желаемую скорость перед использованием объекта SignalAggregator и использовать 'None' InterpolationMode объекта System, который не будет выполнять интерполяцию.
В этом примере используется следующий объект System: