필터 지우기
필터 지우기

Simulating events of varying duration

조회 수: 1 (최근 30일)
Rebecca
Rebecca 2013년 2월 4일
Hi there, I'm trying to simulate events of varying duration. I start with a vector of onsets (in seconds from the start of the simulated session):
onset=[23 40 67 88] etc
I then generate a list of durations (in seconds - each event is a different duration):
duration=[3 9 2 6]
I can use these to make a vector of offsets, however, what I want to end up with is a vector of all the seconds in which an event is occurring:
all=23 24 25 40 41 42 43 44 45 46 47 48 67 68 88 89 90 91 92 93
I am trying to write a loop that will do this, however can only make it work if all the durations are the same (e.g., 3 seconds). I'm really stuck - any help would be greatly appreciated. Thanks so much, Rebecca

채택된 답변

Andrei Bobrov
Andrei Bobrov 2013년 2월 7일
st = [23 40 67 88];
du = [3 9 2 6];
m = cumsum(du);
t = m - du + 1;
s = zeros(1,m(end));
s(t) = 1;
ii = cumsum(s);
out = (1:m(end)) - t(ii) + st(ii);
  댓글 수: 1
Rebecca
Rebecca 2013년 2월 8일
Fabulous - thank you. Another really good answer, exactly what I was after.

댓글을 달려면 로그인하십시오.

추가 답변 (3개)

Brian B
Brian B 2013년 2월 7일
This seems to be what you are looking for:
onset=[23 40 67 88]
duration=[3 9 2 6]
all=cell2mat(arrayfun(@(a,b)a+(1:b)-1,onset,duration,'UniformOutput',0))
  댓글 수: 2
Brian B
Brian B 2013년 2월 7일
If there is the possibility of overlap between events, you may need to use
all = unique(all)
to sort and remove duplicate entries for instants when multiple events are occurring; of course that depends on your application.
Rebecca
Rebecca 2013년 2월 8일
Awesome - thank you. This is great.

댓글을 달려면 로그인하십시오.


Youssef  Khmou
Youssef Khmou 2013년 2월 4일
An example :
events=zeros(1,1000);
for (t=0:1000)
if mod(t,2)==0
events(t)=a;
elseif mod(t,3)==0
events(t)=b;
elseif mod(t,7)==0
events(t)=c;
.....
end
with constants a,b,c, the onsets .
is that OK?
  댓글 수: 5
Youssef  Khmou
Youssef Khmou 2013년 2월 5일
편집: Youssef Khmou 2013년 2월 5일
i need more details about your simulation, if you post the problem as it should be, it will be easy to solve it, how the events take place, randomly? give simple example from your code so as we can work on it,
Rebecca
Rebecca 2013년 2월 7일
Oops - I've posted my response as an answer rather than a comment. Apologies - please see below for a clarification of what I'm after.... thank you for your help!

댓글을 달려면 로그인하십시오.


Rebecca
Rebecca 2013년 2월 7일
Ok. I start with something like this to give me a list of random numbers (25 numbers as an example):
onset=randperm(3600,25)’
These numbers represent the onsets of a human behaviour (e.g., laughing). At the moment, I am randomly selecting the onsets. I then put them in order:
sort(onset)
Then, I generate a list of random duration times. For example, I specify that the duration of each instance of laughing will be either 4, 5, or 6 seconds.
duration=[4 5 6]
To generate my list of durations that will represent the durations of my onsets, I do this:
y=datasample(duration,25)'
To give you some sample output:
onset= 128 351 457 509 566 1001 1512 1742 1965 2274 2348 2428 2838 2870 2934 3039 3260 3282 3286 3341 3435 3436 3440 3465 3484 and duration = 6 6 5 5 4 6 4 4 4 4 6 6 4 6 4 5 5 6 6 4 5 5 5 6 6 So, the first behaviour starts at second 128 and goes for 6 seconds (i.e. the offset is 134). The second behaviour startes at 351 and goes for 6 seconds (offset is 357). The third behaviour starts at 457 and goes for 5 seconds(offset is 462)... What I want is a vector of all the seconds in which a behaviour is occurring...
128 129 130 131 132 133 351 352 353 354 355 356 457 458 459 460 461 etc
Does this make sense? Once again, thanks for your help, I hope I have explained it clearly! Rebecca

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by