Затухающие каналы

Обзор каналов с замираниями

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

Этот рисунок изображает прямые и основные отраженные пути между стационарным радиопередатчиком и движущимся приемником. Закрашенные формы представляют отражатели, такие как создания.

Основные пути приводят к поступлению задержанных версий сигнала в приемник. В сложение радиосигнал подвергается рассеянию на локальной шкале для каждого основного пути. Такое локальное рассеяние обычно является результатом отражений от объектов вблизи подвижной станции. Эти нерешаемые компоненты объединяются в приемник и вызывают явление, известное как многолучевое замирание. Из-за этого явления каждый крупный путь ведет себя как дискретный затухающий путь. Обычно процесс затухания характеризуется распределением Релея для пути без линии видимости и распределением Райса для пути линии видимости.

Относительное движение между передатчиком и приемником вызывает доплеровские сдвиги. Локальное рассеяние обычно происходит со многих углов вокруг мобильного устройства. Этот сценарий вызывает область значений доплеровских сдвигов, известных как доплеровский спектр. Максимальный сдвиг Доплера соответствует локальным компонентам рассеяния, чье направление в точности противостоит траектории мобильного устройства.

Фильтр канала применяет коэффициент усиления пути к входному сигналу, Signal in. Коэффициент усиления пути конфигурируется на основе настроек, выбранных в замирающем объекте канала или блоке.

Эти блоки и объекты позволяют вам смоделировать SISO или MIMO каналы с замираниями.

Реализуйте канал с замираниями с использованием объекта

Модель канала основной полосы для сценариев многолучевого распространения, которые вы реализуете, используя объекты, включает:

  • 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]. Многолучевой канал с замираниями поэтому моделируется как линейный фильтр с конечной импульсной характеристикой (КИХ). Давайте {si} обозначает набор выборок на входе в канал. Затем выборки {yi} на выходе канала связаны с {si} через:

yi=n=N1N2singn

где {gn} - набор весов отводов, заданных:

gn=k=1Kaksinc[τkTsn]N1nN2

В уравнениях:

  • Ts - входной период дискретизации в канал.

  • {τk}, где 1kK, - набор задержек пути. K - общее количество путей в многолучевом канале с замираниями.

  • {ak}, где 1kK, - набор комплексных путей коэффициентов усиления многолучевого канала с замираниями. Эти усиления пути являются некоррелированными друг с другом.

  • N1 и N2 выбраны так, чтобы |gn| маленькая, когда n меньше, чем N1 или больше, чем N2.

Два метода, фильтрованный Гауссов шум и сумма синусоидов, используются, чтобы сгенерировать набор комплексных усилений пути, ak.

Каждый процесс усиления пути ak генерируется следующими шагами:

Метод фильтрации Гауссова шума

  1. Комплексный некоррелированный (белый) Гауссов процесс с нулевым средним и единичным отклонением генерируется за дискретное время.

  2. Комплексный Гауссов процесс фильтруется Доплеровским фильтром с частотной характеристикой H(f)=S(f), где S(f) обозначает желаемый спектр доплеровской степени.

  3. Отфильтрованный комплексный Гауссов процесс интерполирован так, что его период дискретизации согласован с периодом дискретизации входного сигнала. Используется комбинация линейной и полифазной интерполяции.

Метод суммы синусоидов

  1. Взаимно некоррелированные формы волны Релеевского замирания генерируются с помощью метода, описанного в [2], где i = 1 соответствует синфазному компоненту, а i = 2 соответствует квадратурному компоненту.

    zk(t)=μk(1)(t)+jμk(2)(t),k=1,2,,Kμk(i)(t)=2Nkn=1Nkcos(2πfk,n(i)t+θk,n(i)),i=1,2

    Где

    • Nk задает количество синусоидов, используемых для моделирования одного пути.

    • fk,n(i) является дискретной доплеровской частотой и вычисляется для каждого синусоидального компонента в одном пути.

    • θk,n(i) - фаза n-го компонента μk(i) и представляет собой i.i.d. случайная переменная, имеющая равномерное распределение по интервалу (0,2π].

    • t - время затухания процесса.

    При моделировании допплеровского спектра Джейкса дискретные доплеровские частоты, fk,n(i), с максимальным сдвигом f max заданы как

    fk,n(i)=fmaxcos(αk,n(i))=fmaxcos[π2Nk(n12)+αk,0(i)]

    где

    αk,0(i)(1)i1π4NkkK+2,i=1,2иk=1,2,,K

  2. Чтобы продвинуть процесс затухания во времени, вводится начальный параметр времени, t init. Затухающие формы волны становятся

    μk(i)(t)=2Nkn=1Nkcos(2πfk,n(i)(t+tinit)+θk,n(i)),i=1,2

    Когда t init = 0, процесс затухания начинается в начальный момент времени. Положительное значение init t совершенствует процесс затухания относительно начального момента времени, сохраняя при этом непрерывность.

  3. Выборки с замираниями канала генерируются с помощью алгоритма GMEDS1 [2].

