- 'contour' function: https://www.mathworks.com/help/matlab/ref/contour.html
- 'deconvlucy' function: https://www.mathworks.com/help/images/ref/deconvlucy.html
2d planar array use AF and Deconvolution metod
4 views (last 30 days)
Show older comments
clear;
lambda = 1;
d = lambda / 2;
search = (-90:0.1:90) * (pi/180);
phi_search = linspace(-1, 1, length(search));
theta_search = linspace(-1, 1, length(search));
target_phi = -20 * (pi / 180); %xaxis
target_theta = 10 * (pi / 180); %yaxis
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; %linear array
%array = [1, 2, 4, 6, 7, 8, 10] %sparse array
[~, target_index_phi] = min(abs(phi_search - target_phi));
[~, target_index_theta] = min(abs(theta_search - target_theta));
targets = zeros(length(theta_search), length(phi_search));
targets(target_index_theta, target_index_phi) = 1;
Beam = zeros(length(phi_search), length(theta_search));
meas = zeros(length(phi_search), length(theta_search));
for x = 1:length(phi_search)
for y = 1:1:length(theta_search)
sum_AF = 0;
resp1 = 0;
resp2 = 0;
resp3 = 0;
for n = array
for m = array
psi_x = 2*pi/lambda * d * phi_search(x);
psi_y = 2*pi/lambda * d * theta_search(y);
phase_shift = exp(1i * (n * psi_x + m * psi_y));
sum_AF = sum_AF + sum(exp(1i * n * 2*pi/lambda * d * phi_search(x) + 1i * m * 2*pi/lambda * d * theta_search(y)));
resp1 = resp1 + sum(exp(1i * n * 2*pi/lambda * d * ( target_theta - phi_search(x) ) + 1i * m * 2*pi/lambda * d * ( target_phi -theta_search(y))));
end
end
Beam(x, y) = abs(sum_AF);
meas(x, y) = abs(resp1);
end
end
I made a beam pattern and response using the target (theta,phi) I specified.
I want to show the target, beam pattern, and response through the contour function, and finally I want to restore the target using Deconvolution, but the result is not coming out well. What should I do? And I want to compare the difference between a linear array and a sphere array. When it's a linear array, the target should be restored well.
0 Comments
Answers (1)
Balavignesh
on 4 Apr 2024
Hi WJDNJ,
It is my understanding that you have already created arrays for the beam pattern (Beam) and the response (meas), and you have marked the target in the 'targets' array and now you would like to visualize these using contour plots in MATLAB.
However, deconvolution can be a bit tricky in the context of signal processing and beamforming. There could be several factors affecting the results including the choice of deconvolution algorithm, noise, resolution limits, etc... Since your case involves 2D deconvolution, you might need to use 'deconvlucy' or similar, which can handle 2D arrays. However, direct application might not yield perfect results due to the complexities mentioned.
For comparing the performance between a linear array and a sparse array, you can run your simulation with both configurations and observe the differences in the beam pattern, response, and the efficacy of target restoration. Comparing linear and sparse arrays will highlight trade-offs between array complexity, resolution, and directivity.
I have included the code for plotting the contours below your code for your review. Please take a moment to examine it.
clear;
lambda = 1;
d = lambda / 2;
search = (-90:0.1:90) * (pi/180);
phi_search = linspace(-1, 1, length(search));
theta_search = linspace(-1, 1, length(search));
target_phi = -20 * (pi / 180); %xaxis
target_theta = 10 * (pi / 180); %yaxis
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; %linear array
%array = [1, 2, 4, 6, 7, 8, 10] %sparse array
[~, target_index_phi] = min(abs(phi_search - target_phi));
[~, target_index_theta] = min(abs(theta_search - target_theta));
targets = zeros(length(theta_search), length(phi_search));
targets(target_index_theta, target_index_phi) = 1;
Beam = zeros(length(phi_search), length(theta_search));
meas = zeros(length(phi_search), length(theta_search));
for x = 1:length(phi_search)
for y = 1:1:length(theta_search)
sum_AF = 0;
resp1 = 0;
resp2 = 0;
resp3 = 0;
for n = array
for m = array
psi_x = 2*pi/lambda * d * phi_search(x);
psi_y = 2*pi/lambda * d * theta_search(y);
phase_shift = exp(1i * (n * psi_x + m * psi_y));
sum_AF = sum_AF + sum(exp(1i * n * 2*pi/lambda * d * phi_search(x) + 1i * m * 2*pi/lambda * d * theta_search(y)));
resp1 = resp1 + sum(exp(1i * n * 2*pi/lambda * d * ( target_theta - phi_search(x) ) + 1i * m * 2*pi/lambda * d * ( target_phi -theta_search(y))));
end
end
Beam(x, y) = abs(sum_AF);
meas(x, y) = abs(resp1);
end
end
% Plot the beam pattern
figure;
contour(phi_search * (180/pi), theta_search * (180/pi), Beam', 50);
xlabel('Phi (degrees)');
ylabel('Theta (degrees)');
title('Beam Pattern');
colorbar;
% Plot the response
figure;
contour(phi_search * (180/pi), theta_search * (180/pi), meas', 50);
xlabel('Phi (degrees)');
ylabel('Theta (degrees)');
title('Response');
colorbar;
% Plot the target
figure;
contour(phi_search * (180/pi), theta_search * (180/pi), targets', 1);
xlabel('Phi (degrees)');
ylabel('Theta (degrees)');
title('Target');
colorbar;
Kindly have a look at the following documentation links to have more information on:
Hope that helps!
Balavignesh
0 Comments
See Also
Categories
Find more on Data Distribution Plots in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!