【问题标题】:Plot the data in real time in Matlab在 Matlab 中实时绘制数据
【发布时间】:2017-07-05 20:43:34
【问题描述】:

我有几个文件打算在 Matlab 中绘制。我已经加载了文件,我想实时绘制它。正如我想看到它正在绘制的那样。

%clear
[filename, pathname] = uigetfile('*.raw;*.prc', 'Pick raw or processed data file');
N=str2double(filename(5:6));
Fs = 145.3*10^3; 
T = 1/Fs; % Sampling period
if isequal(filename(end-2:end),'raw')
    % load raw data file
    fid = fopen([pathname filename],'r','l');
    A=fread(fid,inf,'*uint16')'; %s=ftell(fid); 
    B=bitand(A, hex2dec('0FFF')); C=bitshift(A,-12);
    channels=sort(C(1:N));
    rawdata(int16(numel(A)/N)+2,N)=uint16(0); % Need to add +2 due to data loss
    for ii=1:N
        %rawdata(:,ii)=B(C==channels(ii)); can't use due to data loss
        temp=B(C==channels(ii));
        rawdata(1:numel(temp),ii)=temp;
    end
    plot(3.3/4095*single(rawdata))
    legend(int2str(channels'))
else
    %load processed file
    fid = fopen([pathname filename],'r','b');
    A= fread(fid,inf,'*single')';
    prcdata=reshape(A,N,[])';


    %Find time
    N = size(prcdata(:,1),1); 
    t=T*(0:N-1)'; 

for u = 1:N;
        x=0:(T*(0:u-1)');
        plot(x,prcdata(:,4));
   drawnow;
   end
end

【问题讨论】:

  • 如果您的绘图在处理过程中未显示,您可能需要在绘图函数后添加pause(0.001),以便您的计算机有时间渲染图形。
  • 尝试添加暂停(0.001)它需要时间来处理。还想知道如果我只添加没有 for 循环的暂停是否会起作用,就像下面的代码 code %Find time N = size(prcdata(:,1),1); t=T*(0:N-1)'; x=0:(T*(0:u-1)'); plot(x,prcdata(:,4)); drawnow; end
  • 我曾经使用过这个解决方案。可能会有所帮助maybe this post can help you
  • 谢谢Belgarath 我会看看那个帖子 我已经使用了该代码并保持运行需要一段时间,因为这些数据很大。

标签: matlab plot time


【解决方案1】:

我知道一种启发式方法,但它确实有效:

for u = 1:N;
    x(u)=0:(T*(0:u-1)');
    plot(x(1:u),prcdata(:,4));
    pause(0.01);
end

【讨论】:

  • 我将运行这段代码,看看它是否有效。使用它并保持运行
  • 获得情节需要一段时间,所以不得不停止运行该代码
  • 我还在研究中...基本上我想实时看到code plot(t,prcdata(:,4)); 的情节
  • 我认为 matlab 不适合这种可视化。给 matlab 时间来渲染图形是很重要的。
【解决方案2】:

试试animinatedline

对象通过累积来自流数据源的数据来优化线条动画。使用 animatedline 函数创建初始动画线后,您可以向该线添加新点,而无需重新定义现有点。通过设置属性来修改动画线的外观。

【讨论】:

  • 是否需要先绘制图形并使用动画线函数重新绘制?
  • 我尝试使用以下代码 code %Find time N = size(prcdata(:,1),1); t=T*(0:N-1)'; figure; hold on; h = animatedline; %axis([0,4*pi,-1,1]) x = t; y = prcdata(:,4); for k = 1:N addpoints(h,x(k),y(k)); drawnow end end 使用动画线函数,它给了我一个错误,说它的参数 Y 的类型无效。类型应该是 double
  • 试试 y = prcdata(:,6)
  • 它仍然有同样的错误。当我尝试使用 y=prcdata(:,6) 时,我认为更改通道不起作用,因为它们具有 6 通道数据,具有数百万个数据点,具体取决于采样频率
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-21
  • 1970-01-01
  • 1970-01-01
  • 2016-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多