Сгенерируйте MEX-функцию для оценки направлений прибытия

Скомпилируйте, используя codegen (MATLAB Coder), функция 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 Coder) в командной строке для генерации 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 Coder) в командной строке для генерации 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 ухудшает оценки углов азимута.

Для просмотра документации необходимо авторизоваться на сайте