Пропустите входной сигнал через MIMO многолучевой канал с замираниями
Объект comm.MIMOChannel фильтрует входной сигнал через многолучевой канал с обратной связью (MIMO). Этот объект моделирует как Релея, так и Райса с замираниями и использует модель Кронекера для моделирования пространственной корреляции между ссылками. Для получения дополнительной информации смотрите раздел Алгоритмы.
Для фильтрации входного сигнала через MIMO многолучевой канал с замираниями:
Создайте comm.MIMOChannel
Объекту и установите его свойства.
Вызывайте объект с аргументами, как будто это функция.
Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».
создает систему с несколькими входами и несколькими выходами (MIMO), избирательную по частоте или с плоской частотой, object™ с замираниями. Этот объект фильтрует действительный или комплексный входной сигнал через многолучевой канал MIMO, чтобы получить сигнал с нарушением канала.mimochan
= comm.MIMOChannel
устанавливает свойства с помощью одной или нескольких пар "имя-значение". Заключайте каждое имя свойства в одинарные кавычки.mimochan
= comm.MIMOChannel(Name
,Value
)
comm.MIMOChannel('SampleRate',2)
Если не указано иное, свойства являются нетронутыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируются, когда вы вызываете их, и release
функция разблокирует их.
Если свойство настраивается, можно изменить его значение в любой момент.
Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.
SampleRate
- Скорость выборки входного сигнала1
(по умолчанию) | положительная скалярная величинаСкорость выборки входного сигнала в герцах, заданная как положительная скалярная величина.
Типы данных: double
PathDelays
- Дискретная задержка пути0
(по умолчанию) | скалярный вектор | строкуДискретная задержка пути в секундах, заданная как скаляр или вектор-строка.
Когда вы задаете PathDelays
для скаляра канал MIMO является частотно-плоским.
Когда вы задаете PathDelays
для вектора канал MIMO является частотно-избирательным.
Типы данных: double
AveragePathGains
- Среднее усиление пути (дБ)0
(по умолчанию) | скалярный вектор | строкуСреднее увеличение пути в децибелах, заданное как скаляр или вектор-строка. AveragePathGains
должен иметь тот же размер, что и PathDelays.
Типы данных: double
NormalizePathGains
- Нормализуйте коэффициент усиления путиtrue
(по умолчанию) | false
Нормализуйте коэффициент усиления пути, заданный как true
или false
.
Когда вы устанавливаете это свойство на true
процессы затухания нормированы так, что общая степень усилений пути, усредненная с течением времени, 0
дБ.
Когда вы устанавливаете это свойство на false
, нет нормализации по усилениям пути.
Средние степени усиления пути заданы свойством AveragePathGains.
Типы данных: logical
FadingDistribution
- Затухание распределения'Rayleigh'
(по умолчанию) | 'Rician'
Затухающее распределение для канала, заданное как 'Rayleigh'
или 'Rician'
.
Типы данных: char
KFactor
- K-коэффициент канала Райса с замираниями3
(по умолчанию) | положительная скалярная величина | вектор-строка K-фактор канала Райса с замираниями, заданный как положительный скаляр или 1- N вектор P положительно оцененных элементов. N P равняется количеству задержек пути, заданному свойством PathDelays.
Если вы задаете KFactor
к скаляру, первый дискретный путь является процессом Райса с замираниями с Райсом K-фактором KFactor
. Любые оставшиеся дискретные пути являются независимыми процессами Релеевского замирания.
Если вы задаете KFactor
к вектору-строке, дискретный путь, соответствующий положительному элементу KFactor
вектор является процессом Райса с замираниями с коэффициентом Райса K, заданным этим элементом. Дискретный путь, соответствующий нулевому элементу KFactor
вектор является релеевским замиранием.
Это свойство применяется, когда FadingDistribution Rician
.
Типы данных: double
DirectPathDopplerShift
- Доплеровские сдвиги для компонентов линии видимости (Гц)0
(по умолчанию) | скалярный вектор | строкуДоплеровские сдвиги для компонентов линии зрения канала Райса с замираниями в герцах, заданные как скаляр или вектор-строка. Это свойство должно иметь тот же размер, что и KFactor.
Если вы задаете DirectPathDopplerShift
к скаляру, он представляет доплеровский сдвиг компонента линии зрения первого дискретного пути, который является процессом Райса с замираниями.
Если вы задаете DirectPathDopplerShift
к вектору-строке, дискретный путь, который является процессом Райса с замираниями, имеет свой доплеровский сдвиг компонента линии видимости, заданный элементами DirectPathDopplerShift
которые соответствуют положительным элементам в векторе KFactor.
Это свойство применяется, когда FadingDistribution Rician
.
Типы данных: double
DirectPathInitialPhase
- Начальные фазы для компонентов линии видимости (Radians)0
(по умолчанию) | скалярный вектор | строкуНачальные фазы для компонентов линии видимости канала Райса с замираниями в радианах, заданные как скаляр или вектор-строка. Это свойство должно иметь тот же размер, что и KFactor.
Если вы задаете DirectPathInitialPhase
для скаляра он представляет начальную фазу компонента линии видимости первого дискретного пути, который является процессом Райса с замираниями.
Если вы задаете DirectPathInitialPhase
для вектора-строки, дискретный путь, который является процессом Райса с замираниями, имеет свою начальную фазу компонента линии видимости, заданную элементами DirectPathInitialPhase
которые соответствуют положительным элементам в векторе KFactor.
Это свойство применяется, когда FadingDistribution Rician
.
Типы данных: double
MaximumDopplerShift
- Максимальный доплеровский сдвиг для всех каналов (Гц)0.001
(по умолчанию) | неотрицательной скаляромМаксимальный доплеровский сдвиг для всех путей канала в герце, заданный как неотрицательный скаляр.
Доплеровский сдвиг применяется ко всем канальным путям. Когда вы устанавливаете это свойство на 0
канал остается статическим для всего входа. Можно использовать reset
функция объекта для генерации новой реализации канала.
MaximumDopplerShift
должен быть меньше (SampleRate/10 )/ f c для каждого пути, где f c представляет частотный коэффициент среза пути. Для получения дополнительной информации о частоте отсечения смотрите Коэффициент отсечения частоты.
Типы данных: double
DopplerSpectrum
- Форма допплеровского спектра для всех путей по каналамdoppler('Jakes')
(по умолчанию) | doppler('Flat')
| doppler('Rounded', ...)
| doppler('Bell', ...)
| doppler('Asymmetric Jakes', ...)
| doppler('Restricted Jakes', ...)
| doppler('Gaussian', ...)
| doppler('BiGaussian', ...)
Форма допплеровского спектра для всех путей канала, заданная как единственная структура допплеровского спектра, возвращенная из doppler
функция или массив 1-by- N P-ячеек таких структур. Значением по умолчанию этого свойства является допплеровский спектр Джейкса (doppler('Jakes')
).
Если вы назначаете один вызов doppler
все пути имеют одинаковый заданный доплеровский спектр.
Если вы назначаете массив вызовов 1-by N P-ячеек doppler
используя любой из заданных синтаксисов, каждый путь имеет Доплеровский спектр, заданный соответствующей структурой Доплеровского спектра в массиве. В этом случае N P равняется значению свойства PathDelays.
Максимальное значение доплеровского сдвига, необходимое для определения доплеровского спектра/спектра, задается свойством MaximumDopplerShift.
Это свойство применяется, когда MaximumDopplerShift больше нуля.
Если вы присвоили свойство FadingTechnique 'Sum of sinusoids'
, вы должны задать DopplerSpectrum
на doppler('Jakes')
.
SpatialCorrelationSpecification
- Спецификация пространственной корреляции'Separate Tx Rx'
(по умолчанию) | 'None'
| 'Combined'
Спецификация пространственной корреляции, заданная как 'Separate Tx Rx'
, 'None'
, или 'Combined'
.
Выберите 'Spatial Tx Rx'
отдельно задать матрицы пространственной корреляции передачи и приема, из которых получают количество передающей антенны (N T) и количество приемных антенн (N R).
Выберите 'None'
для определения количества передающих и приемных антенн.
Выберите 'Combined'
задавать одну матрицу корреляции для всего канала, из которой получают продукт N T и N R.
Типы данных: char
NumTransmitAntennas
- Количество передающих антенн2
(по умолчанию) | положительное целое числоКоличество передающих антенн, заданное как положительное целое число.
Это свойство применяется, когда SpatialCorrelationSpecification 'None'
или 'Combined'
.
Типы данных: double
NumReceiveAntennas
- Количество приемных антенн2
(по умолчанию) | положительное целое числоКоличество приемных антенн, заданное как положительное целое число.
Это свойство применяется, когда SpatialCorrelationSpecification 'None'
или 'Combined'
.
Типы данных: double
TransmitCorrelationMatrix
- Пространственная корреляция передатчика[1 0; 0 1]
(по умолчанию) | матрицу | трехмерный массивЗадайте пространственную корреляцию передатчика как N T-by- N T-матрицу или N T-by- N T-by- N P-решётку. N T является количеством передающих антенн, и N P равняется значению свойства PathDelays.
Если PathDelays
является скаляром, канал является частотно-плоским, и TransmitCorrelationMatrix
является N T-by N T Эрмитовой матрицей. Величина любого off-диагонального элемента должна быть не больше, чем среднее геометрическое двух соответствующих диагональных элементов.
Если PathDelays
является вектором, канал избирательен по частоте, и можно задать TransmitCorrelationMatrix
как матрица. Каждый путь имеет одну и ту же матрицу пространственной корреляции передачи.
Также можно задать TransmitCorrelationMatrix
как N T-by N T-by N P массив, где каждый путь может иметь свою собственную собственную матрицу пространственной корреляции передачи.
Это свойство применяется, когда вы задаете свойство SpatialCorrelationSpecification равным 'Separate Tx Rx'
.
Типы данных: double
Поддержка комплексного числа: Да
ReceiveCorrelationMatrix
- Пространственная корреляция приемника[1 0; 0 1]
(по умолчанию) | матрицу | трехмерный массивЗадайте пространственную корреляцию приемника как N R-by N R или N R-by N R-by N P массива. N R является количеством приемных антенн, и N P равняется значению свойства PathDelays.
Если PathDelays является скаляром, канал является плоским по частоте и ReceiveCorrelationMatrix
является N R-by N R Эрмитовой матрицей. Величина любого off-диагонального элемента должна быть не больше, чем среднее геометрическое двух соответствующих диагональных элементов.
Если PathDelays является вектором, канал является частотно-избирательным, и можно задать ReceiveCorrelationMatrix
как матрица. Каждый путь имеет одну и ту же матрицу пространственной корреляции приема.
Также можно задать ReceiveCorrelationMatrix
как N R-by N R-by N P массив, где каждый путь может иметь свою собственную собственную матрицу пространственной корреляции приема.
Это свойство применяется, когда вы задаете свойство SpatialCorrelationSpecification равным 'Separate Tx Rx'
.
Типы данных: double
Поддержка комплексного числа: Да
SpatialCorrelationMatrix
- Комбинированная матрица пространственной корреляции[1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1]
(по умолчанию) | матрицу | трехмерный массивКомбинированная матрица пространственной корреляции, заданная как N матрица TR-by- N TR или N TR-by- N TR-by- N P, где N TR = (N T ✕ N R), и N P равняется значению свойства PathDelays.
Если PathDelays является скаляром, канал является плоским по частоте и SpatialCorrelationMatrix
является N TR-by- N TR Эрмитовой матрицей. Величина любого off-диагонального элемента должна быть не больше, чем среднее геометрическое двух соответствующих диагональных элементов.
Если PathDelays является вектором, канал является частотно-избирательным, и можно задать SpatialCorrelationMatrix
как матрица. Каждый путь имеет одну и ту же матрицу пространственной корреляции.
Также можно задать SpatialCorrelationMatrix
как N TR-by N TR-by N P массив, где каждый путь может иметь свою собственную отдельную комбинированную матрицу пространственной корреляции.
Это свойство применяется, когда вы задаете свойство SpatialCorrelationSpecification равным 'Combined'
.
Типы данных: double
Поддержка комплексного числа: Да
AntennaSelection
- Схема выбора антенны'Off'
(по умолчанию) | 'Tx'
| 'Rx'
| 'Tx and Rx'
Схема выбора антенны, заданная как 'Off'
, 'Tx'
, 'Rx'
, или 'Tx and Rx'
.
Tx
представляет передающие антенны и Rx
представляет приемные антенны. Когда вы конфигурируете любой выбор антенны, кроме настройки по умолчанию, объект требует одного или нескольких входов, чтобы указать, какие антенны выбраны для передачи сигнала. Для получения дополнительной информации см. раздел «Выбор антенны».
Типы данных: char
NormalizeChannelOutputs
- Нормализуйте выходы каналаtrue
(по умолчанию) | false
Нормализуйте выходы канала, заданные как true
или false
.
Когда вы устанавливаете это свойство на true
выходные выходы канала нормированы количеством приемных антенн.
Когда вы устанавливаете это свойство на false
выходные выходы канала не нормированы.
Типы данных: logical
FadingTechnique
- Метод затухания модели канала'Filtered Gaussian noise'
(по умолчанию) | 'Sum of sinusoids'
Метод затухания модели канала, заданный как 'Filtered Gaussian noise'
или 'Sum of sinusoids'
.
Типы данных: char
NumSinusoids
- Количество используемых синусоидов48
(по умолчанию) | положительное целое числоКоличество синусоидов, используемых для моделирования процесса затухания, заданное как положительное целое число.
Это свойство применяется, когда FadingTechnique 'Sum of sinusoids'
.
Типы данных: double
InitialTimeSource
- Источник для управления началом процесса затухания'Property'
(по умолчанию) | 'Input port'
Источник для управления временем запуска процесса затухания, заданный как 'Property'
или 'Input port'
.
'Property'
-- Используйте свойство InitialTime, чтобы задать начальное смещение времени.
'Input port'
-- Укажите время запуска процесса затухания при помощи initialtime
вход в объект. Входное значение может изменяться при последовательных вызовах объекта.
Это свойство применяется, когда FadingTechnique 'Sum of sinusoids'
.
InitialTime
- Начальное смещение времени0
(по умолчанию) | неотрицательной скаляромНачальное смещение времени для модели с замираниями в секундах, заданное как неотрицательный скаляр.
Когда InitialTime
не является кратным 1/SampleRate, округлится до ближайшего положения выборки.
Это свойство применяется, когда для свойства FadingTechnique задано значение 'Sum of sinusoids'
и для свойства InitialTimeSource задано значение 'Property'
.
Типы данных: double
RandomStream
- Источник потока случайных чисел'Global stream'
(по умолчанию) | 'mt19937ar with seed'
Источник потока случайных чисел, заданный как 'Global stream'
или 'mt19937ar with seed'
.
'Global stream'
- Текущий глобальный поток случайных чисел используется для нормально распределенной генерации случайных чисел. В этом случае reset
функция object сбрасывает только фильтры.
'mt19937ar with seed'
- Алгоритм mt19937ar используется для нормально распределенной генерации случайных чисел. В этом случае reset
функция object сбрасывает фильтры, а также повторно инициализирует поток случайных чисел на значение свойства Seed.
Типы данных: char
Seed
- Начальное начальное число потока случайных чисел mt19937ar73
(по умолчанию) | неотрицательное целое числоНачальное начальное число потока случайных чисел mt19937ar, заданное как неотрицательное целое число. Когда reset
вызывается функция объекта, поток случайных чисел mt19937ar повторно инициализируется в Seed
значение.
Это свойство применяется, когда вы задаете значение свойства RandomStream 'mt19937ar with seed'
.
Типы данных: double
PathGainsOutputPort
- Опция для вывода коэффициентов усиления путиfalse
(по умолчанию) | true
Опция вывода коэффициентов усиления пути, заданная как false
или true
. Установите это свойство на true
для вывода коэффициентов усиления пути канала базового процесса затухания.
Типы данных: logical
Visualization
- Визуализация канала'Off'
(по умолчанию) | 'Impulse response'
| 'Frequency response'
| 'Impulse and frequency responses'
| 'Doppler spectrum'
Выбор визуализации канала, заданное как 'Off'
, 'Impulse response'
, 'Frequency response'
, 'Impulse and frequency responses'
, или 'Doppler spectrum'
. Когда визуализация включена, выбранные характеристики канала, такие как импульсная характеристика или Допплеровский спектр, отображаются в отдельном окне. Для получения дополнительной информации см. раздел «Визуализация канала».
Визуализация применяется только, когда для свойства FadingTechnique задано значение 'Filtered Gaussian noise'
.
AntennaPairsToDisplay
- Пара передающая-приемная антенна для отображения[1 1]
(по умолчанию) | вектор-строкаПара передающая-приемная антенна для отображения, заданная как вектор 1 на 2, где первый элемент соответствует желаемой передающей антенне, а второй элемент соответствует желаемой приемной антенне. В это время может отображаться только одна пара.
Это свойство применяется, когда визуализация не Off
.
PathsForDopplerDisplay
- Путь, для которого отображается Допплеровский спектр1
(по умолчанию) | положительное целое числоПуть, для которого отображается Допплеровский спектр, заданный как положительное целое число от 1 до N P, где N P равняется значению свойства PathDelays.
Это свойство применяется, когда значение визуализации установлено на 'Doppler spectrum'
.
SamplesToDisplay
- Процент выборок25%
(по умолчанию) | 10%
| 50%
| 100%
Процент выборок, заданный как 10%
, 25%
, 50%
, или 100%
. Увеличение процента повышает точность отображения за счет скорости симуляции.
Это свойство применяется, когда Visualization 'Impulse response'
, 'Frequency response'
, или 'Impulse and frequency responses'
.
включает передающие антенны, выбранные outsignal
= mimochan(insignal
,seltx
)seltx
для обработки канала.
Этот синтаксис применяется, когда вы задаете свойство AntennaSelection объекта равным 'Tx'
.
Для примера, чтобы выбрать первый и третий индекс передающей антенны как активный:
mimochan = comm.MIMOChannel('AntennaSelection','Tx'); seltx = [1 0 1]; ... outsignal = mimochan(insignal,seltx);
включает приемные антенны, выбираемые по outsignal
= mimochan(insignal
,selrx
)selrx
для обработки канала.
Этот синтаксис применяется, когда вы задаете свойство AntennaSelection объекта равным 'Rx'
.
Для примера, чтобы выбрать второй индекс приемной антенны как активный:
mimochan = comm.MIMOChannel('AntennaSelection','Rx'); selrx = [0 1]; ... outsignal = mimochan(insignal,selrx);
включает передающие и приемные антенны, выбираемые по outsignal
= mimochan(insignal
,seltx
,selrx
)seltx
и selrx
для обработки канала.
Этот синтаксис применяется, когда вы задаете свойство AntennaSelection объекта равным 'Tx and Rx'
.
Для примера:
mimochan = comm.MIMOChannel('AntennaSelection','Tx and Rx'); seltx = [1 1]; selrx = [0 1]; ... outsignal = mimochan(insignal,selrx);
задает время начала затухания процесса. outsignal
= mimochan(___,initialtime
)
Этот синтаксис применяется, когда вы задаете свойство FadingTechnique объекта равным 'Sum of sinusoids'
и свойство InitialTimeSource объекта, который будет 'Input port'
. Синтаксис поддерживает входные опции из предыдущих синтаксисов.
insignal
- Входной сигналВходной сигнал, заданный как скаляр, вектор-столбец N элемента S, матрица N S-by- N T или матрица N S-by- N ST .
N S - количество выборок.
N T - количество передающих антенн. N T определяется значениями свойств TransmitCorrelationMatrix или NumTransmitAntennas объекта.
N ST является количеством выбранных передающих антенн, определяемым количеством элементов, установленным на 1
в векторе, поданном на вход seltx.
Количество передающих антенн определяется значениями свойств TransmitCorrelationMatrix или NumTransmitAntennas объекта.
Типы данных: double
| single
Поддержка комплексного числа: Да
seltx
- Выбор активных передающих антеннВыберите активные передающие антенны в виде 1-байт- N T-двоичного вектора. N T представляет количество передающих антенн. Для элементов задано значение 1
идентифицировать выбранные индексы и 0
антенны идентифицируют невыбранные индексы антенны.
Типы данных: double
selrx
- Выберите активную приемную антеннуВыберите активные приемные антенны, заданные как 1-байт- N R-двоичный вектор. N R представляет количество приемных антенн. Для элементов задано значение 1
идентифицировать выбранные индексы и 0
антенны идентифицируют невыбранные индексы антенны.
Типы данных: double
initialtime
- Начальное смещение времени0
(по умолчанию) | неотрицательной скаляромНачальное смещение времени для модели с замираниями в секундах, заданное как неотрицательный скаляр.
Начальное смещение времени должно быть больше, чем время окончания последней системы координат. Когда initialtime
не является кратным 1/SampleRate, округлится до ближайшего положения выборки.
Типы данных: double
outsignal
- Выходной сигналВыходной сигнал данных, возвращенный как N S-by- N R или N S-by- N SR матрица.
N S - количество выборок.
N R является количеством приемных антенн. N R определяется значениями свойств ReceiveCorrelationMatrix или NumReceiveAntennas объекта.
N SR является количеством выбранных приемных антенн, определяемым количеством элементов, установленным на 1
в векторе, поданном на вход selrx.
pathgains
- Коэффициент усиления выходного путиКоэффициент усиления выходного пути, возвращенный как N S-by- N P-by- N T-by- N R-массив с NaN
значения для невыбранных пар передающая-приемная антенна.
N S - количество выборок.
N P равняется значению свойства PathDelays.
N T - количество передающих антенн.
N R является количеством приемных антенн.
Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем obj
, используйте следующий синтаксис:
release(obj)
info | Характеристическая информация о затухающем объекте канала |
Примечание
Если вы задаете RandomStream
свойство объекта, которое должно быть 'Global stream'
, reset
функция object сбрасывает только фильтры.
Если вы задаете RandomStream
на 'mt19937ar with seed'
, reset
функция object сбрасывает фильтры, а также повторно инициализирует поток случайных чисел на значение Seed
свойство.
Создайте канал MIMO 4 на 2 с помощью Системного объекта канала MIMO. Модулируйте и пространственно кодируйте данные, а затем передайте данные через канал.
Сгенерируйте модулированные QPSK данные.
data = randi([0 3],1000,1); modData = pskmod(data,4,pi/4);
Создайте ортогональный пространственно-временной блочный энкодер, чтобы кодировать модулированные данные в четыре пространственно разделенных потока. Закодируйте данные.
ostbc = comm.OSTBCEncoder('NumTransmitAntennas',4,'SymbolRate',1/2); txSig = ostbc(modData);
Создайте объект канала MIMO, используя пары "имя-значение", чтобы задать свойства. Канал состоит из двух путей с максимальным доплеровским сдвигом 5 Гц. Установите SpatialCorrelationSpecification
свойство к 'None'
, что требует, чтобы вы задали количество передающих и приемных антенн. Установите количество передающих антенн равным 4, а количество приемных - 2.
mimochannel = comm.MIMOChannel('SampleRate',1000, ... 'PathDelays',[0 2e-3],'AveragePathGains',[0 -5], ... 'MaximumDopplerShift',5,'SpatialCorrelationSpecification','None', ... 'NumTransmitAntennas',4,'NumReceiveAntennas',2);
Передайте модулированные и закодированные данные через канал MIMO.
rxSig = mimochannel(txSig);
Создайте временной вектор, t
, для построения графического изображения степени принимаемого сигнала.
ts = 1/mimochannel.SampleRate; t = (0:ts:(size(txSig,1)-1)*ts)';
Вычислите и постройте график степени сигнала, принимаемого антенной 1.
pwrdB = 20*log10(abs(rxSig(:,1))); plot(t,pwrdB) xlabel('Time (s)') ylabel('Power (dBW)')
Не задавая выбор антенны, фильтруйте PSK-модулированные данные через Канал с релеевским замиранием 2 на 2 и исследуйте пространственные корреляционные характеристики реализации канала. Используйте release
функция объекта, чтобы разблокировать объект, чтобы задать AntennaSelection
свойство к 'Tx and Rx'
и затем подтвердите невыбранные пары передающая-приемная антенна.
Исследуйте пространственные характеристики корреляции, не определяя выбор антенны
Создайте PSK-модулятор System object™, чтобы модулировать случайным образом сгенерированные данные.
pskModulator = comm.PSKModulator; modData = pskModulator(randi([0 pskModulator.ModulationOrder-1],1e5,1));
Разделите модулированные данные на два пространственных потока.
channelInput = reshape(modData,[2 5e4]).';
Создайте Системный объект канала MIMO 2 на 2 с двумя дискретными путями. Каждый путь имеет различные матрицы корреляции передачи и приема, заданные TransmitCorrelationMatrix
и ReceiveCorrelationMatrix
свойства.
mimoChan = comm.MIMOChannel('SampleRate',1000, 'PathDelays',[0 1e-3], ... 'AveragePathGains',[3 5], 'NormalizePathGains',false, 'MaximumDopplerShift',5, ... 'TransmitCorrelationMatrix',cat(3,eye(2),[1 0.1;0.1 1]), ... 'ReceiveCorrelationMatrix',cat(3,[1 0.2;0.2 1],eye(2)), ... 'RandomStream','mt19937ar with seed', 'Seed',33, 'PathGainsOutputPort',true);
Фильтрация модулированных данных с помощью объекта канала MIMO.
[~,pathGains] = mimoChan(channelInput);
Пространственная корреляция передачи для первого дискретного пути в первой приемной антенне задана как матрица тождеств в TransmitCorrelationMatrix
свойство. Подтвердите, что выход канала pathGains
показывает те же статистические характеристики при помощи corrcoef
функция.
disp('Tx spatial correlation, first path, first Rx:');
Tx spatial correlation, first path, first Rx:
disp(corrcoef(squeeze(pathGains(:,1,:,1))));
1.0000 + 0.0000i 0.0357 - 0.0253i 0.0357 + 0.0253i 1.0000 + 0.0000i
Пространственная корреляция передачи для второго дискретного пути во второй приемной антенне задана как [1 0.1;0.1 1]
в TransmitCorrelationMatrix
свойство. Подтвердите, что выход канала pathGains
показывает те же статистические характеристики.
disp('Tx spatial correlation, second path, second Rx:');
Tx spatial correlation, second path, second Rx:
disp(corrcoef(squeeze(pathGains(:,2,:,2))));
1.0000 + 0.0000i 0.0863 + 0.0009i 0.0863 - 0.0009i 1.0000 + 0.0000i
Пространственная корреляция приема для первого дискретного пути во второй передающей антенне задана как [1 0.2;0.2 1]
в ReceiveCorrelationMatrix
свойство. Подтвердите, что выход канала pathGains
показывает те же статистические характеристики.
disp('Rx spatial correlation, first path, second Tx:');
Rx spatial correlation, first path, second Tx:
disp(corrcoef(squeeze(pathGains(:,1,2,:))));
1.0000 + 0.0000i 0.2236 + 0.0550i 0.2236 - 0.0550i 1.0000 + 0.0000i
Пространственная корреляция приема для второго дискретного пути в первой передающей антенне задана как матрица тождеств в ReceiveCorrelationMatrix
свойство. Подтвердите, что выход канала pathGains
показывает те же статистические характеристики.
disp('Rx spatial correlation, second path, first Tx:');
Rx spatial correlation, second path, first Tx:
disp(corrcoef(squeeze(pathGains(:,2,1,:))));
1.0000 + 0.0000i -0.0088 - 0.0489i -0.0088 + 0.0489i 1.0000 + 0.0000i
Исследуйте пространственные характеристики корреляции, определяющие выбор антенны
Включите выбор передающей и приемной антенны для mimoChan
объект. Размер входного кадра сокращается до 100.
release(mimoChan);
mimoChan.AntennaSelection = 'Tx and Rx';
modData = pskModulator(randi([0 pskModulator.ModulationOrder-1],100,1));
Выберите первую передающую антенну и вторую приемную антенну.
[channelOutput,pathGains] = mimoChan(modData,[1 0],[0 1]);
Подтвердите, что путь усиления, который возвращает MATLAB ® NaN
значения для невыбранных пар передающая-приемная антенна.
disp('Return 1 if the path gains for the second transmit antenna are NaN:');
Return 1 if the path gains for the second transmit antenna are NaN:
disp(isequal(isnan(squeeze(pathGains(:,:,2,:))), ones(100,2,2)));
1
disp('Return 1 if the path gains for the first receive antenna are NaN:');
Return 1 if the path gains for the first receive antenna are NaN:
disp(isequal(isnan(squeeze(pathGains(:,:,:,1))), ones(100,2,2)));
1
Создайте частотно-избирательный канал MIMO и отобразите его импульсную и частотные характеристики.
Установите частоту дискретизации 10 МГц и задайте задержки пути и усиления с помощью параметров расширенного канала автомобиля A (EVA). Установите максимальный доплеровский сдвиг на 70 Гц.
fs = 10e6; % Hz pathDelays = [0 30 150 310 370 710 1090 1730 2510]*1e-9; % sec avgPathGains = [0 -1.5 -1.4 -3.6 -0.6 -9.1 -7 -12 -16.9]; % dB fD = 70; % Hz
Создайте Системный объект канала 2x2 MIMO с ранее заданными параметрами и установите Visualization
свойство к Impulse and frequency responses
использование пар "имя-значение". По умолчанию отображается пара антенн, соответствующая передающей антенне 1 и приемной антенне 1.
mimoChan = comm.MIMOChannel('SampleRate',fs, ... 'PathDelays',pathDelays, ... 'AveragePathGains',avgPathGains, ... 'MaximumDopplerShift',fD, ... 'Visualization','Impulse and frequency responses');
Сгенерируйте случайные двоичные данные и передайте их через канал MIMO. График импульсной характеристики позволяет вам легко идентифицировать отдельные пути и соответствующие им коэффициенты фильтра. Частотно-избирательный характер канала EVA показан графиком частотной характеристики.
x = randi([0 1],1000,2); y = mimoChan(x);
Релиз о mimoChan
и установите AntennaPairsToDisplay
свойство для [2 1], чтобы просмотреть пару антенн, соответствующую передающей антенне 2 и приемной антенне 1. Необходимо освободить объект, так как свойство не настраивается.
release(mimoChan) mimoChan.AntennaPairsToDisplay = [2 1]; y = mimoChan(x);
Создайте и визуализируйте доплеровские спектры канала MIMO, имеющего два пути.
Создайте массив ячеек доплеровских структур, которые будут использоваться при создании канала. Доплеровский спектр первого пути имеет форму колокола, а второй путь является плоской.
dp{1} = doppler('Bell'); dp{2} = doppler('Flat');
Создайте канал MIMO по умолчанию 2x2 с двумя путями и доплеровским сдвигом на 100 Гц с использованием пар "имя-значение". Установите Visualization
свойство к Doppler spectrum
и установите PathsForDopplerDisplay
по 1. Будет отображен допплеровский спектр первого пути.
mimoChan = comm.MIMOChannel('SampleRate',1000, ... 'PathDelays',[0 0.002], ... 'AveragePathGains',[0 -3], ... 'MaximumDopplerShift',100, ... 'DopplerSpectrum',dp, ... 'Visualization','Doppler spectrum', ... 'PathsForDopplerDisplay',1);
Передайте случайные данные через канал MIMO, чтобы сгенерировать Допплеровский спектр первого пути. Поскольку график Допплеровского спектра обновляется только тогда, когда его буфер заполнен, mimoChan
функция вызывается несколько раз, чтобы улучшить точность оценки. Обратите внимание, что спектр имеет форму колокола и что его минимальная и максимальная частоты находятся в пределах, установленных MaximumDopplerShift
.
for k = 1:25 x = randi([0 1],10000,2); y = mimoChan(x); end
Релиз о mimoChan
и установите PathsForDopplerDisplay
свойство для 2. Необходимо освободить объект, так как свойство не настраивается. Вызовите функцию несколько раз, чтобы отобразить Допплеровский спектр второго пути. Заметьте, что спектр плоский.
release(mimoChan) mimoChan.PathsForDopplerDisplay = 2; for k = 1:25 x = randi([0 1],10000,2); y = mimoChan(x); end
Создайте объект канала MIMO и передайте данные через него с помощью метода суммы синусоидов. Пример демонстрирует, как состояние канала поддерживается в случаях, когда данные прерывисто передаются.
Определите общее время симуляции и три временных сегмента, для которых будут переданы данные. В этом случае канал моделируется в течение 1 с со частотой дискретизации 1000 Гц. Одна непрерывная последовательность данных с 1000 выборками передается во время 0. Три пакета данных со 100 выборками передаются в момент времени 0,1 с, 0,4 с и 0,7 с.
t0 = 0:0.001:0.999; % Transmission 0 t1 = 0.1:0.001:0.199; % Transmission 1 t2 = 0.4:0.001:0.499; % Transmission 2 t3 = 0.7:0.001:0.799; % Transmission 3
Сгенерируйте случайные двоичные данные, соответствующие ранее заданным временным интервалам.
d0 = randi([0 1],1000,2); % 1000 samples d1 = randi([0 1],100,2); % 100 samples d2 = randi([0 1],100,2); % 100 samples d3 = randi([0 1],100,2); % 100 samples
Создайте плоский затухающий канал 2x2 MIMO с Системным объектом Sum of sinusoids
метод затухания. Чтобы результаты могли быть повторены, задайте seed с помощью пары "имя-значение". Как InitialTime
свойство не задано, канал с замираниями будет моделироваться с момента 0. Включите выходной порт усиления пути.
mimoChan1 = comm.MIMOChannel('SampleRate',1000, ... 'MaximumDopplerShift',5, ... 'RandomStream','mt19937ar with seed', ... 'Seed',17, ... 'FadingTechnique','Sum of sinusoids', ... 'PathGainsOutputPort',true);
Создайте клон канала MIMO Системного объекта. Установите InitialTimeSource
свойство к Input port
так, что время смещения замирающего канала может быть задано как входной параметр к mimoChan
функция.
mimoChan2 = clone(mimoChan1);
mimoChan2.InitialTimeSource = 'Input port';
Передайте случайные двоичные данные через объект первого канала mimoChan1
. Данные передаются за все 1000 временных выборок. В данном примере требуется только комплексное усиление пути.
[~,pg0] = mimoChan1(d0);
Передайте случайные данные через объект второго канала, mimoChan2
, где начальные смещения времени предусмотрены в качестве входных параметров.
[~,pg1] = mimoChan2(d1,0.1); [~,pg2] = mimoChan2(d2,0.4); [~,pg3] = mimoChan2(d3,0.7);
Сравните количество выборок, обработанных двумя каналами с помощью info
способ. Можно увидеть, что 1000 выборки были обработаны mimoChan1
в то время как только 300 были обработаны mimoChan2
.
G = info(mimoChan1); H = info(mimoChan2); [G.NumSamplesProcessed H.NumSamplesProcessed]
ans = 1×2
1000 300
Преобразуйте коэффициент усиления пути в децибелы для пути, соответствующего первой передающей и первой приемной антенне.
pathGain0 = 20*log10(abs(pg0(:,1,1,1))); pathGain1 = 20*log10(abs(pg1(:,1,1,1))); pathGain2 = 20*log10(abs(pg2(:,1,1,1))); pathGain3 = 20*log10(abs(pg3(:,1,1,1)));
Постройте график коэффициентов усиления пути для непрерывных и прерывистых случаев. Обратите внимание, что усиления для трех сегментов идеально соответствуют усилению для непрерывного случая. Выравнивание двух подсвечивает, что метод суммирования синусоидов идеально подходит для симуляции пакетированных данных, когда характеристики канала поддерживаются, даже когда данные не передаются.
plot(t0,pathGain0,'r--') hold on plot(t1,pathGain1,'b') plot(t2,pathGain2,'b') plot(t3,pathGain3,'b') grid xlabel('Time (sec)') ylabel('Path Gain (dB)') legend('Continuous','Discontinuous','location','nw')
Продемонстрировать преимущество использования метода суммирования синусоидов с замираниями при симуляции канала с данными о пакете.
Установите параметры симуляции так, чтобы частота дискретизации составляла 100 кГц, общее время симуляции - 100 секунд, а коэффициент заполнения для данных о пакете - 25%.
fs = 1e5; % Hz tsim = 100; % seconds dutyCycle = 0.25;
Создайте плоский затухающий объект канала 2x2 MIMO с помощью Filtered Gaussian noise
по умолчанию методы.
fgn = comm.MIMOChannel('SampleRate',fs);
Создайте аналогичный объект канала MIMO с помощью Sum of sinusoids
метод, в котором время начала процесса затухания задается как входной параметр.
sos = comm.MIMOChannel('SampleRate',fs, ... 'FadingTechnique','Sum of sinusoids', ... 'NumSinusoids',48, ... 'InitialTimeSource','Input port');
Запустите непрерывную последовательность случайных бит через фильтрованный объект канала MIMO Гауссова шума. Используйте функции секундомера для измерения времени выполнения вызова функции.
tic y = fgn(randi([0 1],fs*tsim,2)); tFGN = toc;
Чтобы передать пакет данных каждую секунду, передайте случайные биты через сумму синусоидов объекта канала MIMO путем вызова sos
функция внутри цикла for. Используйте таймер секундомера tic/toc, чтобы измерить время выполнения.
tic for k = 1:tsim z = sos(randi([0 1],fs*dutyCycle,2),0.5+(k-1)); end tSOS = toc;
Сравните отношение суммы времени выполнения синусоидов к отфильтрованному времени выполнения Гауссова шума. Отношение меньше единицы, что указывает на то, что сумма метода синусоидов быстрее.
tSOS/tFGN
ans = 0.2151
Обработка с замираниями по ссылке описана в Методологии симуляции многолучевых каналов с замираниями и принимает те же параметры для всех (N T × N R) ссылок канала MIMO. Каждая ссылка содержит все мультипути для этой ссылки.
Модель Кронекера принимает, что пространственные корреляции на передающей и приемной сторонах разделимы. Эквивалентно, направление отправления (DoD) и направления прибытия (DoA) спектры приняты разделяемыми. Полная матрица корреляции:
Символ ⊗ представляет продукт Кронекера.
R t представляет корреляционную матрицу на стороне передачи :, размера N T-by- N T.
R r представляет матрицу корреляции на стороне приема :, размера N R-by- N R.
Можно получить реализацию матрицы канала MIMO как:
A является N R-by N T матрицей независимых идентично распределенных комплексных гауссовских переменных с нулевым средним и единичным отклонением.
Частотный коэффициент отсечения f c определяется для различных типов допплеровского спектра.
Для любого типа допплеровского спектра, кроме Гауссова и биГауссова, f c равен 1 .
Для doppler
('Gaussian')
спектральный тип, f c равен NormalizedStandardDeviation
.
Для doppler
('BiGaussian')
спектральный тип:
Если на PowerGains
(1)
и NormalizedCenterFrequencies
(2)
оба значения полей 0
, затем f c равняется NormalizedStandardDeviation
(1)
.
Если на PowerGains
(2)
и NormalizedCenterFrequencies
(1)
оба значения полей 0
, затем f c равняется NormalizedStandardDeviation
(2)
.
Если на NormalizedCenterFrequencies
значение поля [0,0]
и NormalizedStandardDeviation
поле имеет два одинаковых элемента, тогда f c равен NormalizedStandardDeviation
(1)
.
Во всех других случаях f c равняется 1.
Когда объект находится в режиме выбора антенны, он использует следующие алгоритмы для обработки входного сигнала:
Все усиления случайного пути всегда генерируются и продолжают развиваться для каждой ссылки, независимо от того, выбрана ли данная ссылка. Значения усиления пути, выводимые для не выбранных ссылок, заполнены NaN
.
Пространственная корреляция применяется только к выбранным передающей и/или приемной антеннам, и коэффициенты корреляции являются соответствующими значениями в матрицах передачи, приема или комбинированной корреляции. Другими словами, матрица пространственной корреляции для выбранных передающих или приемных антенн является подматрицей значения матричных свойств передачи, приема или комбинированной пространственной корреляции.
Для путей сигнала, сопоставленных с неактивными антеннами, сигнал с нулевой степенью передается в канальный фильтр.
Нормализация выходного канала происходит по количеству выбранных приемных антенн.
[1] Oestges, C. и B. Clerckx. MIMO Wireless Communications: от распространения в реальном мире до проекта кода пространства-времени, академическая пресса, 2007.
[2] Correira, L. M. Mobile Broadband Multimedia Networks: Technologies, Models and Tools for 4G, Academic Press, 2006.
[3] Кермоаль, Й. П., Л. Шумахер, К. И. Педерсен, П. Е. Могенсен, и Ф. Фредериксен. Стохастическая модель радиоканала MIMO с экспериментальной валидацией. Журнал IEEE по отдельным областям коммуникаций. Том 20, № 6, 2002, стр. 1211-1226.
[4] Иерухим, М., П. Балабан, и К. С. Шанмуган. Simulation of Communication Systems, Second Edition, New York: Kluwer Academic/Plenum, 2000.
[5] Pätzold, Matthias, Cheng-Xiang Wang, and Bjorn Olav Hogstand. «Два новых метода на основе суммы синусоидов для эффективной генерации нескольких некоррелированных Релеевских замираний волн». Транзакции IEEE по беспроводной связи. Том 8, № 6, 2009, стр. 3122-3131.
Указания и ограничения по применению:
Смотрите Системные объекты в Генерации кода MATLAB (MATLAB Coder).
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.