поэтапный. LCMVBeamformer

Узкополосно передайте формирователь луча LCMV

Описание

Поэтапное. Объект LCMVBeamformer реализует узкополосный формирователь луча минимального отклонения линейного ограничения (LCMV) для сенсорной матрицы. Формирователь луча LCMV принадлежит семейству ограниченных формирователей луча оптимизации.

К сигналам beamform, прибывающим в сенсорную матрицу:

  1. Создайте объект phased.LCMVBeamformer и установите его свойства.

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

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Синтаксис

beamformer = phased.LCMVBeamformer
beamformer = phased.LCMVBeamformer(Name,Value)

Описание

beamformer = phased.LCMVBeamformer создает Систему формирователя луча LCMV object™, beamformer, со значениями свойств по умолчанию.

beamformer = phased.LCMVBeamformer(Name,Value) создает формирователь луча LCMV с каждым набором свойства Name к заданному Value. Можно задать дополнительные аргументы пары "имя-значение" в любом порядке как (Name1, Value1..., NameN, ValueN). Заключите каждое имя свойства в одинарные кавычки.

Пример: beamformer = phased.LCMVBeamformer('Constraint',[1;1]) устанавливает матрицу ограничений.

Свойства

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

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

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

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

Матрица ограничений, заданная как N с комплексным знаком-by-K матрица. Каждый столбец матрицы представляет ограничение. N является числом элементов в сенсорной матрице, и K является количеством ограничений. K должен быть меньше чем или равен N, K ≤ N.

Пример: [1 1i;1 1i]

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

Желаемый ответ формирователя луча LCMV, заданного как K с комплексным знаком-by-1 вектор, где K является количеством ограничений в свойстве Constraint. Каждый элемент в векторе задает желаемый ответ ограничения, заданного в соответствующем столбце свойства Constraint. Значение каждый создает ответ без искажений, и значение нуля создает пустой ответ.

Пример: [1;0]

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

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

Настраиваемый: да

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

Включите вход данных тренировки, заданный как false или true. Когда вы установите это свойство на true, используйте входной параметр данных тренировки, XT, при выполнении объекта. Установите это свойство на false использовать входные данные, X, как данные тренировки.

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

Включите вывод beamforming весов, заданных как false или true. Чтобы получить beamforming веса, установите это свойство на true и используйте соответствующий выходной аргумент, W. Если вы не хотите получать веса, установите это свойство на false.

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

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

Для версий ранее, чем R2016b, используйте функцию step, чтобы запустить алгоритм Системного объекта. Аргументы к step являются объектом, который вы создали, сопровождаемый аргументами, показанными в этом разделе.

Например, y = step(obj,x) и y = obj(x) выполняют эквивалентные операции.

Синтаксис

Y = beamformer(X)
Y = beamformer(X,XT)
[Y,W] = beamformer(___)

Описание

пример

Y = beamformer(X) выполняет LCMV beamforming на данных о входном массиве, X, и возвращает beamformed выходной параметр в Y.

Y = beamformer(X,XT) использование XT как данные тренировки, чтобы вычислить beamforming веса. Чтобы использовать этот синтаксис, установите свойство TrainingInputPort на true.

[Y,W] = beamformer(___) возвращает beamforming веса W. Чтобы использовать этот синтаксис, установите свойство WeightsOutputPort на true.

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

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

Данные об элементе массива, заданные как матрица anM-by-N, где N является числом элементов в сенсорной матрице.

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

Пример: [1 0.5 2.6; 2 -0.2 0]

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

Данные тренировки, заданные как P-by-N матрица. N является числом элементов сенсорной матрицы. P является длиной данных тренировки и должен быть больше, чем N.

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

Пример: [1 0.5 2.6; 2 -0.2 0; 3 -2 -1]

Зависимости

Чтобы включить этот аргумент, установите свойство TrainingInputPort на true.

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

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

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

Beamformed выходной параметр, возвращенный как M с комплексным знаком-by-1 вектор.

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

Веса формирователя луча, возвращенные как N с комплексным знаком-by-1 вектор. N является числом элементов в сенсорной матрице.

Зависимости

Чтобы включить этот аргумент, установите свойство WeightsOutputPort на true.

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

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

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

release(obj)

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

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

Примеры

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

Примените формирователь луча LCMV к ULA с 5 элементами изотропных элементов датчика, сохранив сигнал от желаемого направления. Рабочая частота составляет 300 МГц.

Моделируйте низкочастотный сигнал синусоиды в гауссовом шуме.

f = 50;
t = (0:.001:.3)';
x = sin(2*pi*f*t);
c = physconst('LightSpeed');
fc = 300e6;
lambda = c/fc;
incidentAngle = [45;0];
antenna = phased.IsotropicAntennaElement('FrequencyRange',[20 20e8]);
array = phased.ULA('NumElements',5,'ElementSpacing',lambda/2,...
    'Element',antenna);
x = collectPlaneWave(array,x,incidentAngle,fc,c);
noise = 0.2*(randn(size(x)) + 1j*randn(size(x)));
rx = x + noise;

Beamform массив.

steervec = phased.SteeringVector('SensorArray',array,...
    'PropagationSpeed',c);
beamformer = phased.LCMVBeamformer('Constraint',steervec(fc,incidentAngle),'DesiredResponse',1);
y = beamformer(rx);

Постройте сигналы beamformed и оригинал.

