Main Content

측정된 데이터가 있는 파일 앙상블 데이터저장소

예측 정비 알고리즘을 설계할 때는 시스템의 다양한 작동 상태에서 수집한 대규모 데이터 세트로 작업하는 경우가 많습니다. fileEnsembleDatastore 객체를 사용하면 이러한 데이터를 관리하고 데이터와 상호 작용할 수 있습니다. 이 예제에서는 디스크에 있는 앙상블 데이터를 가리키는 fileEnsembleDatastore 객체를 만듭니다. 앙상블에서 데이터를 읽어 들이고 앙상블에 데이터를 쓰는 함수를 사용하여 이 객체를 구성합니다.

데이터 파일의 구조

이 예제에는 베어링 시스템의 정상 작동 데이터를 포함하는 두 개의 데이터 파일 baseline_01.matbaseline_02.mat가 있습니다. 동일한 시스템의 결함 데이터를 포함하는 세 개의 데이터 파일 FaultData_01.mat, FaultData_02.mat, FaultData_03.mat도 있습니다. 실제 현장에서는 훨씬 많은 데이터 파일을 사용하게 됩니다.

각 데이터 파일은 하나의 데이터 구조체 bearing을 포함합니다. 첫 번째 정상 데이터 세트에서 데이터 구조체를 불러와서 검토합니다.

unzip fileEnsData.zip  % extract compressed files
load baseline_01.mat
bearing
bearing = struct with fields:
      sr: 97656
      gs: [5000x1 double]
    load: 270
    rate: 25

구조체는 가속도계 데이터로 구성된 벡터 gs, 데이터가 기록될 때의 샘플 레이트 sr과 기타 데이터 변수를 포함합니다.

파일 앙상블 데이터저장소 만들기 및 구성

이 데이터를 예측 정비 알고리즘 설계에 사용하려면 먼저 현재 폴더에 있는 데이터 파일을 가리키는 파일 앙상블 데이터저장소를 하나 만드십시오.

fensemble = fileEnsembleDatastore(pwd,'.mat');

앙상블에 있는 데이터와 상호 작용하려면 먼저 MATLAB® 작업 공간으로 변수를 읽어 들이고 파일에 다시 데이터를 쓰도록 데이터 파일을 처리하는 방법을 소프트웨어에 알려주는 함수를 만들어야 합니다. 이 예제에서는 다음과 같은 제공된 함수를 사용합니다.

  • readBearingData — 구조체 bearing에서 요청된 변수를 추출하고 파일에 저장된 기타 변수를 추출합니다. 이 함수는 또한 데이터의 결함 상태를 나타내기 위해 파일 이름을 구문 분석합니다. 함수는 요청된 각각의 변수에 대해 하나의 테이블 변수를 포함하는 테이블 행을 반환합니다.

  • writeBearingData — 구조체를 가져와서 그 변수를 개별적인 저장된 변수로 데이터 파일에 씁니다.

이들 함수를 앙상블 데이터저장소의 ReadFcn 속성과 WriteToMemberFcn 속성에 각각 할당합니다.

addpath(fullfile(matlabroot,'examples','predmaint','main')) % Make sure functions are on path

fensemble.ReadFcn = @readBearingData;
fensemble.WriteToMemberFcn = @writeBearingData; 

마지막으로, 데이터 변수와 상태 변수를 식별하도록 앙상블의 속성을 설정합니다.

fensemble.DataVariables = ["gs";"sr";"load";"rate"];
fensemble.ConditionVariables = ["label";"file"];

앙상블을 검토합니다. 함수와 변수 이름이 적합한 속성에 할당되었습니다.

fensemble
fensemble = 
  fileEnsembleDatastore with properties:

                 ReadFcn: @readBearingData
        WriteToMemberFcn: @writeBearingData
           DataVariables: [4x1 string]
    IndependentVariables: [0x0 string]
      ConditionVariables: [2x1 string]
       SelectedVariables: [0x0 string]
                ReadSize: 1
              NumMembers: 5
          LastMemberRead: [0x0 string]
                   Files: [5x1 string]

앙상블 멤버에서 데이터 읽기

할당한 함수는 앙상블 데이터저장소를 구성하는 데이터 파일과 상호 작용하는 방법을 read 명령과 writeToLastMemberRead 명령에 알려줍니다. 따라서 read 명령을 호출하면 이 명령은 readBearingData를 사용하여 fensemble.SelectedVariables의 모든 변수를 읽어 들입니다.

읽어 들일 변수를 지정한 다음 앙상블의 첫 번째 멤버에서 해당 변수를 읽어 들입니다. read 명령은 첫 번째 앙상블 멤버에서 MATLAB 작업 공간의 테이블 행으로 데이터를 읽어 들입니다. 소프트웨어는 어느 앙상블 멤버를 처음으로 읽을지 판단합니다.

fensemble.SelectedVariables = ["file";"label";"gs";"sr";"load";"rate"];
data = read(fensemble)
data=1×6 table
     label           file               gs            sr      load    rate
    ________    ______________    _______________    _____    ____    ____

    "Faulty"    "FaultData_01"    {5000x1 double}    48828     0       25 

앙상블 멤버에 데이터 쓰기

