Этот пример показов, как использовать Системные объекты канала Релея и Райса с многолучевым распространением и их встроенную визуализацию, чтобы смоделировать канал с замираниями. Каналы Релея и Райса с замираниями являются полезными моделями явлений реального мира в беспроводной связи. Эти явления включают многолучевые эффекты рассеяния, дисперсию во времени и доплеровские сдвиги, которые возникают из-за относительного движения между передатчиком и приемником.
Обработка сигнала с использованием канала с замираниями включает следующие шаги:
Создайте системный object™ канала, который опишет канал, который вы хотите использовать. Объект канала является типом переменной MATLAB ®, которая содержит информацию о канале, такую как максимальный сдвиг Доплера.
При необходимости настройте свойства системного объекта, чтобы адаптировать его к вашим потребностям. Для примера можно изменить задержки пути или среднее увеличение пути.
Примените Системный объект канала к своему сигналу с помощью шагового метода, который генерирует случайные дискретные усиления пути и фильтрует входной сигнал.
Характеристики канала могут быть показаны со встроенной поддержкой визуализации системного объекта.
Следующие переменные управляют объектами канала Релея и Райса. По умолчанию канал моделируется как четыре пути с замираниями, каждый из которых представляет собой кластер многолучевых компонентов, принятых с одной и той же задержкой.
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
Системные объекты. Мы конфигурируем объекты, чтобы использовать их автономный случайный поток с заданным seed для генерации усиления пути.comm.RicianChannel
% 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
Системный объект замирающих каналов Райса моделирует распространение линии визирования в дополнение к диффузному многолучевому рассеянию. Это приводит к меньшему изменению величины усиления пути. Чтобы сравнить изменения между каналами Релея и Райса, мы используем
объект, чтобы просмотреть коэффициент усиления пути с течением времени. Обратите внимание, что величина колеблется приблизительно на 10 дБ области значений для канала Райса с замираниями (синяя кривая) по сравнению с 30-40 дБ для Канала с релеевским замиранием (желтая кривая). Для канала Райса с замираниями это изменение будет дополнительно уменьшаемо путем увеличения K-фактора (в настоящее время установлен на 10).timescope
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));
Теперь мы вернемся к нашим первоначальным четырехпутным Каналам с релеевским замиранием. Используем
Системный объект, чтобы показать влияние узкополосного замирания на сигнальное созвездие. Чтобы замедлить динамику канала в целях визуализации, мы уменьшаем максимальный доплеровский сдвиг до 5 Гц. По сравнению с входным сигналом канала QPSK можно наблюдать ослабление и вращение сигнала на выходе канала, а также некоторое искажение сигнала из-за небольшого количества ISI в принимаемом сигнале.comm.ConstellationDiagram
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