Скомпилируйте, с помощью codegen
(MATLAB Coder), функциональный EstimateDOA.m
. Эта функция оценивает направления прибытия (DOA) двух сигналов с добавленным шумом, которые получены стандартным Универсальным массивом линии (ULA) с 10 элементами. Антенна рабочая частота составляет 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
ухудшает оценки углов азимута.