Многолучевой канал с замираниями

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

Обработка сигнала с использованием канала с замираниями включает следующие шаги:

  1. Создайте системный object™ канала, который опишет канал, который вы хотите использовать. Объект канала является типом переменной MATLAB ®, которая содержит информацию о канале, такую как максимальный сдвиг Доплера.

  2. При необходимости настройте свойства системного объекта, чтобы адаптировать его к вашим потребностям. Для примера можно изменить задержки пути или среднее увеличение пути.

  3. Примените Системный объект канала к своему сигналу с помощью шагового метода, который генерирует случайные дискретные усиления пути и фильтрует входной сигнал.

Характеристики канала могут быть показаны со встроенной поддержкой визуализации системного объекта.

Инициализация

Следующие переменные управляют объектами канала Релея и Райса. По умолчанию канал моделируется как четыре пути с замираниями, каждый из которых представляет собой кластер многолучевых компонентов, принятых с одной и той же задержкой.

sampleRate500kHz = 500e3; % Sample rate of 500K Hz
sampleRate20kHz  = 20e3; % Sample rate of 20K Hz
maxDopplerShift  = 200; % Maximum Doppler shift of diffuse components (Hz)
delayVector = (0:5:15)*1e-6; % Discrete delays of four-path channel (s)
gainVector  = [0 -3 -6 -9]; % Average path gains (dB)

Максимальный сдвиг Доплера вычисляется как v * f/c, где v - мобильная скорость, f - несущая частота, а c - скорость света. Для примера максимальный доплеровский сдвиг 200 Гц (как выше) соответствует мобильной скорости 65 миль/ч (30 м/с) и несущей частоте 2 ГГц.

По соглашению задержка первого пути обычно устанавливается на нуль. Для последующих путей задержка 1 микросекунда соответствует различию в длине пути на 300 м. В некоторых наружных многолучевых окружениях отраженные пути могут быть на несколько километров длиннее, чем самый короткий путь. С задержками пути, указанными выше, последний путь на 4,5 км длиннее, чем самый короткий путь, и, таким образом, приходит на 15 микросекунд позже.

Вместе задержки пути и усиления пути определяют средний профиль задержки канала. Обычно средний путь усиливает распад экспоненциально с задержкой (то есть значения дБ линейно распадаются), но конкретный профиль задержки зависит от окружения распространения. В профиле задержки, указанном выше, мы предполагаем уменьшение средней степени на 3 дБ на каждые 5 микросекунд задержки пути.

Следующие переменные управляют Системным объектом канала Райса. Доплеровский сдвиг зеркального компонента обычно меньше максимального доплеровского сдвига (выше) и зависит от направления перемещения подвижного элемента относительно направления зеркального компонента. Коэффициент K задает линейное отношение средней мощности приемника от зеркального компонента к отношению связанных диффузных компонентов.

KFactor = 10; % Linear ratio of specular power to diffuse power
specDopplerShift = 100; % Doppler shift of specular component (Hz)

Создание канальных Системных объектов

С параметрами, указанными выше, мы теперь можем создать comm.RayleighChannel и comm.RicianChannel Системные объекты. Мы конфигурируем объекты, чтобы использовать их автономный случайный поток с заданным seed для генерации усиления пути.

% Configure a Rayleigh channel object
rayChan = comm.RayleighChannel( ...
    'SampleRate',sampleRate500kHz, ...
    'PathDelays',delayVector, ...
    'AveragePathGains',gainVector, ...
    'MaximumDopplerShift',maxDopplerShift, ...
    'RandomStream','mt19937ar with seed', ...
    'Seed',10, ...
    'PathGainsOutputPort',true);

% Configure a Rician channel object
ricChan = comm.RicianChannel( ...
    'SampleRate',sampleRate500kHz, ...
    'PathDelays',delayVector, ...
    'AveragePathGains',gainVector, ...
    'KFactor',KFactor, ...
    'DirectPathDopplerShift',specDopplerShift, ...
    'MaximumDopplerShift',maxDopplerShift, ...
    'RandomStream','mt19937ar with seed', ...
    'Seed',100, ...
    'PathGainsOutputPort',true);

Модуляция и фильтрация в канале

Создайте comm.QPSKModulator Системный объект для модуляции данных канала, который был сгенерирован с помощью randi функция. В коде здесь 'система координат' относится к вектору информационных бит. Для этого примера используется смещение фазы pi/4.

qpskMod = comm.QPSKModulator('BitInput',true,'PhaseOffset',pi/4);

