2d planar array use AF and Deconvolution metod

7 次查看(过去 30 天)
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.

回答(1 个)

Balavignesh
Balavignesh 2024-4-4
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

类别

Help CenterFile Exchange 中查找有关 Array Geometries and Analysis 的更多信息

产品


版本

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by