Полярный (3D) график с тэтой, phi и радиусом

#matlab #3d #polar-coordinates

#matlab #3D #полярные координаты

Вопрос:

Я хочу построить 3D-график с полярными параметрами тэта, phi и radius. Я вычислил эти 3 параметра, но я не могу получить 3D-график.

Я хочу график, который выглядел бы как на рисунке ниже.введите описание изображения здесь

Я получил этот график из phaseshiftbeamformer, использующего ulaexample в matlab. Я не понимаю, как они получили такой график. Код Matlab для него приведен ниже.

 %% Phase-Shift Beamformer Using ULA
% Apply phase-shift beamforming to the signal received by a 5-element ULA.
% The beamforming direction is 45amp;deg; azimuth and 0amp;deg; elevation. Assume
% the array operates at 300 MHz. Specify the beamforming direction using an
% input port.

%%
% Simulate a sinewave signal arriving at the array.
clearvars;close all;
t = (0:1000)';
fsignal = 0.01;
x = sin(2*pi*fsignal*t);
c = physconst('LightSpeed');
fc = 300e6;
incidentAngle = [30;15];


array = phased.ULA('NumElements',5);
x = collectPlaneWave(array,x,incidentAngle,fc,c);
noise = 0.1*(randn(size(x))   1j*randn(size(x)));
rx = x   noise;

%%
% Construct the phase-shift beamformer and then beamform the input data.
beamformer = phased.PhaseShiftBeamformer('SensorArray',array,...
    'OperatingFrequency',fc,'PropagationSpeed',c,...
    'DirectionSource','Input port','WeightsOutputPort',true);
%%
% Obtain the beamformed signal and the beamformer weights.
[y,w] = beamformer(rx,incidentAngle);
%%
% Plot the original signal at the middle element and the beamformed signal.
figure();
plot(t,real(rx(:,3)),'r:',t,real(y))
xlabel('Time')
ylabel('Amplitude')
legend('Original','Beamformed')

%%
% Plot the array response pattern after applying the weights.
figure();
pattern(array,fc,[-180:180],            [-90:90],'PropagationSpeed',c,'CoordinateSystem','polar','Weights',w,'Type','efi    eld')
  

Ответ №1:

В коде примера используется команда pattern из набора инструментов phased array. Это довольно специфично для их применения.

Я бы просто взял тэту, phi и r и преобразовал их в декартовы координаты и построил их с помощью surf или surfl:

 [theta,phi]=meshgrid(linspace(-pi/2,pi/2),linspace(0,2*pi));
r=1 sin(theta*3).*cos(phi*2);
X=cos(theta).*cos(phi).*r;
Y=cos(theta).*sin(phi).*r;
Z=sin(theta).*r;
surf(X,Y,Z)
  

введите описание изображения здесь

Можно, конечно, также полениться и использовать sph2cart (обратите внимание, что Matlab имеет противоположное обозначение углов от меня):

 [X,Y,Z] = sph2cart(phi,theta,r);
  

Комментарии:

1. Как отобразить углы на этом графике? Нет ли способа получить такой же график, как тот, который я получаю, используя команду pattern? @AndersSandberg

2. Команда pattern, похоже, выполняет много дополнительных украшений, предположительно используя обычные команды plot. Что именно вы хотите показать?

3. Я делаю то же самое, что и в примере кода, я просто не хочу использовать библиотечные функции в своей реализации. @AndersSandberg