why this code gives error?

1 view (last 30 days)
Sadiq
Sadiq on 27 Nov 2023
Commented: Sadiq on 28 Nov 2023
function [range_est, doa_est] = near_field_doa_ula(sensor_positions, received_signal, fs, speed_of_sound)
% sensor_positions: Array of sensor positions for ULA
% received_signal: Observed signal at each sensor
% fs: Sampling frequency
% speed_of_sound: Speed of sound in m/s
% Parameters
num_sensors = length(sensor_positions);
num_snapshots = size(received_signal, 2);
% Construct the steering matrix
theta_range = linspace(-90, 90, 180); % Range of possible DOA angles
A = exp(1i * 2 * pi * sensor_positions.' * sind(theta_range));
% Compute the covariance matrix
R = received_signal * received_signal' / num_snapshots;
% Compute the MUSIC spectrum
[U, S, V] = svd(R);
noise_subspace = U(:, num_sensors+1:end);
% Compute the spatial spectrum
spatial_spectrum = zeros(size(theta_range));
for i = 1:length(theta_range)
a_theta = exp(1i * 2 * pi * sensor_positions.' * sind(theta_range(i)));
spatial_spectrum(i) = 1 / (a_theta' * noise_subspace * noise_subspace' * a_theta);
end
% Find peaks in the spatial spectrum
[~, peak_indices] = findpeaks(abs(spatial_spectrum), 'SortStr', 'descend');
% Extract DOA and range from the peaks
doa_est = theta_range(peak_indices);
range_est = (doa_est / 180) * (speed_of_sound / (2 * fs));
end
% Example parameters
num_sensors = 8;
sensor_positions_ula = linspace(0, 0.5, num_sensors); % ULA
fs = 1000; % Sampling frequency
speed_of_sound = 343; % Speed of sound in m/s
% Generate synthetic near-field signals for three sources
source_distance = 1; % Distance from the sources to the ULA in meters
source_doas = [30, 60, 90]; % Directions of arrival in degrees
% Calculate time delays for near-field signals
time_delays = source_distance / speed_of_sound;
% Generate signals with time delays
t = (0:1/fs:1-1/fs);
signal1 = sin(2 * pi * 100 * t);
signal2 = sin(2 * pi * 100 * (t - time_delays));
signal3 = sin(2 * pi * 100 * (t - 2 * time_delays));
% Create the received signal at each sensor
received_signal_ula = zeros(num_sensors, length(t));
for i = 1:num_sensors
received_signal_ula(i, :) = signal1 * exp(1i * 2 * pi * sensor_positions_ula(i) * sind(source_doas(1)));
received_signal_ula(i, :) = received_signal_ula(i, :) + signal2 * exp(1i * 2 * pi * sensor_positions_ula(i) * sind(source_doas(2)));
received_signal_ula(i, :) = received_signal_ula(i, :) + signal3 * exp(1i * 2 * pi * sensor_positions_ula(i) * sind(source_doas(3)));
end
% Apply the near-field DOA algorithm
[range_est, doa_est] = near_field_doa_ula(sensor_positions_ula, received_signal_ula, fs, speed_of_sound);
% Display the results
disp('True Ranges:');
disp(repmat(source_distance, 1, length(source_doas)));
disp('Estimated Ranges:');
disp(range_est);
disp('True DOAs:');
disp(source_doas);
disp('Estimated DOAs:');
disp(doa_est);
% Plot the spatial spectrum
figure;
plot((1:length(t)) / fs, received_signal_ula.');
title('Received Signals at ULA Sensors');
xlabel('Time (s)');
ylabel('Amplitude');
legend('Sensor 1', 'Sensor 2', 'Sensor 3', 'Sensor 4', 'Sensor 5', 'Sensor 6', 'Sensor 7', 'Sensor 8');
  2 Comments
Image Analyst
Image Analyst on 27 Nov 2023
Moved: Voss on 27 Nov 2023
What did you pass in for sensor_positions, received_signal, fs, speed_of_sound?
What was the actual error message (ALL the red text)?
If you have any more questions, then attach your data and code to read it in with the paperclip icon after you read this:
Sadiq
Sadiq on 28 Nov 2023
Thank you very much dear Image Analyst and Voss. I got the issue resolved.

Sign in to comment.

Answers (0)

Community Treasure Hunt

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

Start Hunting!