Этот пример показывает, как эффективно сгенерировать многодиапазонный сигнал, используя Communications Toolbox™.
Взрывной рост потребительского спроса на более высокие скорости передачи данных в мобильных приложениях приводит к более высоким скоростям передачи. Большинство современных стандартов беспроводной связи включают в себя метод увеличения пропускной способности данных путем объединения двух или более несущих в один канал данных. Этот метод называется агрегацией несущих в терминологии 5G и LTE и связыванием каналов в терминологии Wi-Fi ®. Этот рисунок иллюстрирует три различных типа агрегации несущих.
Этот пример демонстрирует один подход к модели агрегации несущих в симуляции основной полосы частот. Генерируются два сгенерированных модулированных сигналов - один является модулированным сигналом 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 кГц каждый. В внутриполосу несмежной агрегации два сигнала занимают несмежные полосы, как показано зазором между спектрами сигналов в Внутриполосу анализаторе несмежного спектра. Межполосное несмежное агрегирование может быть аналогично достигнуто соответствующими частотными сдвигами сигналов.
Этот пример иллюстрирует метод моделирования агрегации несущих, который используется большинством современных стандартов радиосвязи для повышения скорости передачи данных. Системный объект используется, чтобы инкапсулировать необходимую обработку интерполяции, сдвига частоты и объединения сигналов. Вы можете исследовать дальше различными способами:
Используйте сгенерированные модулированные сигналы с различными полосами пропускания. Как SignalAggregator
Системный объект требует, чтобы все входные сигналы имели одинаковую частоту дискретизации, повторный выбор одного или нескольких сигналов, чтобы привести все сгенерированные модулированные сигналы к той же скорости перед использованием SignalAggregator
Системный объект.
Агрегируйте более двух сгенерированные модулированные сигналы,
Используйте различные полосы агрегирования и несущие для моделирования межполосной несмежной агрегации.
Кроме того, исследуйте SignalAggregator
Системный объект для изучения и, возможно, изменения обработки, необходимой для агрегирования несущей. В 'Auto' InterpolationMode
, а SignalAggregator
Системный объект интерполирует входные сигналы, чтобы убедиться, что результирующая скорость дискретизации сигналов достаточна, чтобы не искажать содержимое частот исходных сигналов после того, как они сдвинуты, чтобы создать необходимую агрегацию несущих. Можно также интерполировать входные сигналы основной полосы частот к желаемой скорости перед использованием объекта SignalAggregator и использовать 'None' InterpolationMode
Системного объекта, который не будет выполнять интерполяцию.
В этом примере используется следующий системный объект: