Используя Communications Toolbox™ можно реализовать замирающие каналы с помощью объектов или блоков. Каналы Релея и Райса с замираниями являются полезными моделями явлений реального мира в беспроводной связи. Эти явления включают многолучевые эффекты рассеяния, дисперсию во времени и доплеровские сдвиги, которые возникают из-за относительного движения между передатчиком и приемником. В этом разделе дается краткий обзор замирающих каналов и описывается, как их реализовать с помощью тулбокса.
Этот рисунок изображает прямые и основные отраженные пути между стационарным радиопередатчиком и движущимся приемником. Закрашенные формы представляют отражатели, такие как создания.
Основные пути приводят к поступлению задержанных версий сигнала в приемник. В сложение радиосигнал подвергается рассеянию на локальной шкале для каждого основного пути. Такое локальное рассеяние обычно является результатом отражений от объектов вблизи подвижной станции. Эти нерешаемые компоненты объединяются в приемник и вызывают явление, известное как многолучевое замирание. Из-за этого явления каждый крупный путь ведет себя как дискретный затухающий путь. Обычно процесс затухания характеризуется распределением Релея для пути без линии видимости и распределением Райса для пути линии видимости.
Относительное движение между передатчиком и приемником вызывает доплеровские сдвиги. Локальное рассеяние обычно происходит со многих углов вокруг мобильного устройства. Этот сценарий вызывает область значений доплеровских сдвигов, известных как доплеровский спектр. Максимальный сдвиг Доплера соответствует локальным компонентам рассеяния, чье направление в точности противостоит траектории мобильного устройства.
Фильтр канала применяет коэффициент усиления пути к входному сигналу, Signal in
. Коэффициент усиления пути конфигурируется на основе настроек, выбранных в замирающем объекте канала или блоке.
Эти блоки и объекты позволяют вам смоделировать SISO или MIMO каналы с замираниями.
Инструмент | SISO | MIMO |
---|---|---|
MATLAB® | ||
Simulink® |
Модель канала основной полосы для сценариев многолучевого распространения, которые вы реализуете, используя объекты, включает:
N дискретные пути с замираниями. Каждый путь имеет свою собственную задержку и средний коэффициент усиления степени. Канал, для которого N = 1, называется частотно-плоским каналом с замираниями. Канал, для которого N > 1 ощущается как частотно-селективный канал с замираниями сигналом достаточно широкой полосы пропускания.
Модель Релея или Райса для каждого пути.
Моделирование пути канала по умолчанию с использованием Допплеровского спектра Джейкса с максимальным доплеровским сдвигом, который может быть задан. Другие типы доплеровских спектров (одинаковые или разные для всех путей) включают: плоский, ограниченный Джейкс, асимметричный Джейкс, Гауссов, би-Гауссов, округлый и колокольчик.
Если максимальный сдвиг Доплера установлен в 0 или опущен во время конструкции объекта канала, то объект моделирует канал как статический. Для этого строения замирание не развивается со временем, и заданный доплеровский спектр не влияет на процесс замирания.
Некоторая дополнительная информация о типичных значениях задержек и коэффициентов усиления содержится в разделе «Выбор реалистичных значений свойств канала».
Библиотека блоков Channels включает блоки MIMO и SISO с замираниями, которые могут моделировать явления реального мира в мобильной связи. Эти явления включают многолучевые эффекты рассеяния, в дополнение к доплеровским сдвигам, которые возникают из-за относительного движения между передатчиком и приемником.
Совет
Чтобы смоделировать канал, который включает как затухание, так и аддитивный белый Гауссов шум, используйте затухающий блок канала, за которым следует блок AWGN Channel.
Блоки MIMO Fading Channel и SISO Fading Channel могут быть настроены на моделирование распределений Релея или Райса с замираниями канала. Исходя из типа пути сигнала, выберите используемое распределение замираний.
Путь сигнала | Затухание распределения |
---|---|
Прямой путь визирования от передатчика до приемника | Rician |
Один или несколько основных отраженных путей от передатчика к приемнику | Rayleigh |
Можно использовать один образец затухающего блока канала, настроенного для распределения Релеевского замирания, чтобы смоделировать несколько основных отраженных путей одновременно.
Выбор соответствующих параметров блоков для вашей ситуации очень важен. Для получения дополнительной информации см. «Выбор значений реалистичных свойств канала» и MIMO Fading Channel и SISO Fading Channel страниц с описанием блоков.
Просмотреть характеристики замирающего канала можно с помощью инструментов визуализации канала. Для получения дополнительной информации см. раздел «Визуализация канала».
Коммуникационная система, включающая канал с замираниями, обычно требует компонентов, которые компенсируют ответ с замираниями. Типичные подходы к компенсации затухания включают:
Дифференциальная модуляция или одноконтактный эквалайзер помогает компенсировать частотно-плоское затухание канала. Для получения информации о реализации дифференциальной модуляции смотрите M-DPSK Modulator Baseband блочной страницы с описанием.
Эквалайзер с несколькими отводами помогает компенсировать частотно-избирательный канал с замираниями. Смотрите эквализация для получения дополнительной информации.
Пример Communications Link with Adaptive Equalization иллюстрирует, почему необходима компенсация затухающего канала.
Симуляторы многолучевых каналов Релея и Райса в Communications Toolbox используют ограниченную полосу дискретных многолучевых каналов модели раздела 9.1.3.5.2 в [1]. Эта реализация принимает, что профиль степени задержки и Допплеровский спектр канала являются разделяемыми [1]. Многолучевой канал с замираниями поэтому моделируется как линейный фильтр с конечной импульсной характеристикой (КИХ). Давайте обозначает набор выборок на входе в канал. Затем выборки на выходе канала связаны с через:
где - набор весов отводов, заданных:
В уравнениях:
- входной период дискретизации в канал.
, где , - набор задержек пути. K - общее количество путей в многолучевом канале с замираниями.
, где , - набор комплексных путей коэффициентов усиления многолучевого канала с замираниями. Эти усиления пути являются некоррелированными друг с другом.
и выбраны так, чтобы маленькая, когда n меньше, чем или больше, чем .
Два метода, фильтрованный Гауссов шум и сумма синусоидов, используются, чтобы сгенерировать набор комплексных усилений пути, .
Каждый процесс усиления пути генерируется следующими шагами:
Метод фильтрации Гауссова шума
Комплексный некоррелированный (белый) Гауссов процесс с нулевым средним и единичным отклонением генерируется за дискретное время.
Комплексный Гауссов процесс фильтруется Доплеровским фильтром с частотной характеристикой , где обозначает желаемый спектр доплеровской степени.
Отфильтрованный комплексный Гауссов процесс интерполирован так, что его период дискретизации согласован с периодом дискретизации входного сигнала. Используется комбинация линейной и полифазной интерполяции.
Метод суммы синусоидов
Взаимно некоррелированные формы волны Релеевского замирания генерируются с помощью метода, описанного в [2], где i = 1 соответствует синфазному компоненту, а i = 2 соответствует квадратурному компоненту.
Где
Nk задает количество синусоидов, используемых для моделирования одного пути.
является дискретной доплеровской частотой и вычисляется для каждого синусоидального компонента в одном пути.
- фаза n-го компонента и представляет собой i.i.d. случайная переменная, имеющая равномерное распределение по интервалу .
t - время затухания процесса.
При моделировании допплеровского спектра Джейкса дискретные доплеровские частоты, , с максимальным сдвигом f max заданы как
где
Чтобы продвинуть процесс затухания во времени, вводится начальный параметр времени, t init. Затухающие формы волны становятся
Когда t init = 0, процесс затухания начинается в начальный момент времени. Положительное значение init t совершенствует процесс затухания относительно начального момента времени, сохраняя при этом непрерывность.
Выборки с замираниями канала генерируются с помощью алгоритма GMEDS1 [2].
Вычисление комплексных коэффициентов
Комплексный процесс, полученный из любого метода, , масштабируется, чтобы получить правильный средний коэффициент усиления пути. В случае канала Релея процесс затухания получают как:
где
В случае канала Райса процесс затухания получают как:
где - коэффициент Райса K k-го пути , - доплеровский сдвиг составляющей линии видимости k-го пути (в Гц), и - начальная фаза составляющей линии визирования k-го пути (в рад).
На входе в модель многолучевого канала с ограниченной полосой пропускания переданные символы должны быть переизбраны в множитель, по меньшей мере равный коэффициенту расширения полосы пропускания, введенному формированием импульсов. Для пример, если используется формирование синусоидального импульса, для которого полоса пропускания импульсного сигнала равна скорости символа, то коэффициент расширения полосы равен 1, и на входе в канал требуется по меньшей мере одна выборка на символ. Если используется фильтр приподнятого косинуса (RC) с коэффициентом более 1, для которого полоса пропускания импульсного сигнала равна удвоенной скорости символа, то коэффициент расширения полосы пропускания равен 2, и на входе в канал требуется по меньшей мере две выборки на символ.
Фильтр канала реализует полосовой фильтр с дробной задержкой (FD) конечной импульсной характеристикой (КИХ) с длиной 16 коэффициентов для каждой дробной задержки кандидата в 0, 0,02, 0,04,..., 0,98.
Каждый дискретный путь округлен до ближайшей дробной задержки кандидата, поэтому предел ошибки задержки составляет 1% от шага расчета. Чтобы достичь групповой задержки полосы пропускания, превышающей 80%, и величины полосы пропускания, превышающей 90%, алгоритм выбирает оптимальные значения коэффициентов конечной импульсной характеристики для каждой дробной задержки, удовлетворяя при этом следующим критериям:
Пульсация групповой задержки ≤ 10%
Величина ≤ 2 дБ
Ослабление полосы пропускания величины = 3 дБ
Графики показывают полосы пропускания, которые удовлетворяют критериям проекта для пульсации задержки группы, пульсации величины и ослабления полосы пропускания величины.
[1] Jeruchim, M. C., Balaban, P. and Shanmugan, K. S., Simulation of Communication Systems, Second Edition, New York, Kluwer Academic/Plenum, 2000.
[2] Pätzold, Matthias, Cheng-Xiang Wang, and Bjorn Olav Hogstand. «Два новых метода на основе суммы синусоидов для эффективной генерации нескольких некоррелированных Релеевских замираний волн». Транзакции IEEE по беспроводной связи. Том 8, № 6, 2009, стр. 3122-3131.
Communications Toolbox моделирует канал с замираниями как линейный конечная импульсная характеристика. Фильтрация сигнала с использованием канала с замираниями включает в себя следующие шаги:
Создайте объект канала, который опишет канал, который вы хотите использовать. Объект канала является типом переменного MATLAB, которая содержит информацию о канале, такую как максимальный сдвиг Доплера.
При необходимости настройте свойства объекта канала, чтобы адаптировать его к вашим потребностям. Для примера можно изменить задержки пути или среднее увеличение пути.
Примените объект канала к своему сигналу, используя вызов объекта.
В этом разделе описывается, как определять, просматривать и управлять объектами канала. Темы:
Чтобы создать затухающий объект канала, подходящий для ситуации моделирования, выберите один из этих системных объектов.
Функция | Объект | Моделируемая ситуация |
---|---|---|
Канал с релеевским замиранием объект | Один или несколько основных отраженных путей | |
Объект канала с замираниями Райса | Один прямой путь видимости, возможно, объединенный с одним или несколькими основными отраженными путями |
Для примера эта команда создает объект канала, представляющий Каналу с релеевским замиранием, который действует на сигнал, дискретизированный со скоростью 100000 Гц. Максимальный доплеровский сдвиг канала составляет 130 Гц.
rayChan1 = comm.RayleighChannel('SampleRate',1e5,... 'MaximumDopplerShift',130); % Rayleigh fading channel object
Чтобы узнать, как вызвать rayChan1
объект канала с замираниями для фильтрации переданного сигнала через канал, см. Использование каналов с замираниями.
Можно также создать другой объект путем дублирования существующего объекта и, при необходимости, настроить свойства нового объекта. Чтобы дублировать объект, всегда используйте clone
функция, такая как:
rayChan2 = clone(rayChan1); % Copy rayChan1 to create an independent rayChan2.
вместо rayChan2 = rayChan1
. clone
команда создает копию rayChan1
который не зависит от rayChan1
. Напротив, команда rayChan2 = rayChan1
создает rayChan2
как просто ссылка на rayChan1
, так что rayChan1
и rayChan2
всегда имеют неразличимое содержимое.
Объект канала имеет многочисленные свойства, которые записывают информацию о модели канала, о состоянии канала, который уже фильтровал сигнал, и о операции канала на будущем сигнале.
Просмотреть свойства можно следующими способами:
Чтобы просмотреть все свойства объекта канала, введите имя объекта в Командном окне.
Можно просмотреть свойство объекта канала или присвоить значение переменной, введя имя объекта, за которым следует точка (точка), за которой следует имя свойства.
Можно изменить свойства, доступные для записи, объекта канала следующими способами:
Чтобы изменить значение по умолчанию свойства объекта канала, введите желаемое значение в синтаксис создания объекта.
Чтобы изменить значение записываемого свойства объекта канала, выполните оператор назначения, который использует запись через точку на объекте канала. Более конкретно, запись через точку означает выражение, которое состоит из имени объекта, за которым следует точка, за которой следует имя свойства.
Отображение свойств объекта Релейского канала
Создайте объект канала Релея. Отобразите объект, чтобы показать свойства, инициализированные по умолчанию, и те, которые заданы при создании объекта. Ввод rayChan
отображает все свойства объекта канала. Некоторые значения свойств были назначены при создании объекта, в то время как другие свойства имеют значения по умолчанию. Для получения дополнительной информации о конкретных свойствах канала смотрите страницу с описанием для comm.RayleighChannel
объект.
rayChan = comm.RayleighChannel('SampleRate',1e5,'MaximumDopplerShift',130); rayChan % View all the properties
rayChan = comm.RayleighChannel with properties: SampleRate: 100000 PathDelays: 0 AveragePathGains: 0 NormalizePathGains: true MaximumDopplerShift: 130 DopplerSpectrum: [1x1 struct] Show all properties
g = rayChan.AveragePathGains % Retrieve the AveragePathGains property of rayChan
g = 0
Настройка свойств объекта канала Райса
Объект канала с замираниями Райса имеет дополнительное свойство, которое не появляется для объекта канала с релеевским замиранием, а именно скаляр KFactor
свойство. Для получения дополнительной информации о свойствах канала Райса смотрите страницу с описанием для comm.RicianChannel
объект.
Изменение свойств объекта канала Райса
Создайте объект канала Райса. Настройка по умолчанию для Visualization
свойство 'Off'
. Изменение настройки по умолчанию на 'Impulse response'
генерирует график импульсной характеристики выходного сигнала при вызове объекта. Выходные выходы отображают подмножество всех свойств объекта канала. Выберите all properties
чтобы увидеть полный набор свойств для ricChan
.
ricChan= comm.RicianChannel; % Create object ricChan.Visualization = 'Impulse response' % Enables the impulse response channel visualization
ricChan = comm.RicianChannel with properties: SampleRate: 1 PathDelays: 0 AveragePathGains: 0 NormalizePathGains: true KFactor: 3 DirectPathDopplerShift: 0 DirectPathInitialPhase: 0 MaximumDopplerShift: 1.0000e-03 DopplerSpectrum: [1x1 struct] Show all properties
Некоторые свойства объекта канала связаны друг с другом таким образом, что, когда значение одного свойства изменяется, значение другого свойства должно изменяться некоторым соответствующим образом, чтобы сохранить объект канала согласованным. Для примера, если вы измените длину вектора PathDelays
, затем значение AveragePathGains
должен измениться так, чтобы длина его вектора равнялась длине нового значения PathDelays
. Это потому, что длина каждого из двух векторов равняется количеству дискретных путей канала. Для получения дополнительной информации о связанных свойствах и примере смотрите comm.RayleighChannel
или comm.RicianChannel
.
Доплеровский спектр объекта канала задается его DopplerSpectrum
свойство. Значение этого свойства должно быть либо:
Структура допплеровского спектра. В этом случае тот же Допплеровский спектр применяется к каждому пути объекта канала.
A массива ячеек структур доплеровского спектра той же длины, что и PathDelays
свойство вектора. В этом случае Доплеровский спектр каждого пути задается соответствующей структурой Доплеровского спектра в векторе.
Когда длина вектора PathDelays
свойство увеличено, длина DopplerSpectrum
автоматически увеличивается, чтобы соответствовать длине PathDelays
, путем добавления структур допплеровского спектра Джейкса.
Если длина PathDelays
уменьшается векторное свойство, длина DopplerSpectrum
автоматически уменьшается, чтобы соответствовать длине PathDelays
, путем удаления последних структур Допплеровского спектра.
Структура Доплеровского спектра содержит свойства, используемые для характеристики Доплеровского спектра, но максимальный Доплеровский сдвиг является свойством объекта канала. В этом разделе описывается, как создать и манипулировать структурами Допплеровского спектра, и как назначить их DopplerSpectrum
свойство объектов канала.
Чтобы создать структуры Допплеровского спектра, используйте doppler
функция. Единственная цель doppler
функция состоит в том, чтобы создать структуры Допплеровского спектра, используемые для определения значения DopplerSpectrum
свойство объектов канала. Выберите один из следующих вариантов:
doppler('Jakes')
doppler('Flat')
doppler('Rounded', ...)
doppler('Bell', ...)
doppler('Asymmetric Jakes', ...)
doppler('Restricted Jakes', ...)
doppler('Gaussian', ...)
doppler('BiGaussian', ...)
Например, Гауссов спектр с нормированным (по максимальному доплеровскому сдвигу канала) стандартным отклонением 0,1, может быть создан как:
dopp1 = doppler('Gaussian',0.1);
Примечание
При создании структуры Допплеровского спектра примите во внимание следующие зависимости:
Если вы присвоите одну структуру Допплеровского спектра DopplerSpectrum
все пути имеют одинаковый заданный доплеровский спектр.
Если на FadingTechnique
свойство 'Sum of sinusoids'
, DopplerSpectrum
должен быть doppler('Jakes')
;
Если вы присвоите массив ячеек строк с различными структурами Допплеровского спектра DopplerSpectrum
каждый путь имеет Допплеровский спектр, заданный соответствующей структурой в массиве ячеек. В этом случае длина DopplerSpectrum
должно быть равно длине PathDelays
.
Чтобы сгенерировать код С, задайте DopplerSpectrum
в одну структуру Допплеровского спектра.
Создайте структуру Доплеровского спектра путем определения типа Доплеровского спектра как 'Rounded'
, затем измените настройки полиномиального типа
Создается и отображается округлая структура Допплеровского спектра с свойствами по умолчанию, и третий элемент Polynomial
поле изменено.
doppRound = doppler('Rounded')
doppRound = struct with fields:
SpectrumType: 'Rounded'
Polynomial: [1 -1.7200 0.7850]
Скорректируйте третий коэффициент полинома.
doppRound.Polynomial(3) = 0.825
doppRound = struct with fields:
SpectrumType: 'Rounded'
Polynomial: [1 -1.7200 0.8250]
Следует иметь в виду, что возможно модифицировать структуру допплеровского спектра до недопустимого строения. Валидация настроек структуры Допплеровского спектра выполняется, когда структура используется объектом замирающего канала. The doppRound
структура спектра, заданная выше, действительна.
ricianCh = comm.RicianChannel('DopplerSpectrum',doppRound)
ricianCh = comm.RicianChannel with properties: SampleRate: 1 PathDelays: 0 AveragePathGains: 0 NormalizePathGains: true KFactor: 3 DirectPathDopplerShift: 0 DirectPathInitialPhase: 0 MaximumDopplerShift: 1.0000e-03 DopplerSpectrum: [1x1 struct] Show all properties
The DopplerSpectrum
свойство объекта канала может быть изменено путем присвоения ему структуры Доплеровского спектра или вектора структур Доплеровского спектра.
Этот пример иллюстрирует, как изменить спектр Jakes Doppler по умолчанию построенного объекта канала Релея на плоский спектр Doppler.
Создайте объект канала Релея
Установите частоту дискретизации 9600 Гц и максимальный доплеровский сдвиг 100 Гц.
rayChan = comm.RayleighChannel('SampleRate',9600, 'MaximumDopplerShift',100)
rayChan = comm.RayleighChannel with properties: SampleRate: 9600 PathDelays: 0 AveragePathGains: 0 NormalizePathGains: true MaximumDopplerShift: 100 DopplerSpectrum: [1x1 struct] Show all properties
rayChan.DopplerSpectrum
ans = struct with fields:
SpectrumType: 'Jakes'
Модифицируйте Допплеровский спектр
Создайте плоскую структуру Допплеровского спектра и присвоите ее в rayChan
объект.
doppFlat = doppler('Flat')
doppFlat = struct with fields:
SpectrumType: 'Flat'
rayChan.DopplerSpectrum = doppFlat
rayChan = comm.RayleighChannel with properties: SampleRate: 9600 PathDelays: 0 AveragePathGains: 0 NormalizePathGains: true MaximumDopplerShift: 100 DopplerSpectrum: [1x1 struct] Show all properties
rayChan.DopplerSpectrum
ans = struct with fields:
SpectrumType: 'Flat'
Этот пример показывает, как изменить спектр Доплера Джейкса по умолчанию построенного объекта канала Райса на спектр Гауссова Доплера с нормализованным стандартным отклонением 0,3, и впоследствии отображать DopplerSpectrum
свойство и измените значение нормированного стандартного отклонения на 1.1.
Создайте объект канала Райса
Установите частоту дискретизации равную 9600 Гц, максимальный доплеровский сдвиг равный 100 Гц и коэффициент К равный 2.
ricChan = comm.RicianChannel('SampleRate',9600, 'MaximumDopplerShift',100, 'KFactor',2)
ricChan = comm.RicianChannel with properties: SampleRate: 9600 PathDelays: 0 AveragePathGains: 0 NormalizePathGains: true KFactor: 2 DirectPathDopplerShift: 0 DirectPathInitialPhase: 0 MaximumDopplerShift: 100 DopplerSpectrum: [1x1 struct] Show all properties
ricChan.DopplerSpectrum
ans = struct with fields:
SpectrumType: 'Jakes'
Модифицируйте Допплеровский спектр
Создайте структуру доплеровского спектра Гауссова с нормализованным стандартным отклонением 0,3 и присвойте ее в ricChan
объект.
doppGaus = doppler('Gaussian',0.3)
doppGaus = struct with fields:
SpectrumType: 'Gaussian'
NormalizedStandardDeviation: 0.3000
ricChan.DopplerSpectrum = doppGaus
ricChan = comm.RicianChannel with properties: SampleRate: 9600 PathDelays: 0 AveragePathGains: 0 NormalizePathGains: true KFactor: 2 DirectPathDopplerShift: 0 DirectPathInitialPhase: 0 MaximumDopplerShift: 100 DopplerSpectrum: [1x1 struct] Show all properties
ricChan.DopplerSpectrum
ans = struct with fields:
SpectrumType: 'Gaussian'
NormalizedStandardDeviation: 0.3000
ricChan.DopplerSpectrum.NormalizedStandardDeviation = 1.1; ricChan.DopplerSpectrum
ans = struct with fields:
SpectrumType: 'Gaussian'
NormalizedStandardDeviation: 1.1000
Этот пример иллюстрирует, как изменить спектр Джейкса Допплера по умолчанию построенного трехпутевого объекта Релейского канала на массив ячеек с различными Доплеровскими спектрами, а затем изменить свойства Допплеровского спектра третьего пути.
Создайте объект канала Релея
Установите частоту дискретизации равную 9600 Гц, максимальный доплеровский сдвиг равный 100 Гц и задайте задержки пути 0
, 1e-4
, и 2.1e-4 seconds
.
rayChan = comm.RayleighChannel('SampleRate',9600, 'MaximumDopplerShift',100, 'PathDelays',[0 1e-4 2.1e-4])
rayChan = comm.RayleighChannel with properties: SampleRate: 9600 PathDelays: [0 1.0000e-04 2.1000e-04] AveragePathGains: 0 NormalizePathGains: true MaximumDopplerShift: 100 DopplerSpectrum: [1x1 struct] Show all properties
rayChan.DopplerSpectrum
ans = struct with fields:
SpectrumType: 'Jakes'
Модифицируйте Допплеровский спектр
Задайте DopplerSpectrum
свойство как массив ячеек с независимым Доплеровским спектром для каждого пути.
rayChan.DopplerSpectrum = {doppler('Flat') doppler('Flat') doppler('Rounded')}
rayChan = comm.RayleighChannel with properties: SampleRate: 9600 PathDelays: [0 1.0000e-04 2.1000e-04] AveragePathGains: 0 NormalizePathGains: true MaximumDopplerShift: 100 DopplerSpectrum: {[1x1 struct] [1x1 struct] [1x1 struct]} Show all properties
rayChan.DopplerSpectrum{:}
ans = struct with fields:
SpectrumType: 'Flat'
ans = struct with fields:
SpectrumType: 'Flat'
ans = struct with fields:
SpectrumType: 'Rounded'
Polynomial: [1 -1.7200 0.7850]
Измените Polynomial
свойство для третьего пути.
rayChan.DopplerSpectrum{3}.Polynomial = [1 -1.21 0.7]
rayChan = comm.RayleighChannel with properties: SampleRate: 9600 PathDelays: [0 1.0000e-04 2.1000e-04] AveragePathGains: 0 NormalizePathGains: true MaximumDopplerShift: 100 DopplerSpectrum: {[1x1 struct] [1x1 struct] [1x1 struct]} Show all properties
rayChan.DopplerSpectrum{:}
ans = struct with fields:
SpectrumType: 'Flat'
ans = struct with fields:
SpectrumType: 'Flat'
ans = struct with fields:
SpectrumType: 'Rounded'
Polynomial: [1 -1.2100 0.7000]
Прежде чем вы фильтруете сигнал с помощью объекта канала, убедитесь, что свойства канала имеют подходящие значения для ситуации, которую вы хотите смоделировать. В этом разделе приведены некоторые рекомендации, которые помогут вам выбрать реалистичные значения, соответствующие вашим потребностям моделирования. Темы:
Синтаксис для просмотра и изменения значений свойств объектов канала описан в разделе «Определение канала с замираниями».
Вот несколько советов по выбору значений свойств, которые описывают реалистичные каналы:
Задержки пути
По соглашению первая задержка обычно устанавливается на нуль. Первая задержка соответствует первому поступающему пути.
Для внутренних окружений задержки пути после первого обычно составляют от 1e-9 секунд до 1e-7 секунд.
Для наружных окружений задержки пути после первого обычно составляют от 1e-7 секунд до 1e-5 секунд. Большие задержки в этой области значений могут соответствовать, например, области, окруженной горами.
Способность сигнала разрешать дискретные пути связана с его пропускной способностью. Если различие между наибольшей и наименьшей задержками пути меньше примерно 1% от периода символа, то сигнал испытывает канал, как если бы у него был только один дискретный путь.
Среднее усиление пути
Среднее усиление пути в объекте канала указывает среднее усиление степени для каждого пути с замираниями. На практике среднее значение усиления пути является большим отрицательным значением дБ. Однако компьютерные модели обычно используют среднее усиление пути в области значений [-20, 0] дБ.
Значения dB в векторе средних усилений пути часто распадаются примерно линейно как функция задержки, но конкретный профиль задержки зависит от окружения распространения.
Чтобы гарантировать, что ожидаемая общая степень комбинированных усилений пути равна 1, можно нормализовать усиления пути через NormalizePathGains
свойство объекта канала.
Максимальное количество доплеровских сдвигов
Доплеровские сдвиги заданы в терминах относительной скорости между передатчиком и приемником. Максимальный сдвиг Доплера в Герце, f d = vf ∕ c. В формуле v - относительная скорость в м/с, f - несущая частота передачи в Герце, и c - скорость света (3 × 108 м/с). Относительная скорость является величиной без информации о направлении.
Примените максимальную формулу доплеровского сдвига, предполагающую несущую частоту трансмиссии 900 МГц, автомобиль, движущийся со скоростью по автостраде, и пешеходный ход. Сигнал, переданный от автомобиля, перемещающегося со скоростью по автостраде, к стационарному приемнику, будет испытывать максимальный доплеровский сдвиг приблизительно 80 Гц. Сигнал, переданный от подвижного устройства, удерживаемого пешеходом, к стационарному приемнику, будет испытывать максимальный доплеровский сдвиг приблизительно 4 Гц.
Максимальный доплеровский сдвиг 0 соответствует статическому каналу, который происходит из распределения Релея или Райса.
Допплеровский спектр
K-коэффициент для каналов Райса с замираниями
Коэффициент Райса K задает отношение зеркального к диффузной степени для прямой линии видимости пути. Отношение выражено линейно, а не в дБ.
Для замирания Райса коэффициент K обычно находится в области значений [1, 10].
K-коэффициент 0 соответствует Релеевскому замиранию.
Допплеровский сдвиг пути линии зрения (LOS) для каналов Райса с замираниями
Доплеровский сдвиг пути LOS Райса, также известный как Доплеровский сдвиг прямого пути, задает относительное движение пути LOS между передатчиком и приемником.
ЛОС эффект Доплера пути Rician в Герц, <reservedrangesplaceholder12> d_los = (u <reservedrangesplaceholder10>) × <reservedrangesplaceholder9> ∕ <reservedrangesplaceholder8>. В формуле (u ⋅ w) является скалярным произведением векторов u и w, u является нормализованным путем LOS от передатчика к получателю, w является скоростью приемника относительно передатчика, f является частотой несущей передачи в Герце, и c является скоростью света (3 × 108 м/с).
Примените эту формулу для несущей частоты передачи 900 МГц при заданной относительной скорости. Для сигнала от передатчика в начале координат, который достигает приемника в координате [100 100 0], где относительная скорость между передатчиком и приемником w = [3 -6 0,1]. Доплеровский сдвиг пути LOS составляет 4,25 Гц.
Параметры допплеровского спектра
См. doppler
страница с описанием для соответствующих структур допплеровского спектра для описания параметров и их значимости.
Советы по настройке объекта канала для настройки процесса фильтрации:
Если ваши данные разделены на ряд векторов (которые вы обрабатываете, например, в цикле), можно вызвать объект канала несколько раз (в каждой итерации в цикле). Информация о состоянии канала обновляется и сохраняется после каждого вызова. Выходы канала нерелевантны тому, как данные секционированы (длина вектора).
Если необходимо, чтобы выход канала был повторяемым, выберите опцию seed для RandomStream
свойство объекта канала. Чтобы повторить выход, вызовите reset
функция объекта для сброса как внутренних фильтров, так и внутреннего генератора случайных чисел.
Если вы хотите смоделировать прерывисто передаваемые данные, установите FadingTechnique
свойство к 'Sum of sinusoids'
и InitialTimeSource
свойство к 'Input port'
для объекта канала. При вызове объекта задайте время запуска каждого вектора/кадра данных, который будет обработан каналом через вход.
Если вы хотите нормализовать процесс замирания так, чтобы ожидаемое значение общей степени усиления пути было 1 (канал не вносит дополнительный прирост или потери степени), установите NormalizePathGains
свойство объекта канала, чтобы true
.
После того, как вы создали объект канала, как описано в Указании Канала с замираниями, можно вызвать объект, чтобы передать сигнал через канал. Предоставьте сигнал в качестве входного параметра объекту канала. В конце операции фильтрации объект канала сохраняет свое состояние, так что вы можете узнать окончательное увеличение пути или общее количество выборок, которые канал обработал путем вызова функции объекта info с объектом в качестве входного параметра.
Для примера, который иллюстрирует основной синтаксис и сохранение состояния, см. «Степень затухшего сигнала».
Чтобы визуализировать характеристики канала, установите Visualization
свойство к 'Impulse response'
, 'Frequency response'
, или 'Doppler spectrum'
. Для получения дополнительной информации см. раздел «Визуализация канала».
Этот пример показывает, как визуализировать импульсную характеристику канала.
Создайте объект канала
При создании объекта канала используйте пары "имя-значение", чтобы задать Visualization
свойство
на 'Impulse response'
.
rayChan = comm.RayleighChannel('SampleRate',100000,'MaximumDopplerShift',130,... 'PathDelays',[0 1.5e-5 3.2e-5],'AveragePathGains',[0, -3, -3],... 'Visualization','Impulse response');
Сгенерируйте поток битов и создайте объект модулятора. Модулируйте битовый поток и передайте
модулированный сигнал DBPSK через канал путем вызова объекта канала.
tx = randi([0 1],500,1); dbspkMod = comm.DBPSKModulator; dpskSig = dbspkMod(tx); y = rayChan(dpskSig);
Импульсная характеристика строится при вызове объекта.
В этих примерах используются каналы с замираниями:
Этот пример строит график степени затухшего сигнала от числа дискретизации. Он иллюстрирует синтаксис создания и вызова comm.RayleighChannel
затухающий объект канала и сохранение состояния объекта канала.
rayChan = comm.RayleighChannel('SampleRate',10000,'MaximumDopplerShift',100); sig = j*ones(2000,1); % Signal out = rayChan(sig); % Pass signal through channel. rayChan % Display all properties of the channel object.
rayChan = comm.RayleighChannel with properties: SampleRate: 10000 PathDelays: 0 AveragePathGains: 0 NormalizePathGains: true MaximumDopplerShift: 100 DopplerSpectrum: [1x1 struct] Show all properties
Постройте график степени затухшего сигнала от числа дискретизации.
plot(20*log10(abs(out)))
Этот пример создает объект с плоского Канала с релеевским замиранием частотой и вызывает его для обработки сигнала DBPSK, состоящего из одного вектора. Вероятность битовой ошибки вычисляется для различных значений отношения сигнал/шум. Фильтр канала с замираниями применяется перед AWGN. Это рекомендуемая последовательность для использования при объединении замираний с AWGN.
Создайте Канал с релеевским замиранием, модулятор и объекты демодулятора
chan = comm.RayleighChannel('SampleRate',1e4,'MaximumDopplerShift',100);
Создайте объекты модулятора и демодулятора DBPSK с установленным порядком модуляции 2
. Сгенерируйте модулированные данные DBPSK и передайте их через канал.
M = 2; % DBPSK modulation order tx = randi([0 M-1],50000,1); % Generate a random bit stream mod = comm.DBPSKModulator; demod = comm.DBPSKDemodulator; dpskSig = mod(tx); fadedSig = chan(dpskSig); % Apply the channel effects
Создайте объект канала AWGN и объект калькулятора частоты ошибок.
awgnChan = comm.AWGNChannel('NoiseMethod', 'Signal to noise ratio (SNR)'); errorCalc = comm.ErrorRate;
Вычислите вероятность ошибок для различных значений ОСШ.
SNR = 0:2:20; % Range of SNR values, in dB. numSNR = length(SNR); berVec = zeros(3, numSNR); % Preallocate a vector for BER results for n = 1:numSNR awgnChan.SNR = SNR(n); rxSig = awgnChan(fadedSig); % Add Gaussian noise rx = demod(rxSig); % Demodulate reset(errorCalc) berVec(:,n) = errorCalc(tx,rx); % Compute error rate. end BER = berVec(1,:);
Вычислите теоретические результаты эффективности, для сравнения.
BERtheory = berfading(SNR,'dpsk',M,1);
Постройте график результатов BER.
semilogy(SNR,BERtheory,'b-',SNR,BER,'r*'); legend('Theoretical BER','Empirical BER'); xlabel('SNR (dB)'); ylabel('BER'); title('Binary DPSK over Rayleigh Fading Channel');
Значение свойства ChannelFilterDelay объекта канала является количеством выборок, на которые выход канала задерживает вход. Если вы сравниваете наборы входных и выходных данных непосредственно, необходимо учесть задержку при помощи соответствующих операций усечения или заполнения.
Пример иллюстрирует способ учета задержки перед вычислением частоты битовой ошибки.
Создайте объекты модулятора и демодулятора DBPSK с установленным порядком модуляции 2
. Сгенерируйте модулированные данные DBPSK и передайте их через канал.
bitRate = 50000;
M = 2; % DQPSK modulation order
mod = comm.DBPSKModulator;
demod = comm.DBPSKDemodulator;
Создайте Канал с релеевским замиранием объект.
rayChan = comm.RayleighChannel('SampleRate',bitRate,'MaximumDopplerShift',4,... 'PathDelays',[0 0.5/bitRate],'AveragePathGains',[0 -10]); chInfo = info(rayChan); delay = chInfo.ChannelFilterDelay;
Сгенерируйте данные случайного битового потока. Модулируйте данные, пропустите их через канал с замираниями и демодулируйте их.
tx = randi([0 M-1],50000,1); dpskSig = mod(tx); fadedSig = rayChan(dpskSig); rx = demod(fadedSig);
Вычислите вероятность битовой ошибки с учетом задержки.
errorCalc = comm.ErrorRate('ReceiveDelay', delay);
berVec = step(errorCalc,tx,rx);
ber = berVec(1)
ber = 0.0147
num = berVec(2)
num = 737
Этот пример фильтрует входные данные через Канал с релеевским замиранием в for
цикл. Он использует небольшие наборы данных из последовательных итераций, чтобы создать анимированный эффект. У Канала с релеевским замиранием два дискретных основных пути. Для получения информации о многократной фильтрации данных через канал с сохранением непрерывности от одного вызова до следующего смотрите Настройте объекты канала на основе потребностей симуляции.
Настройте параметры. Задайте скорость передачи 50e3
Гц и количество итераций цикла 125
. Создайте QPSK модулятор и Канал с релеевским замиранием объекты.
bitRate = 50000; % Data rate is 50 kb/s numTrials = 125; % Number of iterations of loop M = 4; % QPSK modulation order qpskMod = comm.QPSKModulator; rayChan = comm.RayleighChannel('SampleRate',bitRate,'MaximumDopplerShift',4,'PathDelays',[0 2e-5],'AveragePathGains',[0 -9]);
Инициализируйте график поля точек.
scatterPlot = comm.ConstellationDiagram;
Применить канал в цикле, сохраняя непрерывность. Постройте график только текущих данных в каждой итерации.
for n = 1:numTrials tx = randi([0 M-1],500,1); % Generate random bit stream pskSig = qpskMod(tx); % PSK modulate signal fadedSig = rayChan(pskSig); % Apply channel effects % Plot the new data from this iteration. update(scatterPlot,fadedSig); end
Обычно коэффициент усиления пути в замирающем канале изменяется незначительно в течение периода 1/(100fd)
секунд, где fd
- максимальный доплеровский сдвиг. Поскольку этот период соответствует очень большому числу бит во многих современных приложениях беспроводных данных, оценка эффективности по статистически значимой области значений замираний канала требует симуляции запредельно большого объема данных. Этот пример иллюстрирует квазистатический подход моделирования канала к сбору статистически значимого количества ошибок. Квазистатическое моделирование канала обеспечивает более отслеживаемый подход, который можно реализовать с помощью следующих шагов:
Сгенерируйте реализацию случайного канала, используя максимальный доплеровский сдвиг 0.
Обработайте некоторое количество бит.
Вычислите статистику ошибок.
Повторите эти шаги много раз, чтобы создать распределение метрики эффективности.
Создайте системные объекты модулятора и демодулятора с порядком 4
.
M = 4; dpskMod = comm.DPSKModulator('ModulationOrder',M); dpskDemod = comm.DPSKDemodulator('ModulationOrder',M); numBits = 10000; % Each trial uses 10000 bits numTrials = 20; % Number of BER computations
Как правило, numTrials
будет большим числом, чтобы получить точную оценку вероятностей отключения или частоты ошибок пакета. Использование 20
здесь только для того, чтобы пример запускался быстрее.
Создайте объект канала Райса и установите максимальный сдвиг Доплера равным нулю.
ricianChan = comm.RicianChannel('KFactor',3,'MaximumDopplerShift',0);
В пределах for
цикл, генерирует поток случайных битов, DPSK модулирует сигнал, фильтрует модулированный сигнал через каналы Райса с замираниями и AWGN и демодулирует сигнал с замираниями. Для расчета частоты ошибок символа на каждом пакете игнорируйте первую выборку из-за начального условия DPSK.
nErrors = zeros(1,numTrials); for n = 1:numTrials tx = randi([0 M-1],numBits,1); % Generate random bit stream dpskSig = dpskMod(tx); % DPSK modulate signal fadedSig = ricianChan(dpskSig); % Apply channel effects rxSig = awgn(fadedSig,15,'measured'); % Add Gaussian noise rx = dpskDemod(rxSig); % Demodulate nErrors(n) = symerr(tx(2:end),rx(2:end)); % Symbol error computation, beginning with sample index 2 end
После for
цикл заканчивается, отобразите список отсчётов ошибок символов в векторе nErrors
и расчет частоты ошибок пакета. Выполнение, чтобы запустить результаты варьируются из-за случайности в примере.
nErrors
nErrors = 1×20
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
per = mean(nErrors > 0) % Proportion of packets that had errors
per = 0.0500
В качестве примера, чтобы показать, как подход квазистатического моделирования канала может сэкономить расчет, рассмотрим беспроводную локальную сеть (LAN), в которой несущая частота составляет 2,4 ГГц, мобильная скорость составляет 1 м/с, и скорость передачи битов составляет 10 Мбит/с. Следующее выражение показывает, что канал изменяется незначительно более 12 500 биты:
Традиционный подход Монте-Карло для вычисления частоты ошибок этой системы повлечет за собой симуляцию тысяч раз, в общей сложности десятки миллионов бит. В отличие от этого, квазистатический подход моделирования канала будет моделировать несколько пакетов в каждом из примерно 100 местоположений, чтобы прийти к пространственному распределению частот ошибок. Из этого распределения можно было бы, для примера, определить, насколько надежна ссылка связи для случайного местоположения внутри внутреннего пространства. Если каждая симуляция содержит 5000 биты, 100 симуляций обработают полмиллиона бит в общей сложности. Это значительно меньше бит по сравнению с традиционным подходом Монте-Карло.
Эти модели включают использование замирающих каналов:
Канал с релеевским замиранием, который иллюстрирует эффект канала на модулированном сигнале QPSK