Вычисление комплексных коэффициентов

Комплексный процесс, полученный из любого метода, zk, масштабируется, чтобы получить правильный средний коэффициент усиления пути. В случае канала Релея процесс затухания получают как:

ak=Ωkzk

где

Ωk=E[|ak|2]

В случае канала Райса процесс затухания получают как:

ak=Ωk[zkKr,k+1+Kr,kKr,k+1ej(2πfd,LOS,kt+θLOS,k)]

где Kr,k - коэффициент Райса K k-го пути ,fd,LOS,k - доплеровский сдвиг составляющей линии видимости k-го пути (в Гц), иθLOS,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 моделирует канал с замираниями как линейный конечная импульсная характеристика. Фильтрация сигнала с использованием канала с замираниями включает в себя следующие шаги:

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

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

  3. Примените объект канала к своему сигналу, используя вызов объекта.

В этом разделе описывается, как определять, просматривать и управлять объектами канала. Темы:

Создание объектов канала

Чтобы создать затухающий объект канала, подходящий для ситуации моделирования, выберите один из этих системных объектов.

ФункцияОбъектМоделируемая ситуация

comm.RayleighChannel

Канал с релеевским замиранием объектОдин или несколько основных отраженных путей

comm.RicianChannel

Объект канала с замираниями РайсаОдин прямой путь видимости, возможно, объединенный с одним или несколькими основными отраженными путями

Для примера эта команда создает объект канала, представляющий Каналу с релеевским замиранием, который действует на сигнал, дискретизированный со скоростью 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 = vfc. В формуле v - относительная скорость в м/с, f - несущая частота передачи в Герце, и c - скорость света (3 × 108 м/с). Относительная скорость является величиной без информации о направлении.

  • Примените максимальную формулу доплеровского сдвига, предполагающую несущую частоту трансмиссии 900 МГц, автомобиль, движущийся со скоростью по автостраде, и пешеходный ход. Сигнал, переданный от автомобиля, перемещающегося со скоростью по автостраде, к стационарному приемнику, будет испытывать максимальный доплеровский сдвиг приблизительно 80 Гц. Сигнал, переданный от подвижного устройства, удерживаемого пешеходом, к стационарному приемнику, будет испытывать максимальный доплеровский сдвиг приблизительно 4 Гц.

  • Максимальный доплеровский сдвиг 0 соответствует статическому каналу, который происходит из распределения Релея или Райса.

Допплеровский спектр

  • Доплеровский спектр, используемый для путей канала, должен быть выходами формы, возвращенной из doppler функция.

  • Опции для типа спектра заданы specType вход doppler функция.

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)))

Figure contains an axes. The axes contains an object of type line.

Эмпирическая и теоретическая эффективность ББПСК в условиях затухания

Этот пример создает объект с плоского Канала с релеевским замиранием частотой и вызывает его для обработки сигнала 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');

Figure contains an axes. The axes with title Binary DPSK over Rayleigh Fading Channel contains 2 objects of type line. These objects represent Theoretical BER, Empirical BER.

Работа с задержками фильтра канала

Значение свойства 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

Этот пример фильтрует входные данные через Канал с релеевским замиранием в 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 - максимальный доплеровский сдвиг. Поскольку этот период соответствует очень большому числу бит во многих современных приложениях беспроводных данных, оценка эффективности по статистически значимой области значений замираний канала требует симуляции запредельно большого объема данных. Этот пример иллюстрирует квазистатический подход моделирования канала к сбору статистически значимого количества ошибок. Квазистатическое моделирование канала обеспечивает более отслеживаемый подход, который можно реализовать с помощью следующих шагов:

  1. Сгенерируйте реализацию случайного канала, используя максимальный доплеровский сдвиг 0.

  2. Обработайте некоторое количество бит.

  3. Вычислите статистику ошибок.

  4. Повторите эти шаги много раз, чтобы создать распределение метрики эффективности.

Создайте системные объекты модулятора и демодулятора с порядком 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 биты:

(1100fd s)(10 Mb/s)=(c100vf s)(10 Мб/с)=3×108м/с100(1 м/с)(2.4 GHz)(10 Мб/с)=12,500 b

Традиционный подход Монте-Карло для вычисления частоты ошибок этой системы повлечет за собой симуляцию тысяч раз, в общей сложности десятки миллионов бит. В отличие от этого, квазистатический подход моделирования канала будет моделировать несколько пакетов в каждом из примерно 100 местоположений, чтобы прийти к пространственному распределению частот ошибок. Из этого распределения можно было бы, для примера, определить, насколько надежна ссылка связи для случайного местоположения внутри внутреннего пространства. Если каждая симуляция содержит 5000 биты, 100 симуляций обработают полмиллиона бит в общей сложности. Это значительно меньше бит по сравнению с традиционным подходом Монте-Карло.

Дополнительные примеры с использованием каналов с замираниями

Эти модели включают использование замирающих каналов: