2014-06-06 30 views
0

我有矢量例如。一個和零個代表基站流量的流量和空閒狀態。延遲我的向量,matlab

 u=[1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 ] 

我知道如何計算每個休息後的1和零的數量。 但我需要延遲幫助。當我可以將我的基站置於睡眠模式時,零點告訴我。 有沒有延遲的方法,例如,基站在第一次零後不進入睡眠狀態,而不是在第三次零後進入睡眠狀態,這意味着延遲時間會延遲。

回答

0

假設ASantosRibeiro正確解釋你的問題,你可以做到這一點找到時, 「睡覺」:

​​3210

這是假設你想延遲3.

diff(u)返回u中連續元素之間的差異。找到差值等於-1的時間等於找到光線從1變爲0時的指數。通過添加delay,您可以得到所需的指數。

+1

如果他希望系統在任何零後3個時間點進入睡眠狀態,那將是正確的。但是如果他想要確保存在至少3個連續的零,那麼這種簡單的方法不起作用。檢查這個。 u = [1 1 0 1 1 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0]; idx = find(diff(u)== - 1)+ 3 – ASantosRibeiro

+0

在你幫助我之前,我也設法做到了這一點。 (1:2:結束); ** ** l = 1; ** ** delay1 = 2; ** ** values_delay1 = []; ** ** while l <= length(values_nodelay)** ** values_delay1_temp = values_nodelay(l)+ delay1; ** ** values_delay1 = [values_delay1,values_delay1_temp]; ** ** l = l + 1; ** **結束** ** values_delay1 ** 它的工作原理和結果相同! ! – user3464577

2

不是一個簡單的解決方案,但我認爲你應該覺得它很有趣。你可以從這裏進行優化。 首先,我假設你想連續第三次進入睡眠狀態。0 檢查示例。

CODE:

u=[1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 ]; 
bw_u=bwlabel(u==0); 

get_breaks=bsxfun(@eq, bw_u, unique(bw_u)'); 
pos_break=cumsum(get_breaks,2).*get_breaks; 
third_0=pos_break(2:end,:)==3; 

[~,indx_third_0]=find(third_0) 

OUTPUT:

indx_third_0 = 

    8 
    20 
    32 
    43 
1

再次假設ASantosRibeiro正確解釋您的問題,您可以更簡單地做到這一點,如下所示。假設n表示期望的零的數量。在你的情況下,n=3;

>> ind = find(diff(conv(2*u-1, repmat(-1, [1 n])) == n) == 1) + 1 
ind = 
    8 20 32 43