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

Нормируйте выходные параметры на количество, получают антенны в виде логического 1 TRUE) или 0 ложь).

Типы данных: логический

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

Синтаксис

Описание

пример

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

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

развернуть все

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

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

Усиление пути в виде массива. Входом G должен быть N s Np Nt Nr или 1 Np Nt Nr массивом, где N r является количеством, получают антенны, и N p является количеством путей, i.e., длина свойства PathDelays.

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

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

развернуть все

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

Типы данных: 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×11
10-6 ×

    0.3830    0.3839    0.5476    0.6482    0.5486    0.5487    0.5487    0.6572    0.6946    0.7141    0.8874

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

    0.5967    0.5974    0.6059    0.6066    0.6255

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

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

                 SampleRate: 30000000
                 PathDelays: [0 8.9075e-10 1.6461e-07 2.6516e-07 1.6557e-07 1.6569e-07 1.6568e-07 2.7423e-07 3.1157e-07 3.3106e-07 5.0442e-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.1441e-07 2.2294e-07 2.2357e-07 2.4247e-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 сигналов. Выполните фильтрацию канала для каждого ретранслятора и получите объединение сигнала. Объединенное 2x1 распределило канал MIMO, имеет задержку фильтра макс. (fd1, fd2).

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

Приложение

[1] osm файл загружается с https://www.openstreetmap.org, который обеспечивает доступ к полученным толпой данным о карте во всем мире. Данные лицензируются под Открытыми Данными палата общин Открытая Лицензия Базы данных (ODbL), https://opendatacommons.org/licenses/odbl/.

Создайте объект фильтра канала с LTE, Расширенным Автомобильный модель (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);

Используя одну Систему канала MIMO object™ и два тождественно сконфигурированных канала фильтруют Системные объекты, переключают симуляцию уровня ссылки между 3 2 нисходящим каналом и обратной величиной 2 3 восходящие передачи сигнала.

Задайте системные параметры.

modOrder = 256;        % Modulation order
Nant1 = 3;             % Number of 'transmit' antennas
Nant2 = 2;             % Number of 'receive' antennas   
Rs = 1e6;              % Sample rate 
pd = [0 1.5 2.3]*1e-6; % Path delays
frmLen = 1e3;          % Frame length

Создайте Систему канала MIMO object™, конфигурируя его для генерации усиления пути путем отключения фильтрации канала.

chan = comm.MIMOChannel( ...
    'SampleRate',Rs, ...
    'PathDelays',pd, ...
    'AveragePathGains',[1.5 1.2 0.2], ...
    'MaximumDopplerShift',300, ...
    'SpatialCorrelationSpecification','none', ...
    'NumTransmitAntennas',Nant1, ...
    'NumReceiveAntennas',Nant2, ...
    'ChannelFiltering',false, ...
    'NumSamples',frmLen);

Создайте идентичные Системные объекты фильтра канала для обоих направлений передачи: один фильтр канала для Nant1- Nant2 передайте в нисходящем направлении канал (3 передающих антенны к 2 получают антенны), и взаимный фильтр канала для Nant2- Nant1 восходящий канал (2 передающих антенны к 3 получают антенны).

chanFiltDownlink = comm.ChannelFilter( ...
    'SampleRate',Rs, ...
    'PathDelays',pd);
chanFiltUplink = clone(chanFiltDownlink);

Нисходящая передача

Сгенерируйте случайные усиления пути для одной системы координат нисходящего канала, 3 2 образовывают канал. Передача случайным образом сгенерировала 256-QAM сигналы через 3 2 нисходящий канал.

pgDownlink = chan();
x = qammod(randi([0 modOrder-1],frmLen,Nant1),modOrder);
yDL = chanFiltDownlink(x,pgDownlink);

Восходящая передача

Переключите направление ссылки. Запустите объект канала сгенерировать другую систему координат усилений пути, переставив его 3-е (Tx), и 4-е размерности (Rx) для взаимного восходящего канала 2 3 образовывают канал. Передача случайным образом сгенерировала 256-QAM сигналы через 2 3 взаимный восходящий канал.

pgUplink = permute(chan(),[1 2 4 3]);
x = qammod(randi([0 modOrder-1],frmLen,Nant2),modOrder);
yUL = chanFiltUplink(x,pgUplink);

Нисходящие и восходящие измерения массива

Покажите размеры нисходящих и восходящих массивов усиления пути, возвращенных объектом канала MIMI как NS-NP-NT-NR массив.

  • NS количество отсчетов.

  • NP количество задержек пути.

  • NT количество передающих антенн. Nant1 для нисходящего канала и Nant2 для восходящего канала.

  • NR количество, получают антенны. Nant2 для нисходящего канала и Nant1 для восходящего канала.

size(pgDownlink)
ans = 1×4

        1000           3           3           2

size(pgUplink)
ans = 1×4

        1000           3           2           3

Покажите размер выходных матриц канала, возвращенных объектом канала MIMI как NS-NR матрица. NS количество отсчетов. NR количество, получают антенны.

size(yDL)
ans = 1×2

        1000           2

size(yUL)
ans = 1×2

        1000           3

Алгоритмы

Фильтр канала реализует полосовой фильтр конечной импульсной характеристики (FIR) дробной задержки (FD) с длиной 16 коэффициентов для каждого кандидата дробная задержка в 0, 0.02, 0.04, …, 0.98.

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

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

  • Пульсация величины ≤ 2 дБ

  • Величина bandedge затухание = 3 дБ

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

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

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

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

Введенный в R2020b