% Number of bits transmitted per frame is set to be 1000. For QPSK
% modulation, this corresponds to 500 symbols per frame.
bitsPerFrame = 1000;
msg = randi([0 1],bitsPerFrame,1);

% Modulate data for transmission over channel
modSignal = qpskMod(msg);

% Apply Rayleigh or Rician channel object on the modulated data
rayChan(modSignal);
ricChan(modSignal);

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

Системные объекты замирающих каналов имеют встроенную визуализацию, чтобы показать импульсную характеристику канала, частотную характеристику или Допплеровский спектр, когда объект запускается. Чтобы вызвать его, установите Visualization свойство к желаемому значению перед вызовом объекта. Отпустите канал Релея и Райса Системных объектов теперь, чтобы изменить их значения свойств.

release(rayChan);
release(ricChan);

Широкополосное или частотно-селективное замирание

Установка Visualization свойство к 'Impulse response' показывает полосно-ограниченную импульсную характеристику (желтые круги). Визуализация также показывает задержки и величины базовых усилений затухающего пути (розовых стембаров), сгруппированных вокруг пика импульсной характеристики. Обратите внимание, что коэффициент усиления пути не равен AveragePathGains значение свойства, потому что эффект Доплера заставляет усиления колебаться с течением времени.

Точно так же установите Visualization свойство к 'Frequency response' показывает частотную характеристику (преобразование ДПФ) импульсов. Можно также задать Visualization на 'Impulse and frequency responses' отображение импульсной и частотных характеристик один за другим.

Можно управлять процентом входных выборок, которые будут визуализированы путем изменения SamplesToDisplay свойство. В целом, чем меньше процент, тем быстрее запуски симуляция. Когда рисунок визуализации откроется, щелкните Playback кнопка и выключить опцию «Уменьшить обновления для улучшения эффективности» или «Уменьшить частоту графика для улучшения эффективности» для дальнейшего повышения точности отображения. Опция включена по умолчанию для более быстрой симуляции. Чтобы увидеть ответ канала для каждой выборки входа, снимите флажок с этой опции и установите SamplesToDisplay на '100%'.

rayChan.Visualization = 'Impulse and frequency responses';
rayChan.SamplesToDisplay = '100%';

% Display impulse and frequency responses for 2 frames
numFrames = 2;
for i = 1:numFrames
    % Create random data
    msg = randi([0 1],bitsPerFrame,1);
    % Modulate data
    modSignal = qpskMod(msg);
    % Filter data through channel and show channel responses
    rayChan(modSignal);
end

Как видим, частотная характеристика канала не является плоской и может иметь глубокие затухания на 500K Гц полосе пропускания. Поскольку уровень степени изменяется по ширине полосы пропускания сигнала, он упоминается как частотно-избирательное замирание.

Для той же спецификации канала теперь мы отображаем спектр Доплера для его первого дискретного пути, который является статистической характеристикой процесса затухания. Системный объект производит периодические измерения Допплеровского спектра (синие звезды). Со временем с большим количеством выборок, обработанных системным объектом, среднее значение этого измерения лучше аппроксимирует теоретический Допплеровский спектр (желтая кривая).

release(rayChan);
rayChan.Visualization = 'Doppler spectrum';

% Display Doppler spectrum from 5000 frame transmission
numFrames = 5000;
for i = 1:numFrames
    msg = randi([0 1],bitsPerFrame,1);
    modSignal = qpskMod(msg);
    rayChan(modSignal);
end

Узкополосное или частотно-плоское замирание

Когда ширина полосы слишком мала для сигнала, чтобы разрешить отдельные компоненты, частотная характеристика приблизительно плоская из-за минимальной временной дисперсии, вызванной многолучевым каналом. Этот вид многолучевого замирания часто упоминается как узкополосное замирание или частотно-плоское замирание.

Теперь мы уменьшаем пропускную способность сигнала с 500 кбит/с (250 км/с) до 20 кбит/с (10 км/с), поэтому размах задержки (15 микросекунд) канала намного меньше, чем период символа QPSK (100 микросекунд). Получившаяся импульсная характеристика имеет очень маленькую межсимвольную интерференцию (ISI), и частотная характеристика приблизительно плоская.

release(rayChan);
rayChan.Visualization = 'Impulse and frequency responses';
rayChan.SampleRate = sampleRate20kHz;
rayChan.SamplesToDisplay = '25%';  % Display one of every four samples

% Display impulse and frequency responses for 2 frames
numFrames = 2;
for i = 1:numFrames
    msg = randi([0 1],bitsPerFrame,1);
    modSignal = qpskMod(msg);
    rayChan(modSignal);
end

