将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));
我有两个不同的时间函数 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));