簡體   English   中英

在Matlab中選擇特定的時間范圍

[英]Selecting certain time range in Matlab

我有一個項目要做,即時通訊面臨一些問題。 請幫我。 我還不太擅長Matlab。 基本上,我有一組連續記錄了3天的運動數據(data.mat)。 我需要:1.僅選擇整個數據集的特定時刻(時間范圍)2.將這些時刻分成2.56秒的小部分3.對每個小部分進行FFT,以查看頻域中的運動,以及僅選擇5-25 Hz 4.找到幾個最大的頻率峰值

我編寫了一個代碼,用於對整個數據“ Data.mat”進行FFT和峰值處理,並且可以正常工作。 這是我的代碼:

load('Data.mat');
P=data1(,2); %  
Fs=100       
Ts=1/Fs        
L=length(P)     
t = (0:L-1)*Ts;    
nfft = 256    

figure(1)      % raw signal plotting
plot(t,P);

y = fft(P,nfft)/L;       % FFT
ymag = abs(y(1:length(y)/2+1));
ft = Fs/2*linspace(0,1,nfft/2+1);

figure(2)    % FFT plotting
plot(ft,2*abs(y(1:nfft/2+1)))

indx=ft>= 5 & ft<= 25; % only 5-25Hz
ftsub=ft(indx);
ymagsub=ymag(indx);

% highest peaks
[pks,locs] = findpeaks(ymagsub,'MinPeakHeight',0.02)
plot(ftsub,ymagsub,ftsub(locs),pks,'rv','MarkerFaceColor','r')

現在我試圖只選擇數據的某些時刻,但是我有問題。 例如,我只想選擇時間范圍:2013年13月3日9:20:00-9:45:00

我努力了:

t_start =datenum('13-03-2013 9:20:00 AM', 'dd-mm-yyyy HH:MM:SS AM');
t_end = datenum('13-03-2013 9:45:00 AM', 'dd-mm-yyyy HH:MM:SS AM');
rows=find(P>= t_start & P<= t_end); 

但我得到答案:行=空矩陣:0×1

怎么了? 如果此代碼錯誤,那么如何選擇某個時間范圍呢? 以及如何選擇進入2.56秒?

請幫助我,我已經嘗試了好幾個星期了,我現在真的很沮喪。

為了使該行正常工作: rows=find(P>= t_start & P<= t_end); P必須是MATLAB datenum格式的一系列時間。

我猜P是您的實際數據-所以它不起作用,因為find只是將P中的數字值與數字日期值進行比較-您的“ P”值在MATLAB中沒有日期標簽。 要記住的重要一點是, datenum的輸出只是一個數字,因此MATLAB允許您將其與其他數字進行比較,即使結果沒有實際意義。

您的選擇是:

  1. 如果您的數據包含時間戳,請加載該時間戳,並檢查其格式是否正確(將其轉換為datestr以進行健全性檢查)。 這可能是數據的第一列。 在時間值上執行查找,然后使用該值繪制/提取P的適當部分。
  2. 使用您對第一個數據點的時間+采樣率的了解,構造一個時間向量,然后執行相同的操作。 與您的t相似,但以日期數表示。 如果您的數據采集意味着您僅具有文件開始以來的時間加上開始時間,那么這也將起作用。

然后就像:

r=find(t>= t_start & t<= t_end); 
plot(t(r),P(r);

暫無
暫無

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

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