exponenta event banner

Создание функции MEX для оценки направлений поступления

Компиляция, использование codegen (Кодер MATLAB), функция EstimateDOA.m. Эта функция оценивает направления прихода (DOA) двух сигналов с добавленным шумом, которые принимаются стандартной 10-элементной матрицей унифицированных линий (ULA). Рабочая частота антенны составляет 150 МГц, а элементы решетки разнесены на половину длины волны. Фактическое направление поступления первого сигнала - азимут 10 °, отметка 20 °. Направление поступления второго сигнала - азимут 45 °, отметка 60 °. Сигналы и шум генерируются с помощью sensorsig функция.

function [az] = EstimateDOA()
% Example:
% Estimate the DOAs of two signals received by a standard
% 10-element ULA with element spacing one half-wavelength apart.
% The antenna operating frequency is 150 MHz.
% The actual direction of the first signal is 10 degrees in
% azimuth and 20 degrees in elevation. The direction of the
% second signal is 45 degrees in azimuth and 60 degrees in
% elevation.
c = physconst('LightSpeed');
fc = 150e6;
lambda = c/fc;
fs = 8000;
nsamp = 8000;
sigma = 0.1;
ang = [10 20; 45 60]';
antenna = phased.IsotropicAntennaElement( ...
    'FrequencyRange',[100e6,300e6]);
array = phased.ULA('Element',antenna,'NumElements',10, ...
    'ElementSpacing',lambda/2);
pos = getElementPosition(array)/lambda;
sig = sensorsig(pos,nsamp,ang,sigma^2);
estimator = phased.RootMUSICEstimator('SensorArray',array,...
    'OperatingFrequency',fc,...
    'NumSignalsSource','Property','NumSignals',2);
doas = estimator(sig);
az = broadside2az(sort(doas),[20,60]);
end

Управляемый codegen (Кодер MATLAB) в командной строке для создания функции mex, EstimateDOA_mex, а затем запустите функцию mex:

codegen EstimateDOA.m
EstimateDOA_mex

Предполагаемые углы прибытия:

az =

  10.0036   45.0030

Программа содержит фиксированное значение дисперсии шума. Если требуется повторно использовать один и тот же код для различных уровней шума, можно передать дисперсию шума в качестве аргумента в функцию. Это выполняется в функции EstimateDOA1.m, показано здесь, который имеет входной аргумент sigma.

function [az] = EstimateDOA1(sigma)
% Example:
% Estimate the DOAs of two signals received by a standard
% 10-element ULA with element spacing one half-wavelength apart.
% The antenna operating frequency is 150 MHz.
% The actual direction of the first signal is 10 degrees in
% azimuth and 20 degrees in elevation. The direction of the
% second signal is 45 degrees in azimuth and 60 degrees in
% elevation.
c = physconst('LightSpeed');
fc = 150e6;
lambda = c/fc;
fs = 8000;
nsamp = 8000;
ang = [10 20; 45 60]';
antenna = phased.IsotropicAntennaElement( ...
    'FrequencyRange',[100e6,300e6]);
array = phased.ULA('Element',antenna,'NumElements',10, ...
    'ElementSpacing',lambda/2);
pos = getElementPosition(array)/lambda;
sig = sensorsig(pos,nsamp,ang,sigma^2);
estimator = phased.RootMUSICEstimator('SensorArray',array, ...
    'OperatingFrequency',fc, ...
    'NumSignalsSource','Property','NumSignals',2);
doas = estimator(sig);
az = broadside2az(sort(doas),[20,60]);
end

Управляемый codegen (Кодер MATLAB) в командной строке для создания функции mex, EstimateDOA1_mex, с использованием -args для указания типа входного аргумента. Затем запустите функцию mex с несколькими различными входными параметрами:

codegen EstimateDOA1.m -args {1}
EstimateDOA1_mex(1)
az =
   10.0130   45.0613
EstimateDOA1_mex(10)
az =
   10.1882   44.3327
EstimateDOA1_mex(15)
az =
    8.1620   46.2440

Увеличение значения sigma ухудшает оценки азимутальных углов.