3dB beamwidth from matrix

조회 수: 24 (최근 30일)
zozo
zozo 2012년 2월 2일
I have a matrix H(360x180) containing the energy levels in dB. I have the following 3D-beampattern plotted from H:
How can I find the 3dB beamwidth (in degrees across elevation & azimuth) of the mainlobe?

채택된 답변

Image Analyst
Image Analyst 2012년 2월 4일
Looks to me like there is no lobe above 3 dB. If you mean -3 dB then there is one or maybe 2 peaks. How do you define width? Do you want just the x and y widths at the -3 dB level, or do you want to extend out, or "fall down," the lobe well past the -3 dB cutting level? If it's the latter you might need some kind of region growing process. If it's the former, simply threshold and call regionprops() asking for the bounding box. Two lines of code.
binaryImage = H > -0.3;
measurements = regionprops(binaryImage, 'BoundingBox');
Here's a full blown demo:
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
workspace; % Make sure the workspace panel is showing.
fontSize = 20;
% Create sample data.
H = peaks(90);
H = 11*mat2gray(H) - 13;
% Display it.
subplot(2, 2, 1);
surf(H);
xlabel('Azimuth [deg]', 'FontSize', fontSize);
ylabel('Elevation [deg]', 'FontSize', fontSize);
% Enlarge figure to full screen.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]); % Maximize figure.
set(gcf,'name','Demo by ImageAnalyst','numbertitle','off')
% Threshold the image
binaryImage = H > -3;
% Display it.
subplot(2, 2, 2);
imshow(binaryImage);
axis on;
xlabel('Azimuth [deg]', 'FontSize', fontSize);
ylabel('Elevation [deg]', 'FontSize', fontSize);
measurements = regionprops(binaryImage, 'BoundingBox');
bb = [measurements.BoundingBox]
x1 = bb(1);
x2 = x1 + bb(3);
y1 = bb(2);
y2 = y1 + bb(4);
% Plot box over image.
hold on;
plot([x1 x2 x2 x1 x1], [y1 y1 y2 y2 y1], 'r-', 'LineWidth', 2);
message = sprintf('The Azimuth Width at -3 dB = %.1f\nThe Elevation Width at -3 dB = %.1f', ...
bb(3), bb(4));
msgbox(message);
  댓글 수: 4
Bjorn Gustavsson
Bjorn Gustavsson 2012년 2월 6일
Don't calculate beam-widths _directly_ from the azimuth and zenith angles you get out. The beam-width are not the difference between min and max azimuth and zenith angles.
HTH
M. Khishe
M. Khishe 2012년 9월 21일
how can i use my image in this code? my image is http://kmu.site40.net/images/19d3c9e40467.jpg

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Bjorn Gustavsson
Bjorn Gustavsson 2012년 2월 2일
You could use contourc:
C = contourc(X,Y,H,[-3 -3]);
where you get the 3-dB curve from the C array that is built thisly:
C = [level1 x1 x2 x3 ... level2 x2 x2 x3 ...;
pairs1 y1 y2 y3 ... pairs2 y2 y2 y3 ...]
HTH
  댓글 수: 7
Bjorn Gustavsson
Bjorn Gustavsson 2012년 2월 4일
Zozo, I think you got me wrong.
Even the main lobe might not be nice-n-elliptical. If you try my suggestion you will see if it is, or if it is more irregular, and if you have side-lobes with more than -3 dB gain.
THEN, you can judge if it is just to take any 2 points on opposing sides of the beam-centre or if you have to be more clever - like for example check the dot-product of the line-of-sight vectors between "all" unique combinations to find the one with largest beam-width, the average beam-width and whatnot.
HTH.
M. Khishe
M. Khishe 2012년 9월 21일
how can i use my image in this code? my image is http://kmu.site40.net/images/19d3c9e40467.jpg

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Direction of Arrival Estimation에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by