将matlab图划分为网格

Dividing matlab plot into grids

我有两个不同的时间函数 x(t)y(t)。我想在 Matlab 中绘制 x(t) vs y(t) 。该图需要分为 40x40 个网格,从每个方向的信号的最小值和最大值延伸。然后我需要计算图中占据的网格框的数量。请建议一种在 Matlab 中实现这一点的便捷方法。

我试过下面的代码(忽略轴的上下限):

NrGrid = 20;                                 % Number Of Grids
x = linspace(0, 100, NrGrid+1);
[X,Y] = meshgrid(x);
figure(1)
plot(X,Y,'k')
hold on
plot(Y,X,'k')
hold off
set(gca, 'Box','off', 'XTick',[], 'YTick',[])
axis square

在我的理解中,代码只是将绘图划分为网格。如何计算占用的格子数?

参考:我基本上需要实现这篇论文的算法: http://www.fhv.at/media/pdf/forschung/prozess-und-produktengineering/working-papers/working-papers-2005/detecting-ventricular

听起来您想创建一个 40x40 矩阵,然后使用 Bresenham 画线算法连接该矩阵中 x(t)/y(t) 对应关系中的每个点(经过适当缩放后)。

然后您可以使用 nnz 来计算矩阵中非零元素的数量。

通过将信号量化为 40 个级别,然后将其与其移动区域进行比较,我设法获得了比 Dave Durbin 提到的解决方案简单得多的解决方案。附上代码供参考:

function TD=TimeDelay(val,fs)
n=40;
jump=( max(val) + abs(min(val)))/40;

level=zeros(n,1);
level(1)=min(val) + jump;

for i=2:n
    level(i)=level(i-1)+jump;
end
level(n)=level(n)+1;
ScaledECG=zeros(size(val));
ScaledECG(val <= level(1))=1;

for j=2:n
    ScaledECG( val<=level(j) & val>level(j-1))=j;
end

tau=fs*.5;
N=zeros(n,n);
for k=tau+1:1:length(val)
N(ScaledECG(k-tau),ScaledECG(k))=N(ScaledECG(k-tau),ScaledECG(k)) + 1;
end

N(N>5)=0;
N(N<=5)=1;

TD=sum(sum(N));