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