Need help with 3D-plot

조회 수: 5 (최근 30일)
Patrik Soukup
Patrik Soukup 2018년 4월 26일
댓글: Thsnisorn Auk 2023년 5월 28일
Hi there,
I would like to ask how exactly can I plot 3D plot such as this
from my 2D plot, which represents X-Y axes.
I´m using this code
load m2.txt;
i=m2(:,2);
ia=i*1000;
fs=50000;
T=1/fs;
L=length(ia);
t=(0:L-1)*T;
nfft=2^nextpow2(L);
w=hann(L);
io=ia.*w;
I=fft(io,nfft)/L;
Ia=abs(I);
f=fs/2*linspace(0,1,nfft/2+1);
%Normal.
Iref=max(Ia);
Inorm=20*log10(Ia/Iref);
figure;
plot(f,(Inorm(1:nfft/2+1)));
set(gca, 'YLim',[-130,0]);
set(gca, 'XLim',[0,500]);
xlabel('f (Hz)','FontSize',9);
ylabel('Magnituda (dB)','FontSize',9);
hold on;
So I obviously need to add the Z-axis, which represents length of the signal (time). I need to find out for how long ceratin frequencies were present during the measurement.
Tried to use "surf" and "plot3" commands, but all my attempts failed, so I would be really, really thankful for any insight.
Regards,
Patrik
  댓글 수: 2
Ameer Hamza
Ameer Hamza 2018년 4월 26일
"but all my attempts failed"
What have you tried so far? What errors did you get?
Patrik Soukup
Patrik Soukup 2018년 4월 26일
편집: Patrik Soukup 2018년 4월 26일
Well,
something like this
L=16777217;
t=(0:L-1)*T;
figure;
surf(f,(Inorm(1:nfft/2+1)),t);
and I got an error, that the Z should be a matrix, not a vector or scalar.
Also something like
L=16777217;
t=(0:L-1)*T;
figure;
plot3(f,(Inorm(1:nfft/2+1)),t);
but that returned a blank figure to me. This command makes the best sence to me, but apparently it doesn´t work the way I would expect.

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

채택된 답변

Star Strider
Star Strider 2018년 4월 26일
The image in your Question is a Signal Processing Toolbox spectrogram (link) plot, although with a different view. The spectrogram function produces a surf plot with a default view(0,90) so you are looking down at it as a 2D plot rather than viewing it as a 3D plot. You can use the GUI to rotate it, or simply experiment with different arguments to the view function after you plot it. The documentation for the spectrogram function describes how to do all of this, so I will not discuss it in detail here.
  댓글 수: 10
Patrik Soukup
Patrik Soukup 2018년 5월 9일
First of all, I would like to get back to creating a surf plot (I assume). I would like to plot x-axis (freq), y-axis (amplitude of the fft) and z-axis (time), to know when and for how long specified frequencies are present. When I do the most plain thing that comes to my mind, something like
figure;
surf(f,(Inorm(1:nfft/2+1)),t);
It returns an error that the index exceeds the matrix dimension. I have absolutely no idea what I´m doing wrong. I can plot the original time domain signal against the time without problems, then I can plot the fft against freq without problems, but I feel like plotting XY "against" Z, which is the time of time domain signal, doesn´t make sence in general as there´s no bond between fft and the time of original signal?
I´m simply trying to create a good looking spectrogram plot, but the classic spectrogram command is insufficient. Any insight in plain English would be highly, highly appreciated.
Star Strider
Star Strider 2018년 5월 9일
The only option I can think of is to use the rotate (link) function. That will rotate the surface object.

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

추가 답변 (1개)

Ameer Hamza
Ameer Hamza 2018년 4월 26일
The figure you posted can be made using plot3. Try Running this script. You will get the idea how to use plot3 to draw such graphs.
f = figure;
t = 0:0.01:10;
plot3(0, 0, 0);
ax = gca;
delete(ax.Children);
hold on;
for i=1:5
plot3(ax, t, 2*i*ones(size(t)), sin(i*t)+rand(size(t)));
end
  댓글 수: 4
Patrik Soukup
Patrik Soukup 2018년 4월 27일
Than you very much for the effort, Spectrogram command works perfectly.
Thsnisorn Auk
Thsnisorn Auk 2023년 5월 28일
I really have same problem. Could you help me to plot it but in my case i was to plot x= frequency, y =time, z = amplitude .
Thank you.
Regards.
Sorn

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

카테고리

Help CenterFile Exchange에서 Spectral Measurements에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by