plot(t,real(rx(:,3)),'r:',t,real(y),t,real(x(:,3)),'g')
xlabel('Time (sec)')
ylabel('Amplitude')
legend('Signal at Sensor 3','Beamformed Signal','Noise Free Signal')

Этот пример показывает, как использовать формирователь луча LCMV, чтобы указать пустой указатель ответа массивов в направлении вмешивающегося источника. Массив является универсальной линейной матрицей (ULA) с 10 элементами. По умолчанию элементы ULA являются изотропными антеннами, созданными Системой phased.IsotropicAntennaElement object™. Установите частотный диапазон элементов антенны так, чтобы несущая частота нашлась в рабочем диапазоне. Несущая частота составляет 1 ГГц.

fc = 1e9;
lambda = physconst('LightSpeed')/fc;
array = phased.ULA('NumElements',10,'ElementSpacing',lambda/2);
array.Element.FrequencyRange = [8e8 1.2e9];

Моделируйте тестовый сигнал с помощью простого меандра.

t = linspace(0,0.3,300)';
testsig = zeros(size(t));
testsig(201:205) = 1;

Примите, что меандр является инцидентом на ULA от угла азимута на 30 ° и повышения на 0 °. Используйте функцию collectPlaneWave Системного объекта ULA, чтобы моделировать прием импульсной формы волны от инцидентного угла.

angle_of_arrival = [30;0];
x = collectPlaneWave(array,testsig,angle_of_arrival,fc);

x сигнала является матрицей с десятью столбцами. Каждый столбец представляет полученный сигнал в одном из элементов массива.

Создайте обычный формирователь луча сдвига фазы. Установите свойство WeightsOutputPort на true выводить пространственные веса фильтра.

convbeamformer = phased.PhaseShiftBeamformer('SensorArray',array,...
    'OperatingFrequency',1e9,'Direction',angle_of_arrival,...
    'WeightsOutputPort',true);

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

rng default
npower = 0.5;
x = x + sqrt(npower/2)*(randn(size(x)) + 1i*randn(size(x)));

Создайте интерференционный источник с помощью Системного объекта phased.BarrageJammer. Задайте заградительный передатчик помех, чтобы иметь эффективную излучаемую мощность 10 Вт. Интерференционный сигнал от заградительного передатчика помех является инцидентом на ULA от угла азимута на 120 ° и повышения на 0 °. Используйте функцию collectPlaneWave Системного объекта ULA, чтобы моделировать прием сигнала передатчика помех.

jammer = phased.BarrageJammer('ERP',10,'SamplesPerFrame',300);
jamsig = jammer();
jammer_angle = [120;0];
jamsig = collectPlaneWave(array,jamsig,jammer_angle,fc);

Добавьте белый Гауссов шум с комплексным знаком, чтобы моделировать шумовые вклады, не непосредственно сопоставленные с создающим затор сигналом. Снова, установите поток случайных чисел по умолчанию для восстанавливаемых результатов. Эта шумовая степень на 0 дБ ниже степени передатчика помех. Beamform сигнал с помощью обычного формирователя луча.

noisePwr = 1e-5;
rng(2008);
noise = sqrt(noisePwr/2)*...
    (randn(size(jamsig)) + 1j*randn(size(jamsig)));
jamsig = jamsig + noise;
rxsig = x + jamsig;
[yout,w] = convbeamformer(rxsig);

Реализуйте адаптивный формирователь луча LCMV с помощью того же массива ULA. Используйте данные без целей, jamsig, как данные тренировки. Выведите сигнал beamformed и веса формирователя луча.

steeringvector = phased.SteeringVector('SensorArray',array,...
    'PropagationSpeed',physconst('LightSpeed'));
LCMVbeamformer = phased.LCMVBeamformer('DesiredResponse',1,...
    'TrainingInputPort',true,'WeightsOutputPort',true);
LCMVbeamformer.Constraint = steeringvector(fc,angle_of_arrival);
LCMVbeamformer.DesiredResponse = 1;
[yLCMV,wLCMV] = LCMVbeamformer(rxsig,jamsig);

Постройте обычный формирователь луча вывод и адаптивный формирователь луча вывод.

subplot(211)
plot(t,abs(yout))
axis tight
title('Conventional Beamformer')
ylabel('Magnitude')
subplot(212)
plot(t,abs(yLCMV))
axis tight
title('LCMV (Adaptive) Beamformer')
xlabel('Seconds')
ylabel('Magnitude')

Адаптивный формирователь луча значительно улучшает ОСШ меандра в 0,2 с.

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

subplot(211)
pattern(array,fc,[-180:180],0,'PropagationSpeed',physconst('LightSpeed'),...
    'CoordinateSystem','rectangular','Type','powerdb','Normalize',true,...
    'Weights',w)
title('Array Response with Conventional Beamforming Weights');
subplot(212)
pattern(array,fc,[-180:180],0,'PropagationSpeed',physconst('LightSpeed'),...)
    'CoordinateSystem','rectangular','Type','powerdb','Normalize',true,...
    'Weights',wLCMV)
title('Array Response with LCMV Beamforming Weights');

Адаптивная beamform помещает пустой указатель в угле падения интерференционного сигнала, 120 °.

Алгоритмы

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

Ссылки

[1] Деревья фургона, H. Оптимальная обработка матриц. Нью-Йорк: Wiley-межнаука, 2002.

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

Представленный в R2012a