Чтобы упростить и ускорить моделирование, узкополосные замирающие каналы обычно моделируются как одноканальный замирающий канал. То есть многолучевая модель с замираниями переопределяет узкополосный канал с замираниями. Следующие настройки соответствуют узкополосному каналу с замираниями. Заметьте, что форма полосно-ограниченной импульсной характеристики плоская.

release(rayChan);
rayChan.PathDelays = 0;        % Single fading path with zero delay
rayChan.AveragePathGains = 0;  % Average path gain of 1 (0 dB)

for i = 1:numFrames % Display impulse and frequency responses for 2 frames
    msg = randi([0 1],bitsPerFrame,1);
    modSignal = qpskMod(msg);
    rayChan(modSignal);
end

Системный объект замирающих каналов Райса моделирует распространение линии визирования в дополнение к диффузному многолучевому рассеянию. Это приводит к меньшему изменению величины усиления пути. Чтобы сравнить изменения между каналами Релея и Райса, мы используем timescope объект, чтобы просмотреть коэффициент усиления пути с течением времени. Обратите внимание, что величина колеблется приблизительно на 10 дБ области значений для канала Райса с замираниями (синяя кривая) по сравнению с 30-40 дБ для Канала с релеевским замиранием (желтая кривая). Для канала Райса с замираниями это изменение будет дополнительно уменьшаемо путем увеличения K-фактора (в настоящее время установлен на 10).

release(rayChan);
rayChan.Visualization = 'Off'; % Turn off Rayliegh object visualization
ricChan.Visualization = 'Off'; % Turn off Rician object visualization

% Same sample rate and delay profile for the Rayleigh and Rician objects
ricChan.SampleRate = rayChan.SampleRate;
ricChan.PathDelays = rayChan.PathDelays;
ricChan.AveragePathGains = rayChan.AveragePathGains;

% Configure a Time Scope System object to show path gain magnitude
gainScope = timescope( ...
    'SampleRate',rayChan.SampleRate, ...
    'TimeSpanSource','Property',...
    'TimeSpan',bitsPerFrame/2/rayChan.SampleRate, ... % One frame span
    'Name','Multipath Gain', ...
    'ShowGrid',true, ...
    'YLimits',[-40 10], ...
    'YLabel','Gain (dB)');

% Compare the path gain outputs from both objects for one frame
msg = randi([0 1],bitsPerFrame,1);
modSignal = qpskMod(msg);
[~,rayPathGain] = rayChan(modSignal);
[~,ricPathGain] = ricChan(modSignal);
% Form the path gains as a two-channel input to the time scope
gainScope(10*log10(abs([rayPathGain,ricPathGain]).^2));

Затухание влияния канала на сигнальное созвездие

Теперь мы вернемся к нашим первоначальным четырехпутным Каналам с релеевским замиранием. Используем comm.ConstellationDiagram Системный объект, чтобы показать влияние узкополосного замирания на сигнальное созвездие. Чтобы замедлить динамику канала в целях визуализации, мы уменьшаем максимальный доплеровский сдвиг до 5 Гц. По сравнению с входным сигналом канала QPSK можно наблюдать ослабление и вращение сигнала на выходе канала, а также некоторое искажение сигнала из-за небольшого количества ISI в принимаемом сигнале.

clear hRicChan hMultipathGain;
release(rayChan);

rayChan.PathDelays = delayVector;
rayChan.AveragePathGains = gainVector;
rayChan.MaximumDopplerShift = 5;

% Configure a Constellation Diagram System object to show received signal
constDiag = comm.ConstellationDiagram( ...
    'Name','Received Signal After Rayleigh Fading');

numFrames = 16;

for n = 1:numFrames
    msg = randi([0 1],bitsPerFrame,1);
    modSignal = qpskMod(msg);
    rayChanOut = rayChan(modSignal);
    % Display constellation diagram for Rayleigh channel output
    constDiag(rayChanOut);
end

Когда мы увеличиваем полосу пропускания сигнала до 500 кбит/с (250 ksym/s), мы видим гораздо большее искажение в сигнальном созвездии. Это искажение является ISI, который приходит от временного рассеяния широкополосного сигнала. Диапазон задержки (15 микросекунд) канала теперь больше, чем период символа QPSK (4 микросекунды), поэтому результирующая полосно-ограниченная импульсная характеристика больше не приблизительно плоская.

release(rayChan);
release(constDiag);
rayChan.SampleRate = sampleRate500kHz;

for n = 1:numFrames
    msg = randi([0 1],bitsPerFrame,1);
    modSignal = qpskMod(msg);
    rayChanOut = rayChan(modSignal);
    constDiag(rayChanOut);
end