MATLAB Answers


3D surface plot from for loop

Asked by MATLABmet on 26 Jan 2017
Latest activity Commented on by John BG
on 27 Jan 2017
Hi all,
The following is my code, which calculates RF path loss between a satellite and a ground station, factoring in altitude and trajectory.
% code
f=5*10^6; %must be *10^3 less than given f. For example if f=5GHz, use 5MHz
for i = 1:181
Pt=10*log10(57.27*0.193)+30; %convert to dbm
I can easily create 2D plots from this such as plot(ang,Lp) etc.. But I want to create a 3D plot using the surf command, which plots (ang,Lp,d).
How is this possible ?
Thanks in advance.

  1 Comment

John BG
on 27 Jan 2017
there are satellite comms examples readily available at the MATLAB file exchange.
For instance
available from
the channel is already modelled in some of the blocks.
John BG

Sign in to comment.

1 Answer

Answer by Massimo Zanetti on 26 Jan 2017

Most probably you don't want to plot a surface, instead a plot of a line in a 3D space. Try this:
plot3(ang,Lp,d); grid on;
Is that what you need?


MATLABmet on 26 Jan 2017
Hi Massimo,
That looks more like what I want. However, I now want to bring the h value into the loop and make it range from 700:800Km. So really I need a 3 dimensional plot that represents distance, angle, and pathloss.
thanks again,
Ok, so what you need is more likely a family of curves. Consider that there is no need of any loop, thanks to Matlab implicit expansion. See here:
f=5*10^6; %must be *10^3 less than given f. For example if f=5GHz, use 5MHz
h = (700:5:800)';
ang = 0:180;
d = sqrt(((6371+h).^2)-(6371^2)*(cos(ang*(pi/180)).^2))-6371*sin(ang*(pi/180));
Lp = 20*log10((4*pi*d*f)/(300000));
Pt = 10*log10(57.27*0.193)+30; %convert to dbm
Pr = Pt+Gt+Gr-Lp;
SNR =Pr-Nf;
plot3(ang,Lp,d); grid on;
If this answer helped you, please accept it.

Sign in to comment.