2015-01-14 27 views
1

在Matlab中我试图实现以下目标:创建一个方波叠加的数据在MATLAB设置

我已经是给定的刺激时生物代表了脑激活的数据集。因此,数据是这样的,我们有9个数据点的刺激,然后15个休息,它继续像这样的约300个数据点(实时4分钟)。

我可以很容易地绘制数据,但我想覆盖一个代表有“刺激”时间的方波,只需看图表就可以很容易地看出哪个是休息期和哪种刺激。

很简单我已经创建了一个向量X,并使其以便(第一3分意味着是0)

X = [0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0] 

并绘制它在同一图中的数据。它工作正常,但问题是我需要根据我的时间尺度自动创建X.

Total_time = [-3:1.5:302] 

这是我的总时间范围,从-3到302秒,采样率为1.5秒。前3点 -3,-1.5,0是休息期。然后从0秒开始刺激大约9秒(这将在该9秒周期中产生6个数据点)。

所以我的问题是 - 是否有可能使用某种for循环来创建这个向量X来说,对于从0 X = 1开始的6个数据点以及对于下一个10 X = 0?我正在考虑以下内容:

X = zeros(1,304) %to create a 1x304 vector of zeros 
X(0:3)=0 
X(3:9)=1 
X(9:19)=0 

但是,然后再次..这是手写它。

任何人都可以帮忙吗?

谢谢!

回答

1

正如您已经告诉我们的:您拥有的是重复模式。 你的情况的图案为载体

pattern = [zeros(1,3) ones(1,9) zeros(1,15-3)]; 

所以,你可以通过使用repmat复制此向量生成的信号:

startTime = -3; 
endTime = 302; 
timeStep = 1.5; 

%%// Computation 
time = startTime:timeStep:endTime; 
numPatterns = ceil(length(time)/length(pattern)); 
X = repmat(pattern, 1, numPatterns); 
%// As the pattern will end after endTime, we remove everything beyond endTime 
X(length(time)+1:end) = []; 

%%// Plot 
plot(time, X); 
+0

非常感谢.. !! –

1

这是很容易与模运算:

m = 3; %// initial low period 
n = 6; %// high period 
p = 10; %// low period 
s = 304; %// x size 

x = [zeros(1,m) mod(0:s-m-1, n+p)<n]; 

结果(第一值):

0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 ... 

注意np可以非整数如果需要的话。例如,如果高周期持续5秒。你的采样周期为1.5秒,刚定义n=5/1.5,其给出

0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 ... 

如可以看到的,高周期持续4个或3个样品,以容纳所述非-integer n

+0

感谢这个! –