8

我正在尝试处理来自数据记录器的大量(约 1000 个)文件。

如果我想从其中一个日志文件中绘制趋势,我可以使用

plot(timevalues,datavalues)

我希望能够以类似于示波器如何具有“持久”模式的方式同时查看所有这些行。

示波器显示

我可能可以拼凑一些使用直方图的东西,但我希望这个问题有预先存在的或更优雅的解决方案。

4

3 回答 3

9

您可以完全按照自己的建议进行操作,即绘制信号的热图。

考虑以下内容:我将构建一个测试信号(使用不同幅度的正弦波),然后我将通过hist3和绘制热图imagesc

这个想法是建立一个辅助信号,它只是你所有时间历史的并列(在x和中y),然后从中提取基本的二元统计数据。

 % # Test signals
 xx = 0 : .01 : 2* pi;
 center = 1;
 eps_ = .2;
 amps = linspace(center - eps_ , center + eps_ , 100 );

 % # the auxiliary signal will be stored in the following variables
 yy = [];
 xx_f = [];

 for A = amps
   xx_f = [xx_f,xx];
   yy = [yy A*sin(xx)];
 end 

 % # final heat map
 colormap(hot)
 [N,C] = hist3([xx_f' yy'],[100 100]);
 imagesc(C{1},C{2},N')

在此处输入图像描述

您也可以使用jet颜色图而不是hot颜色图来提高可读性。在下文中,幅度是高斯的而不是齐次的。

在此处输入图像描述

于 2014-04-29T06:33:37.737 回答
7

这是一个“原始”解决方案,它只是使用hist

%# generate some fake data

x=-8:0.01:8;
y=10*sinc(x);
yy=bsxfun(@plus,y,0.1*randn(numel(x),1000)' );
yy(randi(1000,1,200),:)= 5-randi(10)+ circshift(yy(randi(1000,1,200),:),[1 randi(numel(x),1,200)]); 

%# get plot limit parameters

plot(x,yy)
yl=get(gca,'Ylim');
xl=get(gca,'Xlim');
close all;


%# set 2-d histogram ranges

ybins=100;
xbins=numel(x);
yrange=linspace(yl(1),yl(2),ybins);
xrange=linspace(xl(1),xl(2),xbins);

%# prealocate

m=zeros(numel(yrange),numel(xrange));

% build 2d hist
for n=1:numel(x)
    ind=hist(yy(:,n),yrange);
    m(:,n)=m(:,n)+ind(:);
end

imagesc(xrange,yrange,m)
set(gca,'Ydir','normal')

在此处输入图像描述

于 2014-04-29T06:40:06.480 回答
1

为什么不规范化数据,然后将所有行加在一起?然后,您可以从单个数据文件中绘制热图。

于 2014-04-29T11:18:38.507 回答