在 Matlab 中创建二维频谱图
Create 2D Spectrogram in Matlab
我需要在 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 的原因(以及为什么我不使用屏幕截图解决)是因为我正在使用 Matlab2tikz
将 Matlab 图形转换为 LaTex 中的 Tikz 图形。使用 3D 图像,我得到 +100 Mb 的数字,而 2D 会将尺寸减小到 <1Mb。
一种选择是捕获其绘制的任何内容,然后将其绘制为图像。您可以使用 getframe
如果你这样做
F=getframe(gca);
cla;
imshow(F.cdata);
您将获得与之前所见完全相同的图像。
但是我认为它有点击败了 Matlab2Tikz 的 purpose,因为 os 你有 Tikz 代码描述你的数据的想法...
我不知道您使用的是哪个版本的 Matlab,但在 2015a 中,您应该能够使用 3D 图获得图形的句柄并将视角更改为 2D:
view(0,90);
我还有一个示例,说明如何使用类似的方法根据 spectrogram() 的输出制作自己的二维图:
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)')
输出如下所示:
希望因为没有高度信息,图形尺寸可能会更小,但我无法测试,因为我没有 Matlab2tikz。
您可以尝试以下方法:
[~,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
祝你好运
我需要在 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 的原因(以及为什么我不使用屏幕截图解决)是因为我正在使用 Matlab2tikz
将 Matlab 图形转换为 LaTex 中的 Tikz 图形。使用 3D 图像,我得到 +100 Mb 的数字,而 2D 会将尺寸减小到 <1Mb。
一种选择是捕获其绘制的任何内容,然后将其绘制为图像。您可以使用 getframe
如果你这样做
F=getframe(gca);
cla;
imshow(F.cdata);
您将获得与之前所见完全相同的图像。
但是我认为它有点击败了 Matlab2Tikz 的 purpose,因为 os 你有 Tikz 代码描述你的数据的想法...
我不知道您使用的是哪个版本的 Matlab,但在 2015a 中,您应该能够使用 3D 图获得图形的句柄并将视角更改为 2D:
view(0,90);
我还有一个示例,说明如何使用类似的方法根据 spectrogram() 的输出制作自己的二维图:
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)')
输出如下所示:
希望因为没有高度信息,图形尺寸可能会更小,但我无法测试,因为我没有 Matlab2tikz。
您可以尝试以下方法:
[~,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
祝你好运