comm.ChannelFilter

Пропустите сигнал с использованием многолучевых усилений при заданных задержках пути

Описание

Используйте comm.ChannelFilter Система object™ для фильтрации сигнала с использованием многолучевых усилений при заданных задержках пути.

Для фильтрации сигнала с использованием многолучевых усилений:

  1. Создайте comm.ChannelFilter Объекту и установите его свойства.

  2. Вызывайте объект с аргументами, как будто это функция.

Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».

Создание

Описание

пример

chanFilt = comm.ChannelFilter создает многолучевой канал фильтра Системный объект, чтобы фильтровать входной сигнал с усилениями пути при заданных задержках пути

chanFilt = comm.ChannelFilter(Name,Value) устанавливает свойства с помощью одной или нескольких пар "имя-значение". Для примера, 'SampleRate',1e6 устанавливает частоту дискретизации на 1 МГц. Заключайте каждое имя свойства в кавычки.

Свойства

расширить все

Если не указано иное, свойства являются нетронутыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируются, когда вы вызываете их, и release функция разблокирует их.

Если свойство настраивается, можно изменить его значение в любой момент.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.

Скорость дискретизации входного сигнала, заданная как действительный, положительный скаляр.

Типы данных: double

Задержки дискретных путей в секундах, заданные как действительный скаляр или вектор.

Типы данных: double

Источник задержки фильтра канала, заданный как 'Auto' или 'Custom'.

  • Задайте FilterDelaySource на 'Auto' чтобы задать задержку фильтра канала как минимально возможное значение.

  • Задайте FilterDelaySource на 'Custom' чтобы задать задержку фильтра канала в качестве пользовательского значения. Настраиваемое значение не может быть меньше минимально возможного значения.

Типы данных: char

Задержка фильтра канала в выборках, заданная как действительный, неотрицательный, целочисленный скаляр.

Зависимости

Чтобы включить это свойство, установите FilterDelaySource свойство к 'Custom'. Заданное значение должно быть не меньше автоматической задержки фильтра канала при установке FilterDelaySource на 'Auto'.

Типы данных: double

Нормализуйте выходы по количеству приемных антенн, заданных как 'true' (1) или 'false' (0).

Типы данных: logical

Использование

Синтаксис

Описание

y = chanFilt(x,g) фильтрует входной сигнал x, через многолучевой канал с усилениями пути g, в местах задержки пути, заданных свойством PathDelays.

Входные параметры

расширить все

Входной сигнал, заданный как матрица. Аргумент x должна быть N s-by- N t-матрицей, где N s - количество выборок, а N t - количество передающих антенн.

Типы данных: double
Поддержка комплексного числа: Да

Коэффициент усиления пути, заданный как массив. Вход G должен быть массивом N s-by- N p-by- N t-by- N r или 1-by- N p-by- N t-by- N r, где N r - количество приемных антенн, а N p - количество путей, т.е. длина свойства PathDelays.

Типы данных: double
Поддержка комплексного числа: Да

Выходные аргументы

расширить все

Выход канала, возвращенный как N s-by- N r-матрица.

Типы данных: double
Поддержка комплексного числа: Да

Функции объекта

Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем obj, используйте следующий синтаксис:

release(obj)

расширить все

infoВозвращает характеристическую информацию о фильтре канала
stepЗапуск алгоритма системного объекта
releaseОтпустите ресурсы и допустите изменения в значениях свойств системного объекта и входных характеристиках
resetСброс внутренних состояний Системного объекта

Примеры

свернуть все

В распределенной системе MIMO исследуйте пространственное разнесение, передав один и тот же сигнал от двух географически разделенных передатчиков и объединив принятые сигналы в одном приемнике. Используйте трассировку лучей, чтобы проанализировать пути распространения и усиления от каждого передатчика к приемнику.

Выполните трассировку луча

Импорт данных о созданиях для Чикаго в siteviewer из файла OpenStreetMap (osm). Для получения дополнительной информации о файле osm см. [1]. Разместите в городе два передатчика и один приемник.

sv = siteviewer('buildings','Chicago.osm'); 
rx = rxsite('Name','Receiver', ...
    'Latitude',41.878543,'Longitude',-87.630599, ...
    'AntennaHeight',1.5);
show(rx);
tx1 = txsite('Name','Transmitter #1', ...
    'Latitude',41.878996,'Longitude',-87.629361); 
show(tx1);
tx2 = txsite('Name','Transmitter #2', ...
    'Latitude',41.880142,'Longitude',-87.630850);
show(tx2);

Выполните трассировку лучей от каждого сайта передатчика до сайта приемника с отражением до первого порядка. Постройте график вычисленных лучей.

rays  = raytrace([tx1, tx2],rx);
plot([rays{:}]);

Трассировка лучей находит семь лучевых путей к приемнику. Существует четыре лучевых пути от первого участка передатчика и три лучевых пути от второго участка передатчика. На карте мы можем визуально увидеть, что первый передатчик ближе к приемнику, чем второй передатчик. Лучи, сопоставленные с первым передатчиком, имеют меньшие задержки распространения, чем второй передатчик.

