首页 > 解决方案 > Matlab中的数据分析

问题描述

我在 Matlab 中有一个时间向量,它没有一致的采样时间,例如。t = [0.1 0.2 0.3 0.4 0.5 0.6 0.7 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 2.9 3 3.1],我有另一个基于时间的向量a = [2 5 2 4 5 7 8 0 10 1 0 25 6 14 5 2 7 98],当我绘制(t,a)时,有一条直线连接具有较大采样时间的两个点,如何消除采样时间不一致且跳跃到更大的这些间隙价值?我知道在相同的时间间隔内定义0.71.32之间的 NaN可能会有所帮助,但是如何区分采样时间是否发生变化?2.9ta

标签: matlabdata-analysissampling

解决方案


也许您可以尝试以下代码,您可以使用以下两种方法:

  • 方法1:添加nan
clc;
clear;
close all;

t = [0.1 0.2 0.3 0.4 0.5 0.6 0.7 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 2.9 3 3.1]
a = [2 5 2 4 5 7 8 0 10 1 0 25 6 14 5 2 7 98]

dt = diff(t);
idx = find(dt > mode(dt));
tC = mat2cell(t',[idx(1),diff([idx,length(t)])]);
aC = mat2cell(a',[idx(1),diff([idx,length(t)])]);
nadd = dt(idx)/mode(dt);
T = [];
A = [];
for i = 1:length(nadd)
  T = [T; tC{i};ones(int32(nadd(i)),1)*nan];
  A = [A; aC{i};ones(int32(nadd(i)),1)*nan];
endfor
T = [T;tC{end}];
A = [A;aC{end}];

plot(T,A)

在此处输入图像描述

  • 方法2:将向量除以区间
clc;
clear;

t = [0.1 0.2 0.3 0.4 0.5 0.6 0.7 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 2.9 3 3.1]
a = [2 5 2 4 5 7 8 0 10 1 0 25 6 14 5 2 7 98]

dt = diff(t);
idx = find(dt > mode(dt));
tC = mat2cell(t',[idx(1),diff([idx,length(t)])]);
aC = mat2cell(a',[idx(1),diff([idx,length(t)])]);

hold on;
arrayfun(@(k) plot(tC{k},aC{k}),1:(length(idx)+1));

在此处输入图像描述


推荐阅读