2017-02-27 88 views
0

我有一個連接到Arduino的MPU6050帶有多個記錄的* .txt文件。如何創建一個從滿足邏輯條件的矩陣中提取每個原始的子矩陣?

我可以識別何時創建新記錄,因爲列時間從低於前一個(從不爲0)的隨機值重新啓動。

該文件是包含爲了時間NX7,AX,AY,AZ,GX,GY,GZ

我試圖提取從單個矩陣第m子記錄,所以我定義的邏輯如果。

  1. 如果時間i>時間i + 1跟蹤原始矩陣的位置並將其存儲在子矩陣(rangematrix)中,則此邊界值。
  2. 從rangematrix創建一組子矩陣(子矩陣的總數將是[大小(rangematrix,1)-1]。

我有一個土木工程師背景和我是用Matlab一個小白。
感謝您的時間,感謝您的耐心。

我試着用下面的代碼來解決這個問題,但我認爲是唯一的垃圾。

%Open the file 
filename= uigetfile ('.txt'); 
fileID = fopen (filename); 
logmpu6050 =csvread(filename); 
fclose (fileID); 
n=length(logmpu6050); 
%Count every time i>i+1 where i is the i,1 element of my dataset 
for i=1:n-1 
%Save the data of the i raw every time happens i>i+1 
if logmpu6050(i,1)>logmpu6050(i+1,1); 
rangematrix(i,:)= logmpu6050(i,:); 
end 
end 
% Create a new sets of matrices from boundary values 

我也讀了很多關於棧BU問題T I沒有找到解決辦法:

MATLAB: extract every nth element of vector

Extract large Matlab dataset subsets

MATLAB: Extract multiple parts of a matrix without using loops

MATLAB: Extracting elements periodically

Extract data from MATLAB matrix without for-loop

How to extract a vector from a large matrix by index in MATLAB?

How to extract a part of a matrix with condition in Matlab

回答

1

您可以使用比較。

filename= uigetfile ('.txt'); 
fileID = fopen (filename); 
logmpu6050 =csvread(filename); 
fclose (fileID); 
n=length(logmpu6050); 
%Count every time i>i+1 where i is the i,1 element of my dataset 
rangematrix = logmpu6050(diff(logmpu6050(:,1)) > 0,:); 
+0

謝謝,我會試試:) –

+0

爲什麼你使用最後,如果沒有if else語句? 如果我使用'rangematrix = logmpu6050(diff(logmpu6050(:1))<0,:);'我可以知道這是什麼時候發生的,並且我有一個5X7的矩陣和邊界值。如果我使用'rangematrix = logmpu6050(diff(logmpu6050(:1))<0,:);'在我的具體情況下,我得到一個26.214X7的原始矩陣是26220X7,所以解決方案不考慮(邏輯上正確)矩陣的最終值 –