将matlab图划分为网格

时间:2015-05-08 00:06:02

标签: matlab signal-processing matlab-figure

我有两个不同的时间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

2 个答案:

答案 0 :(得分:0)

听起来你想要创建一个40x40矩阵,然后使用Bresenham线绘制算法连接该矩阵中x(t)/ y(t)对应的每个点(在适当缩放之后)。

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

答案 1 :(得分:0)

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

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));