在Matlab中创建2D谱图

时间:2016-03-21 11:30:47

标签: matlab plot latex tikz spectrogram

我需要在Matlab中绘制信号的二维谱图。我需要它用于打印作业,因此3D图像毫无意义。但是,当使用Spectrogram绘制信号时,它会自动生成信号的3D图。

我的代码:

Dataset     = 1;            % Dataset to be analysed
N           = 1024;         % Window size
Beta        = 12;           % Kaiser window beta value (small = narrow main lope)
Overlap     = 800;          % Window overlap
Threshold   = -150;         % Minimum magnitude before threshold

spectrogram(Enclosure{Dataset}(1:end),kaiser(N,Beta),Overlap,2048,fs,'MinThreshold',Threshold,'yaxis');

生成如下图:

2D Plot

但从顶部可以看出,图表确实显示了这一点:

3D plot

我之所以需要它专门用于2D(以及为什么我不解决屏幕截图)是因为我使用Matlab2tikz将Matlab数字转换为LaTex中的Tikz数字。使用3D图像我得到+100 Mb和2D的数字将大小减小到<1Mb。

3 个答案:

答案 0 :(得分:3)

我不知道您使用的是哪个版本的Matlab,但在2015a中您应该能够通过3D绘图获得图形处理并将视角更改为2D:

view(0,90);

我还有一个例子,说明如何使用类似的方法从spectrogram()的输出中创建自己的2D绘图:

x = [0:0.01:100];
y = sin(5*x);
y = awgn(y,0.1);

[S,F,T,P] = spectrogram(y,200,0,length(y)*5,100);

[m,n] = size(P);

figure(2)
surf(F,T,zeros(n,m),P','EdgeColor','none')
view(0,90)
xlabel('Frequency')
ylabel('Time (s)')

输出如下:

enter image description here

希望由于没有海拔高度信息,图形尺寸可能会更小但我无法测试,因为我没有Matlab2tikz。

答案 1 :(得分:0)

一种选择是捕获其绘制的任何内容,然后将其绘制为图像。您可以使用getframe

执行此操作

如果你这样做

F=getframe(gca);
cla;
imshow(F.cdata);

您将获得您之前将看到的内容,但作为图像。

然而,我认为它打败了Matlab2Tikz的目的,因为你有Tikz代码描述你的数据......

答案 2 :(得分:0)

您可以尝试以下操作:

[~,F,T,ps]=spectrogram(Enclosure{Dataset}(1:end),kaiser(N,Beta),Overlap,2048,fs,'MinThreshold',Threshold,'yaxis').
% Output the spectrum in ps

imagesc(T,F,10*log10(ps)) 
% Generate a 2d image

view(270,90)
xlabel('Time [s]')
ylabel('Frequency [Hz]')
c=colorbar;
c.Label.String='Power [dB]';
% Extra setting to make the plot look like the spectrogram
祝你好运