簡體   English   中英

創建方波以覆蓋Matlab中的數據集

[英]Creating a square wave to overlay data set in 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.5s。 前三個點-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

但話又說回來..這是手工編寫的。

有人可以幫忙嗎?

謝謝!

使用模運算很容易:

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個樣本以適應非整數n

正如您已經告訴我們的:您擁有的是重復模式。 在您的情況下,模式是矢量

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM