The result you see is due to the symmetry of the array. You can think the array as a spatial filter. For a ULA, it can distinguish two directions if these two directions make different angles with the array axis. Therefore, in a 3D space, you can think of that the iso-angle surfaces for a ULA make up cones around the array axis. In your example, like you have observed, because 30 degrees and 150 degrees both are 60 degrees from the array axis, from the array perspective, they are the same. Just like a frequency domain filter that cannot separate two signals in the same frequency, the spatial filter fails to separate two signals that appear to be at the identical angle from the array.
There are ways to get around it. One possible way is to use a element pattern that is not isotropic. For example, if you use an array with cosine element, like
ula = phased.ULA('NumElements',10,'ElementSpacing',wavelength/2,...
'Element',phased.CosineAntennaElement);
Then the array only looks toward the forward direction and only the signal from 30 degrees will be received. Another way is to explore the time/frequency domain characteristics of the signals. If the two signals are orthogonal in time domain, then even though they cannot be separated in space, they can be separated via some time domain processing.
HTH
Best Answer