pd1 = [rays{1}.PropagationDelay]
pd1 = 1×4
10-6 ×

    0.3830    0.3839    0.5476    0.6482

pd2 = [rays{2}.PropagationDelay]
pd2 = 1×3
10-6 ×

    0.5967    0.5973    0.6059

Создайте один фильтр для каждого узла передатчика. Задайте частоту дискретизации 30 МГц и используйте минимальную задержку среди семи лучей в качестве ссылки времени 0.

chanFilt1 = comm.ChannelFilter('SampleRate',30e6, ...
    'PathDelays',pd1-min([pd1, pd2]))
chanFilt1 = 
  comm.ChannelFilter with properties:

                 SampleRate: 30000000
                 PathDelays: [0 8.7600e-10 1.6459e-07 2.6516e-07]
          FilterDelaySource: 'Auto'
    NormalizeChannelOutputs: true

chanFilt2 = comm.ChannelFilter('SampleRate',30e6, ...
    'PathDelays',pd2-min([pd1, pd2]))
chanFilt2 = 
  comm.ChannelFilter with properties:

                 SampleRate: 30000000
                 PathDelays: [2.1372e-07 2.1434e-07 2.2294e-07]
          FilterDelaySource: 'Auto'
    NormalizeChannelOutputs: true

Фильтры канала получают различные значения задержки фильтра. Используйте info функция объекта от comm.ChannelFilter для отображения задержки фильтра двух фильтров канала.

fd1 = chanFilt1.info.ChannelFilterDelay
fd1 = 7
fd2 = chanFilt2.info.ChannelFilterDelay
fd2 = 1

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

set(chanFilt1,"FilterDelaySource",'Custom', ...
    "FilterDelay",max(fd1,fd2));
set(chanFilt2, ...
    "FilterDelaySource",'Custom', ...
    "FilterDelay",max(fd1,fd2));

Применить объединение приемных сигналов

Настройте системные параметры, присвоив только одну изотропную антенну на каждом сайте.

Nt = 1;    % Number of transmit elements
Ns = 1000; % Samples per frame
M  = 64;   % Modulation order 

Извлеките усиления пути из вычисленных лучей. Предположим, что сайты статичны, и доплеровский сдвиг не введен.

pg1  = 10.^(-[rays{1}.PathLoss]/20) .* exp(1i*[rays{1}.PhaseShift]);
pg2  = 10.^(-[rays{2}.PathLoss]/20) .* exp(1i*[rays{2}.PhaseShift]);

Сгенерируйте систему координат случайных 64-QAM сигналов. Выполните фильтрацию канала для каждого узла передатчика и примите объединение сигнала. Объединенный распределенный канал MIMO 2x1 имеет задержку фильтра max (fd1, fd2).

x  = qammod(randi([0, M-1],Ns,Nt),M);
y = chanFilt1(x,pg1) + chanFilt2(x,pg2);

Приложение

[1] Файл osm загружается из https://www.openstreetmap.org, что обеспечивает доступ к данным карты, полученной из толпы, по всему миру. Данные лицензированы под лицензией Open Data Commons Open Database License (ODbL), https://opendatacommons.org/licenses/odbl/.

Создайте объект фильтра канала с профилем задержки модели LTE Extended Vehicular A (EVA).

chanFilt = comm.ChannelFilter( ...
    'SampleRate', 30.72e6, ...
    'PathDelays', [0 30 150 310 370 710 1090 1730 2510]*1e-9);

Настройте системные параметры. Существует две передающей и приемной антенны.

[Nt, Nr] = deal(2);
Ns = 30720;
Np = length(chanFilt.PathDelays);
M  = 256;

Сгенерируйте сигнал случайного 256-QAM и комплексные усиления пути.

x = qammod(randi([0, M-1], Ns, Nt), M);
g = complex(rand(Ns, Np, Nt, Nr), rand(Ns, Np, Nt, Nr));

Фильтрация сигнала с путем коэффициентами усиления для профиля задержки EVA.

y = chanFilt(x, g);

Алгоритмы

Фильтр канала реализует полосовой фильтр с дробной задержкой (FD) конечной импульсной характеристикой (КИХ) с длиной 16 коэффициентов для каждой дробной задержки кандидата в 0, 0,02, 0,04,..., 0,98.

Каждый дискретный путь округлен до ближайшей дробной задержки кандидата, поэтому предел ошибки задержки составляет 1% от шага расчета. Чтобы достичь групповой задержки полосы пропускания, превышающей 80%, и величины полосы пропускания, превышающей 90%, алгоритм выбирает оптимальные значения коэффициентов конечной импульсной характеристики для каждой дробной задержки, удовлетворяя при этом следующим критериям:

  • Пульсация групповой задержки ≤ 10%

  • Величина ≤ 2 дБ

  • Ослабление полосы пропускания величины = 3 дБ

Графики показывают полосы пропускания, которые удовлетворяют критериям проекта для пульсации задержки группы, пульсации величины и ослабления полосы пропускания величины.

Для получения дополнительной информации смотрите статью Объектно-ориентированный подход на основе Matlab к многолучевой симуляции замирания канала в MATLAB® Центральный.

Расширенные возможности

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

.
Введенный в R2020b