2012-03-23 2 views
1

차량용 채널의 데이터가 포함 된 하위 수준의 1x1 구조체가 포함 된 filedata.mat 파일이 있습니다. 파일에는 30 개의 측정 된 채널이 있습니다. 채널 이름, 채널 단위 및 채널 값 (시간 대비)은 별도의 하위 수준에 저장됩니다.MATLAB : 구조체에서 데이터를 추출하고 사용자 정의 크기 행렬에 배치

난 지정하고자하는 채널 (즉, 어떤 데이터 열) 열 번호에 의해 행 2

코드의 1 행의 채널명 및 채널 단위 완전한 매트릭스 코드 놓고 데이터를 내가 현재 가지고는 다음과 같습니다 :

clear all; 

channels = [1 4 8]; 

source = load('filedata.mat'); 

N = size(channels,2); 
I = size(source.Data.DataOut,1) + 2; 
data = zeros(I,N); 

for i = (1:1:I) 
    for n = (1:1:N) 
     if i == 1 
      data(i,n) = source.Data.ChannelNames{channels(n)}; 
     elseif i == 2 
      data(i,n) = source.Data.ChannelUnits{channels(n)}; 
     else 
      data(i,n) = source.Data.DataOut{i,channels(n)}; 
     end 
    end 
end 

내 생각이은 행 1 channelnames을 배치하는 것입니다 (즉, 때 = 1), 행 2 channelunits (때 = 2) 다음의 남아있는 모든 행을 배치합니다 i = I까지의 데이터.

그러나 이것을 실행할 때 코드 "하위 할당 된 치수가 일치하지 않습니다."오류가 발생합니다. 행 14 인 : 사람이 솔루션을 제안 할 수

data(i,n) = source.Data.ChannelNames{channels(n)}; 

경우 - 아마도 더 중요한 것은 - 필자 (그래서 내가 뭔가를 배울 수 있습니다!) 내가 정말 감사하겠습니다 잘못 됐을 경우에 대해 설명합니다. 사전에

감사합니다.

답변

0

귀하의 ChannelNames은 문자열의 셀 배열이라고 가정합니다. 따라서 문 source.Data.ChannelNames{channels(n)}data의 숫자 값에 할당 할 수없는 문자열을 반환합니다.

채널 이름을 선택하고 변수에 유지하려면이 변수를 셀 배열로 지정하십시오. 그런 다음

data = cell(I,N); 
data(1,:) = source.Data.ChannelNames(channels); 
data(2,:) = source.Data.ChannelUnits(channels); 
data(3:I,:) = num2cell(source.Data.DataOut(:,channels)); 
+0

불쾌은 감사합니다 귀하의 빠른 reponse의 channelnames 및 단위 16 개 데이터 (3에서 ==에서 오류> dataextract을 받고 데이터 메신저로하지만, 지금 노력하고 있습니다 : 나는, :) = 소스 .Data.DataOut (:, channels); % # DataOut이 셀 배열이라고 가정합니다. ??? 셀을 두 배로 변환 할 수 없습니다. – user1230617

+0

코드에서 DataOut은 셀 배열이어야합니다. 분명히 잘못된 가정입니다. DataOut을 셀 배열로 변환하거나 별도의 숫자 변수로 유지할 수 있습니다. 이'data' 변수를 어떻게 사용할 것입니까? – yuk

+0

코드를 수정했지만 필요한 부분입니까? – yuk

관련 문제