가속도계 데이터 gs의 파워 스펙트럼을 계산하여 분석한 다음, 파워 스펙트럼 데이터를 다시 앙상블에 쓰려 한다고 가정하겠습니다. 이렇게 하려면 먼저 테이블에서 데이터를 추출하여 스펙트럼을 계산하십시오.

gsdata = data.gs{1};
sr = data.sr;
[pdata,fpdata] = pspectrum(gsdata,sr);
pdata = 10*log10(pdata); % Convert to dB

주파수 벡터 fpdata와 파워 스펙트럼 pdata를 데이터 파일에 개별적인 변수로 쓸 수 있습니다. 먼저 앙상블 데이터저장소의 데이터 변수 목록에 새로운 변수를 추가합니다.

fensemble.DataVariables = [fensemble.DataVariables;"freq";"spectrum"];
fensemble.DataVariables
ans = 6x1 string
    "gs"
    "sr"
    "load"
    "rate"
    "freq"
    "spectrum"

다음으로, 마지막으로 읽은 앙상블 멤버에 대응되는 파일에 새로운 값을 씁니다. writeToLastMemberRead를 호출하면 데이터가 구조체로 변환되고 fensemble.WriteToMemberFcn이 호출되어 파일에 데이터가 기록됩니다.

writeToLastMemberRead(fensemble,'freq',fpdata,'spectrum',pdata);

새로운 변수를 fensemble.SelectedVariables 또는 기타 속성에 추가하여 필요에 따라 변수를 식별할 수 있습니다.

read를 다시 호출하면 앙상블 데이터저장소의 다음 파일에서 데이터가 읽히고 fensemble.LastMemberRead 속성이 업데이트됩니다.

data = read(fensemble)
data=1×6 table
     label           file               gs            sr      load    rate
    ________    ______________    _______________    _____    ____    ____

    "Faulty"    "FaultData_02"    {5000x1 double}    48828     50      25 

테이블의 load 변수를 보고 이 데이터가 다른 멤버의 데이터인지 확인할 수 있습니다. 이 값은 50인 반면 이전에 읽은 멤버의 값은 0이었습니다.

모든 앙상블 멤버의 데이터 일괄 처리하기

처리 단계를 반복하여 이 앙상블 멤버의 스펙트럼을 계산하고 추가할 수 있습니다. 실제 현장에서는 데이터의 읽기, 처리, 쓰기 과정을 자동화하는 것이 더 유용합니다. 이렇게 하려면 앙상블 데이터저장소를 어떤 데이터도 읽히지 않은 상태로 재설정하십시오. (reset 연산은 이미 추가한 두 개의 새로운 변수를 포함하는 fensemble.DataVariables를 변경하지 않습니다.) 그런 다음 앙상블을 순환하면서 각 멤버에 대해 읽기, 처리, 쓰기 단계를 수행합니다.

reset(fensemble)
while hasdata(fensemble)
    data = read(fensemble);
    gsdata = data.gs{1};
    sr = data.sr;
    [pdata,fpdata] = pspectrum(gsdata,sr);
    writeToLastMemberRead(fensemble,'freq',fpdata,'spectrum',pdata);
end

hasdata 명령은 앙상블의 모든 멤버가 읽혔으면 false를 반환합니다. 이제 앙상블의 각 데이터 파일은 해당 파일의 가속도계 데이터로부터 도출된 spectrum 변수와 freq 변수를 포함합니다. 예측 정비 알고리즘을 개발하는 과정에서 이 루프와 같은 기법을 사용하여 앙상블 파일에서 데이터를 추출하고 처리할 수 있습니다. 알고리즘 개발 과정에서 파일 앙상블 데이터저장소를 사용하는 방법을 상세히 보여주는 예제는 구름 요소 베어링 결함 진단 항목을 참조하십시오. 이 예제에서는 Parallel Computing Toolbox™를 사용하여 대규모 앙상블의 처리 속도를 높이는 방법도 보여줍니다.

파일 앙상블 데이터저장소에 도출된 변수가 있는지 확인하려면 첫 번째 앙상블 멤버와 두 번째 앙상블 멤버에서 그러한 변수를 읽어 들이십시오. 이렇게 하려면 앙상블을 다시 재설정한 다음 선택된 변수에 새로운 변수를 추가하십시오. 실제 현장에서는 도출된 값을 계산해 둔 후, 그 도출된 값만 읽어 들이는 것이 유용할 수 있습니다. 그러면 처리되지 않은 데이터까지 다시 읽어 들여 메모리의 많은 공간을 낭비하는 일을 방지할 수 있습니다. 이 예제에서는 새로운 변수를 포함한 선택된 변수를 읽어 들입니다. 처리되지 않은 데이터 gs는 선택된 변수에 포함되어 있지 않습니다.

reset(fensemble)
fensemble.SelectedVariables = ["label","load","freq","spectrum"];
data1 = read(fensemble)
data1=1×4 table
     label      load         freq             spectrum    
    ________    ____    _______________    _______________

    "Faulty"     0      {4096x1 double}    {4096x1 double}

data2 = read(fensemble)
data2=1×4 table
     label      load         freq             spectrum    
    ________    ____    _______________    _______________

    "Faulty"     50     {4096x1 double}    {4096x1 double}

rmpath(fullfile(matlabroot,'examples','predmaint','main')) % Reset path

참고 항목

| |

관련 항목