Without entering incident angle signal collection by phased.collector

6 次查看(过去 30 天)
Hey,
I want to send signal from source then will i be able to collect from antennas that are ula, without entering incident angle into collector function.
ex.
rxsig = collector(signal, inc_angle);
Collect all signals and finding angle using phase difference between linear antennas

回答(2 个)

akshatsood
akshatsood 2024-10-9
Please note that the "collector" function expects two arguments: the first represents the arriving signals, and the second denotes the arrival direction of these signals. Even if you are focused on a Uniform Linear Array (ULA), it is necessary to provide the incident angle, otherwise, an error will be thrown. The reason for this requirement is that a collector converts incident narrowband wave fields arriving from specified directions into signals that can be further processed.
In essence, the collector function serves as a crucial intermediary in signal processing. It takes the incoming wave fields, which are narrowband in nature, and transforms them into a format suitable for subsequent analysis. By specifying the direction of arrival, you ensure that the collector accurately interprets the spatial characteristics of the signals, thereby enabling more precise downstream processing.
I hope this helps.

Umeshraja
Umeshraja 2024-10-10
I understand you're asking about signal collection and direction finding using a Uniform Linear Array (ULA) antenna system without specifying an incident angle. This angle is typically given as input as these are the true angles which is unknown to the estimator.
Adding to @akshatsood’s Point, this is commonly used in finding direction and beamforming applications and are commonly referred to Direction of Arrival (DoA) estimation or Angle of Arrival (AoA) estimation.
Here is a sample example where commonly used algorithm such as MUSIC and ESPIRIT is used assuming that first signal is arriving from 10° in azimuth and 20° in elevation. The direction of the second signal is 34° in azimuth and 60° in elevation
%% Set up your ULA and signal parameters
% Array setup
numElements = 10;
array = phased.ULA('NumElements', numElements, 'ElementSpacing', 1);
array.Element.FrequencyRange = [100e6 300e6];
% Signal parameters
fs = 8e3; % Sampling frequency
t = (0:1/fs:1)'; % Time vector
fc = 150e6; % Carrier frequency
% Generate two example signals
x1 = cos(2*pi*(300)*t);
x2 = cos(2*pi*(400)*t);
%% Collect the signals
% True angles (unknown to the estimator)
trueAngles = [10 20;45 60]; % in degrees
% Collect signals
rxsig = collectPlaneWave(array,[x1 x2],trueAngles',fc);
% Add some noise
rxsig = awgn(rxsig, 10, 'measured'); % 10 dB SNR
%% Estimate the DoA
% MUSIC algorithm
musicEstimator = phased.MUSICEstimator('SensorArray', array, ...
'OperatingFrequency', fc, 'DOAOutputPort',true,'NumSignalsSource', 'Property', 'NumSignals', 2);
[~,musicAngles] = musicEstimator(rxsig);
musicAngles = broadside2az(sort(musicAngles),[20 60]);
% ESPRIT algorithm
espritEstimator = phased.ESPRITEstimator('SensorArray', array, 'OperatingFrequency', fc);
espritAngles = espritEstimator(rxsig);
espritAngles = broadside2az(sort(espritAngles),[20 60]);
% Display results
disp('True Azimuth angles:')
True Azimuth angles:
disp(trueAngles(:,1)')
10 45
disp('MUSIC estimated angles:')
MUSIC estimated angles:
disp(musicAngles)
9.5829 45.7856
disp('ESPRIT estimated angles:')
ESPRIT estimated angles:
disp(espritAngles)
10.0034 45.0287
You can adjust parameters like the number of array elements, signal frequencies, or noise level to experiment with different scenarios.
For more advanced techniques such as Root weighted subspace fitting (WSF) , MVDR (Capon) spatial spectrum estimator, you can refer to the following documentation

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by