2015-05-08 72 views
-2

我有兩種不同的時間函數x(t)y(t)。我想在Matlab中繪製x(t) vs y(t)。該圖需要分爲從每個方向上信號的最小值和最大值的網格延伸40x40。然後我需要計算圖中佔用的網格框的數量。請建議一種方便的方式在Matlab中實現此功能。將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

+0

確實顯示的代碼只繪製一個網格......你有沒有試過任何計數佔用的細胞?如果您需要質量幫助,請提供樣本數據,預期輸入/輸出並顯示您的工作量。另請參見[如何問](http://stackoverflow.com/help/how-to-ask)和[如何創建最小,完整和可驗證示例](http://stackoverflow.com/幫助/ mcve) – Hoki

回答

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

聽起來像是你想創建一個40×40矩陣,然後用布氏畫線算法,每個點(連接後適當的縮放)在x(t)/ y(t)對應的矩陣中。

然後,您可以使用nnz來計算矩陣中非零元素的數量。

+0

我修改了一下這個問題。能否請你幫忙? – avr