``` f1 = 17000; f2 = 19000; doa1 = [40;10]; doa2 = [-60;20]; thetas = 90*pi/180 p = -pi/2:pi/180:pi/2; doa = [doa1 doa2]; fc = 18000; c = physconst('LightSpeed') lam = c/fc fs = 48000; array = phased.URA('Size',[15 12],'ElementSpacing',[lam/2 lam/2]); array.Element.FrequencyRange = [18e5 23.0e5]; fileId = fopen('D:\signal123.mat'); signal1 = fileId; %signal_reshape = reshape(signal,,2) x = collectPlaneWave(array,[signal1,signal1],doa,fc) %noise = 0.1*(randn(size(x))+1i*randn(size(x))); estimator = phased.MUSICEstimator2D('SensorArray',array,... 'OperatingFrequency',fc,... 'NumSignalsSource','Property',... 'DOAOutputPort',true,'NumSignals',2,... 'AzimuthScanAngles',-90:.5:90,... 'ElevationScanAngles',-90:.5:90) [~,doas] = estimator(x) plotSpectrum(estimator); ```
You haven't said what the problem is. Since you are just using MATLAB's pre-packaged functions, I suggest you read the MATLAB documentation (which is typically quite good).
You seem to be getting confused between azimuth, elevation and range. In its basic form, the two dimensions in "2D" MUSIC are azimuth and elevation. (Or it can be re-parameterized into a different coordinate system, such as cone angles).
However, range is significantly different. Range is not a direction. You can still use the MUSIC algorithm to estimate delay (and therefore range), but the formulation is completely different.
One way of estimating both direction and range is using the concept of the "spatio-temporal array manifold" (google can give you plenty of information about that). However, this is very sub-optimal and better results are achieved (with much less computational effort) by simply splitting the problem into two 1D searches. First estimate range (using any method you like - you can even use MUSIC to search over a "temporal" manifold). Then you can isolate the signal subspace associated with each delay (range) using geometric projections and, for each discrete range, perform a 1D azimuth search over the spatial manifold to obtain a direction estimate.