Main Content

emd

경험적 모드 분해

설명

예제

[imf,residual] = emd(x)x의 경험적 모드 분해에 해당하는, 내재 모드 함수 imf와 잔차 신호 residual을 반환합니다. emd를 사용하여 복잡한 신호를 분해한 다음, 힐베르트 스펙트럼 분석을 수행하는 데 필요한 유한개의 내재 모드 함수(intrinsic mode function)로 단순화합니다.

예제

[imf,residual,info] = emd(x)는 진단을 목적으로 IMF와 잔차 신호에 대한 추가 정보 info를 반환합니다.

예제

[___] = emd(___,Name,Value)는 하나 이상의 Name,Value 쌍 인수로 지정된 추가 옵션을 사용하여 경험적 모드 분해를 수행합니다.

예제

emd(___)는 동일한 Figure에 원래 신호, IMF, 잔차 신호를 플로팅합니다.

예제

모두 축소

뚜렷한 주파수 변화를 보이는 정현파로 구성된 비정상 연속 신호를 불러오고 시각화합니다. 비정상 연속 신호의 예에는 착암기의 진동이나 폭죽 소리가 있습니다. 이 신호는 fs의 레이트로 샘플링됩니다.

load("sinusoidalSignalExampleData.mat","X","fs")
t = (0:length(X)-1)/fs;

plot(t,X)
xlabel("Time (s)")

Figure contains an axes object. The axes object with xlabel Time (s) contains an object of type line.

혼합된 신호에는 서로 다른 진폭과 주파수 값을 갖는 정현파가 포함되어 있습니다.

힐베르트 스펙트럼 플롯을 생성하려면 신호의 내재 모드 함수(IMF)가 필요합니다. 경험적 모드 분해를 수행하여 신호의 IMF와 잔차를 계산합니다. 신호가 매끄럽지 않기 때문에 보간 방법으로 'pchip'을 지정합니다.

[imf,residual,info] = emd(X,Interpolation="pchip");

명령 창에 생성된 테이블에는 생성된 각 IMF에 대한 선별 반복 횟수, 상대 허용오차, 선별 중지 기준이 나와 있습니다. 이 정보는 info에도 포함되어 있습니다. 'Display',0 이름 값 쌍을 추가하여 테이블을 숨길 수 있습니다.

경험적 모드 분해를 사용하여 얻은 imf 성분을 사용하여 힐베르트 스펙트럼 플롯을 생성합니다.

hht(imf,fs)

Figure contains an axes object. The axes object with title Hilbert Spectrum, xlabel Time (s), ylabel Frequency (Hz) contains 9 objects of type patch.

시간에 대한 주파수의 플롯은 IMF의 각 지점에서의 순시 에너지를 나타내는 세로 컬러바가 있는 희소 플롯입니다. 이 플롯은 혼합된 원래 신호에서 분해된 각 성분의 순시 주파수 스펙트럼을 나타냅니다. 플롯의 1초 시점에 주파수 변화가 뚜렷한 3개의 IMF가 표시됩니다.

다음 삼각 함수 항등식은 동일한 물리 신호에 대한 서로 다른 2가지 표현을 보여줍니다.

52cos2πf1t+14(cos2π(f1+f2)t+cos2π(f1-f2)t)=(2+cos2πf2t)cos2πf1t.

2개의 정현파 sz를 생성합니다. s는 세 사인파의 합이고, z는 변조된 진폭의 단일 사인파입니다. 두 신호 간 차분의 무한대 노름을 계산하여 두 신호가 같음을 확인합니다.

t = 0:1e-3:10;
omega1 = 2*pi*100;
omega2 = 2*pi*20;
s = 0.25*cos((omega1-omega2)*t) + ...
    2.5*cos(omega1*t) + ...
    0.25*cos((omega1+omega2)*t);
z = (2+cos(omega2/2*t).^2).*cos(omega1*t);

norm(s-z,Inf) 
ans = 3.2729e-13

정현파를 플로팅하고 2초 지점에서 시작하는 1초 구간을 선택합니다.

plot(t,[s' z'])
xlim([2 3])
xlabel('Time (s)')
ylabel('Signal')

Figure contains an axes object. The axes object with xlabel Time (s), ylabel Signal contains 2 objects of type line.

이 신호의 스펙트로그램을 계산합니다. 스펙트로그램은 서로 다른 3가지 정현파 성분을 보여줍니다. 푸리에 해석에서는 신호를 사인파가 중첩된 것으로 인식합니다.

pspectrum(s,1000,'spectrogram','TimeResolution',4)

Figure contains an axes object. The axes object with title Fres = 3.9101 Hz, Tres = 4 s, xlabel Time (s), ylabel Frequency (Hz) contains an object of type image.

emd를 사용하여 신호의 내재 모드 함수(IMF) 및 추가 진단 정보를 계산합니다. 이 함수는 기본적으로 각 IMF에 대한 선별 반복 횟수, 상대 허용오차, 선별 중지 기준을 보여주는 표를 출력합니다. 경험적 모드 분해에서는 이 신호를 z로 인식합니다.

[imf,~,info] = emd(s);

영점교차의 개수와 국소 극값은 최대 1만큼 차이가 납니다. 이는 신호가 IMF가 되는 데 필요한 조건을 충족합니다.

info.NumZerocrossing - info.NumExtrema
ans = 1

IMF를 플로팅하고 2초 지점에서 시작하는 0.5초 구간을 선택합니다. emd가 신호를 변조된 진폭으로 인식하기 때문에 IMF는 AM 신호입니다.

plot(t,imf)
xlim([2 2.5])
xlabel('Time (s)')
ylabel('IMF')

Figure contains an axes object. The axes object with xlabel Time (s), ylabel IMF contains an object of type line.

손상된 베어링의 진동 신호를 시뮬레이션합니다. 신호의 IMF를 시각화하고 결함이 있는지 찾아보기 위해 경험적 모드 분해를 수행합니다.

베어링의 피치 직경은 12cm이며 8개의 구름 요소가 있습니다. 각 구름 요소의 지름은 2cm입니다. 내륜이 초당 25 사이클로 구동되는 동안 외륜은 부동 상태로 유지됩니다. 가속도계가 10kHz로 베어링 진동을 샘플링합니다.

fs = 10000;
f0 = 25;
n = 8;
d = 0.02;
p = 0.12;

정상적인 베어링의 진동 신호에는 여러 차수의 구동 주파수가 포함되어 있습니다.

t = 0:1/fs:10-1/fs;
yHealthy = [1 0.5 0.2 0.1 0.05]*sin(2*pi*f0*[1 2 3 4 5]'.*t)/5;

측정 과정의 중간에 베어링 진동에 공명이 가해집니다.

yHealthy = (1+1./(1+linspace(-10,10,length(yHealthy)).^4)).*yHealthy;

공명으로 인해 베어링의 외륜에 결함이 생겨 점점 더 마모됩니다. 이 결함 때문에 베어링의 외륜 통과 주파수(ball pass frequency outer race, BPFO)에서 일련의 충격이 발생합니다.

BPFO=12nf0[1-dpcosθ],

f0은 구동 속도, n은 구름 요소의 수, d는 구름 요소의 직경, p는 베어링의 피치 직경, θ는 베어링 접촉각입니다. 15°의 접촉각을 가정하고 BPFO를 계산합니다.

ca = 15;
bpfo = n*f0/2*(1-d/p*cosd(ca));

pulstran (Signal Processing Toolbox) 함수를 사용하여 충격을 5밀리초 정현파로 구성된 주기적 열로 모델링합니다. 각 3kHz 정현파에는 플랫 탑 윈도우가 적용됩니다. 베어링 진동 신호에 점진적 마모를 적용하기 위해 멱법칙을 사용합니다.

fImpact = 3000;
tImpact = 0:1/fs:5e-3-1/fs;
wImpact = flattopwin(length(tImpact))'/10;
xImpact = sin(2*pi*fImpact*tImpact).*wImpact;

tx = 0:1/bpfo:t(end);
tx = [tx; 1.3.^tx-2];

nWear = 49000;
nSamples = 100000;
yImpact = pulstran(t,tx',xImpact,fs)/5;
yImpact = [zeros(1,nWear) yImpact(1,(nWear+1):nSamples)];

정상적인 신호에 충격을 더하여 BPFO 진동 신호를 생성합니다. 신호를 플로팅하고 5.0초 지점에서 시작하는 0.3초 구간을 선택합니다.

yBPFO = yImpact + yHealthy;

xLimLeft = 5.0;
xLimRight = 5.3;
yMin = -0.6;
yMax = 0.6;

plot(t,yBPFO)

hold on
[limLeft,limRight] = meshgrid([xLimLeft xLimRight],[yMin yMax]);
plot(limLeft,limRight,'--')
hold off

Figure contains an axes object. The axes object contains 3 objects of type line.

충격의 효과를 시각화하기 위해 선택된 구간을 확대합니다.

xlim([xLimLeft xLimRight])

Figure contains an axes object. The axes object contains 3 objects of type line.

백색 가우스 잡음을 신호에 추가합니다. 잡음 분산을 1/1502로 지정합니다.

rn = 150;
yGood = yHealthy + randn(size(yHealthy))/rn;
yBad = yBPFO + randn(size(yHealthy))/rn;

plot(t,yGood,t,yBad)
xlim([xLimLeft xLimRight])
legend('Healthy','Damaged')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Healthy, Damaged.

emd를 사용하여 정상적인 베어링 신호의 경험적 모드 분해를 수행합니다. 처음 5개의 내재 모드 함수(IMF)를 계산합니다. 'Display' 이름-값 쌍을 사용하여 각 IMF에 대한 선별 반복 횟수, 상대 허용오차, 선별 중지 기준으로 구성된 테이블을 표시합니다.

imfGood = emd(yGood,'MaxNumIMF',5,'Display',1);
Current IMF  |  #Sift Iter  |  Relative Tol  |  Stop Criterion Hit  
      1      |        3     |     0.017132   |  SiftMaxRelativeTolerance
      2      |        3     |      0.12694   |  SiftMaxRelativeTolerance
      3      |        6     |      0.14582   |  SiftMaxRelativeTolerance
      4      |        1     |     0.011082   |  SiftMaxRelativeTolerance
      5      |        2     |      0.03463   |  SiftMaxRelativeTolerance
Decomposition stopped because maximum number of intrinsic mode functions was extracted.

출력 인수 없이 emd를 사용하여 첫 3개 모드와 잔차를 시각화합니다.

emd(yGood,'MaxNumIMF',5)

Figure contains 5 axes objects. Axes object 1 with ylabel Signal contains an object of type line. This object represents data. Axes object 2 with ylabel IMF 1 contains an object of type line. This object represents data. Axes object 3 with ylabel IMF 2 contains an object of type line. This object represents data. Axes object 4 with ylabel IMF 3 contains an object of type line. This object represents data. Axes object 5 with ylabel Residual contains an object of type line. This object represents data.

결함 있는 베어링 신호의 IMF를 계산하고 시각화합니다. 첫 번째 경험적 모드에서 고주파수 영향이 나타납니다. 이 고주파수 모드는 마모가 진행되면서 에너지가 늘어납니다. 세 번째 모드는 진동 신호의 공명을 보여줍니다.

imfBad = emd(yBad,'MaxNumIMF',5,'Display',1);
Current IMF  |  #Sift Iter  |  Relative Tol  |  Stop Criterion Hit  
      1      |        2     |     0.041274   |  SiftMaxRelativeTolerance
      2      |        3     |      0.16695   |  SiftMaxRelativeTolerance
      3      |        3     |      0.18428   |  SiftMaxRelativeTolerance
      4      |        1     |     0.037177   |  SiftMaxRelativeTolerance
      5      |        2     |     0.095861   |  SiftMaxRelativeTolerance
Decomposition stopped because maximum number of intrinsic mode functions was extracted.
emd(yBad,'MaxNumIMF',5)

Figure contains 5 axes objects. Axes object 1 with ylabel Signal contains an object of type line. This object represents data. Axes object 2 with ylabel IMF 1 contains an object of type line. This object represents data. Axes object 3 with ylabel IMF 2 contains an object of type line. This object represents data. Axes object 4 with ylabel IMF 3 contains an object of type line. This object represents data. Axes object 5 with ylabel Residual contains an object of type line. This object represents data.

분석의 다음 단계는 추출된 IMF의 힐베르트 스펙트럼 계산입니다. 자세한 내용은 진동 신호의 힐베르트 스펙트럼 계산 (Signal Processing Toolbox) 예제를 참조하십시오.

뚜렷한 주파수 변화를 보이는 정현파로 구성된 비정상 연속 신호를 불러오고 시각화합니다. 비정상 연속 신호의 예에는 착암기의 진동이나 폭죽 소리가 있습니다. 이 신호는 fs의 레이트로 샘플링됩니다.

load('sinusoidalSignalExampleData.mat','X','fs')
t = (0:length(X)-1)/fs;
plot(t,X)
xlabel('Time(s)')

Figure contains an axes object. The axes object with xlabel Time(s) contains an object of type line.

혼합된 신호에는 서로 다른 진폭과 주파수 값을 갖는 정현파가 포함되어 있습니다.

경험적 모드 분해를 수행하여 신호의 내재 모드 함수와 잔차를 플로팅합니다. 신호가 매끄럽지 않기 때문에 보간 방법으로 'pchip'을 지정합니다.

emd(X,'Interpolation','pchip','Display',1)
Current IMF  |  #Sift Iter  |  Relative Tol  |  Stop Criterion Hit  
      1      |        2     |     0.026352   |  SiftMaxRelativeTolerance
      2      |        2     |    0.0039573   |  SiftMaxRelativeTolerance
      3      |        1     |     0.024838   |  SiftMaxRelativeTolerance
      4      |        2     |      0.05929   |  SiftMaxRelativeTolerance
      5      |        2     |      0.11317   |  SiftMaxRelativeTolerance
      6      |        2     |      0.12599   |  SiftMaxRelativeTolerance
      7      |        2     |      0.13802   |  SiftMaxRelativeTolerance
      8      |        3     |      0.15937   |  SiftMaxRelativeTolerance
      9      |        2     |      0.15923   |  SiftMaxRelativeTolerance
Decomposition stopped because the number of extrema in the residual signal is less than the 'MaxNumExtrema' value.

Figure contains 5 axes objects. Axes object 1 with ylabel Signal contains an object of type line. This object represents data. Axes object 2 with ylabel IMF 1 contains an object of type line. This object represents data. Axes object 3 with ylabel IMF 2 contains an object of type line. This object represents data. Axes object 4 with ylabel IMF 3 contains an object of type line. This object represents data. Axes object 5 with ylabel Residual contains an object of type line. This object represents data.

emd는 원래 신호, 처음 3개의 IMF, 잔차가 포함된 대화형 플롯을 생성합니다. 명령 창에 생성된 테이블에는 생성된 각 IMF에 대한 선별 반복 횟수, 상대 허용오차, 선별 중지 기준이 나와 있습니다. 'Display' 이름-값 쌍을 제거하거나 이 이름-값 쌍을 0으로 지정하여 테이블을 숨길 수 있습니다.

플롯에서 흰색 영역을 마우스 오른쪽 버튼으로 클릭하여, IMF 선택기 창을 엽니다. IMF 선택기를 사용하여 생성된 IMF, 원래 신호, 잔차를 선택적으로 볼 수 있습니다.

표시할 IMF를 목록에서 선택합니다. 플롯에 원래 신호와 잔차를 표시할지 여부를 선택합니다.

이제, 선택한 IMF가 플롯에 표시됩니다.

플롯을 사용하여, 원래 신호에서 분해된 각 성분을 잔차와 함께 시각화할 수 있습니다. 잔차는 총 IMF 개수에 대해 계산되며, IMF 선택기 창에서 선택한 IMF에 따라 변경되지 않습니다.

입력 인수

모두 축소

시간 영역 신호로, 실수 값 벡터로 지정되거나 열이 1개인 단일 변수 타임테이블로 지정됩니다. x가 타임테이블인 경우 x는 증가하는 유한한 행 시간값을 포함해야 합니다.

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: 'MaxNumIMF',5

코시(Cauchy) 유형 수렴 기준으로, 'SiftRelativeTolerance'와 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다. SiftRelativeTolerance는 선별 중지 기준 중 하나입니다. 즉, 현재 상대 허용오차가 SiftRelativeTolerance보다 작으면 선별이 중지됩니다. 자세한 내용은 선별 상대 허용오차 항목을 참조하십시오.

선별 반복의 최대 횟수로, 'SiftMaxIterations'와 함께 양의 정수 스칼라가 쉼표로 구분되어 지정됩니다. SiftMaxIterations는 선별 중지 기준 중 하나입니다. 즉, 현재 반복 횟수가 SiftMaxIterations보다 크면 선별이 중지됩니다.

SiftMaxIterations는 양의 정수로만 지정할 수 있습니다.

추출된 최대 IMF 개수로, 'MaxNumIMF'와 함께 양의 정수 스칼라가 쉼표로 구분되어 지정됩니다. MaxNumIMF는 분해 중지 기준 중 하나입니다. 즉, 생성된 IMF 개수가 MaxNumIMF와 같으면 분해가 중지됩니다.

MaxNumIMF는 양의 정수로만 지정할 수 있습니다.

잔차 신호 극값의 최대 개수로, 'MaxNumExtrema'와 함께 양의 정수 스칼라가 쉼표로 구분되어 지정됩니다. MaxNumExtrema는 분해 중지 기준 중 하나입니다. 즉, 극값 개수가 MaxNumExtrema보다 적으면 분해가 중지됩니다.

MaxNumExtrema는 양의 정수로만 지정할 수 있습니다.

신호 대 잔차 에너지 비로, 'MaxEnergyRatio'와 함께 스칼라가 쉼표로 구분되어 지정됩니다. MaxEnergyRatio는 선별 시작 시의 신호 에너지 대 평균 포락선 에너지 비입니다. MaxEnergyRatio는 분해 중지 기준 중 하나로, 현재 에너지 비가 MaxEnergyRatio보다 크면 분해가 중지됩니다. 자세한 내용은 에너지 비 항목을 참조하십시오.

포락선 생성을 위한 보간 방법으로, 'Interpolation'과 함께 'spline' 또는 'pchip'이 쉼표로 구분되어 지정됩니다.

Interpolation은 다음과 같이 지정합니다.

  • 'spline' - x가 평활화 신호인 경우

  • 'pchip' - x가 평활화 신호가 아닌 경우

'spline' 보간 방법은 3차 스플라인을 사용하는 반면, 'pchip'은 조각별 3차 에르미트 보간 다항식을 사용합니다.

명령 창에서의 정보 표시 전환으로, 'Display'와 함께 0 또는 1이 쉼표로 구분되어 지정됩니다. 명령 창에 생성된 테이블에는 생성된 각 IMF에 대한 선별 반복 횟수, 상대 허용오차, 선별 중지 기준이 나와 있습니다. 테이블을 표시하려면 Display를 1로 지정하고 테이블을 숨기려면 0으로 지정하십시오.

출력 인수

모두 축소

내재 모드 함수(IMF)로, 행렬 또는 timetable형으로 반환됩니다. 각 IMF는 천천히 변화하는 양의 포락선을 갖는 주파수 변조 및 진폭 변조된 신호입니다. 신호의 스펙트럼 분석을 수행하려면 신호의 IMF에 힐베르트-황 변환(Hilbert-Huang Transform)을 적용하면 됩니다. hht내재 모드 함수 항목을 참조하십시오.

imf는 다음 형태로 반환됩니다.

  • x가 벡터인 경우 각 열이 imf인 행렬

  • x가 데이터 열이 하나인 타임테이블인 경우 타임테이블

신호의 잔차로, 열 벡터 또는 데이터 열이 하나인 타임테이블로 반환됩니다. residual은 원래 신호 x에서 emd로 분해되지 않은 부분을 나타냅니다.

residual은 다음 형태로 반환됩니다.

  • x가 벡터인 경우 열 벡터.

  • x가 데이터 열이 하나인 타임테이블인 경우 단일 데이터 열의 타임테이블.

진단에 대한 추가 정보로, 다음 필드가 있는 구조체로 반환됩니다.

  • NumIMF — 추출된 IMF 개수

    NumIMF는 1부터 N까지의 벡터로, 여기서 N은 IMF의 개수입니다. 추출된 IMF가 없으면 NumIMF는 비어 있습니다.

  • NumExtrema — 각 IMF의 극값 개수

    NumExtrema는 IMF 개수와 길이가 같은 벡터입니다. NumExtrema의 k번째 요소는 k번째 IMF에 있는 극값의 개수입니다. 추출된 IMF가 없으면 NumExtrema는 비어 있습니다.

  • NumZerocrossing — 각 IMF의 영점교차 개수

    각 IMF의 영점교차 개수입니다. NumZerocrossing은 IMF의 개수와 길이가 같은 벡터입니다. NumZerocrossing의 k번째 요소는 k번째 IMF에 있는 영점교차의 개수입니다. 추출된 IMF가 없으면 NumZerocrossing은 비어 있습니다.

  • NumSifting — 각 IMF를 추출하는 데 사용된 선별 반복 횟수

    NumSifting은 IMF 개수와 길이가 같은 벡터입니다. NumSifting의 k번째 요소는 k번째 IMF를 추출하는 데 사용된 선별 반복 횟수입니다. 추출된 IMF가 없으면 NumSifting은 비어 있습니다.

  • MeanEnvelopeEnergy — 각 IMF에 대해 획득한 상부 포락선과 하부 포락선의 평균이 갖는 에너지

    UE가 상부 포락선이고 LE가 하부 포락선이면 MeanEnvelopeEnergymean(((LE+UL)/2).^2)입니다. MeanEnvelopeEnergy는 IMF의 개수와 길이가 같은 벡터입니다. MeanEnvelopeEnergy의 k번째 요소는 k번째 IMF의 평균 포락선 에너지입니다. 추출된 IMF가 없으면 MeanEnvelopeEnergy는 비어 있습니다.

  • RelativeTolerance — 각 IMF의 잔차의 최종 상대 허용오차

    상대 허용오차는 i번째 선별 단계 잔차의 2-노름 제곱 값에 대한 이전 선별 단계 잔차와 현재 선별 단계 잔차의 차이의 2-노름 제곱 값의 비로 정의됩니다. 선별 과정은 RelativeToleranceSiftRelativeTolerance보다 작은 경우 중지됩니다. 자세한 내용은 선별 상대 허용오차 항목을 참조하십시오. RelativeTolerance는 IMF의 개수와 길이가 같은 벡터입니다. RelativeTolerance의 k번째 요소는 k번째 IMF에 대해 구한 최종 상대 허용오차입니다. 추출된 IMF가 없으면 RelativeTolerance는 비어 있습니다.

세부 정보

모두 축소

경험적 모드 분해

경험적 모드 분해(EMD) 알고리즘은 반복 과정을 통해 신호 x(t)를 내재 모드 함수(IMF)와 잔차로 분해합니다. 알고리즘의 핵심 컴포넌트는 함수 x(t)선별(sifting)하여 새 함수 Y(t)를 구하는 것입니다.

  • 먼저 x(t)의 국소 최솟값과 국소 최댓값을 구합니다.

  • 그런 다음 국소 극값을 사용하여 x(t)의 하부 포락선 s(t)와 상부 포락선 s+(t)를 생성합니다. 포락선의 평균 m(t)를 구성합니다.

  • x(t)에서 평균을 빼서 잔차 Y(t) = x(t) − m(t)를 구합니다.

분해는 다음과 같이 진행됩니다.

  1. 먼저 r0(t) = x(t)라고 합시다. 여기서 x(t)는 초기 신호입니다.i = 0이라고 합시다.

  2. 선별에 앞서 ri(t)를 확인합니다.

    1. ri(t)의 국소 극값의 총 개수(TN)를 구합니다.

    2. ri(t)의 에너지 비(ER)를 구합니다(에너지 비 참조).

  3. (ER > MaxEnergyRatio)이거나 (TN < MaxNumExtrema)이거나 (IMF의 개수 > MaxNumIMF)이면 분해를 중지합니다.

  4. ri,Prev(t) = ri(t)라고 합시다.

  5. ri,Prev(t)를 선별하여 ri,Cur(t)를 구합니다.

  6. ri,Cur(t)를 확인합니다.

    1. ri,Cur(t)의 상대 허용오차(RT)를 구합니다(선별 상대 허용오차 참조).

    2. 현재 선별 반복 횟수(IN)를 구합니다.

  7. (RT < SiftRelativeTolerance)이거나 (IN > SiftMaxIterations)이면 선별을 중지합니다. IMF IMFi(t) = ri,Cur(t)를 구했습니다. 구하지 못했다면 ri,Prev(t) = ri,Cur(t)로 하고 5단계로 이동합니다.

  8. ri+1(t) = ri(t) − ri,Cur(t)라고 합시다.

  9. i = i + 1라고 합시다. 2단계로 돌아갑니다.

자세한 내용은 [1][3] 항목을 참조하십시오.

내재 모드 함수

EMD 알고리즘은 반복 선별 과정을 통해 신호 x(t)를 다음과 같이 IMF imfi(t)와 잔차 rN(t)로 분해합니다.

X(t)=i=1NIMFi(t)+rN(t)

황(Huang) 등이 처음 소개한[1] IMF는 다음과 같은 두 가지 특성을 갖는 함수로 정의되었습니다.

  • 국소 극값의 개수(국소 최솟값과 국소 최댓값의 총 개수)와 영점교차의 개수는 최대 1만큼 차이가 납니다.

  • 국소 극값으로부터 생성된 상부 포락선과 하부 포락선의 평균값은 0입니다.

그러나 [4]에서 설명하는 바와 같이, 엄격한 IMF를 구할 때까지 선별하면 물리적으로 유의미하지 않은 IMF를 얻게 될 수 있습니다. 구체적으로 말해, 영점교차의 개수와 국소 극값의 개수가 최대 1만큼 차이가 날 때까지 선별한다면 순수한 톤에 가까운 IMF, 즉 푸리에 기저에 대한 사영으로 얻는 것과 매우 비슷한 함수를 얻게 될 수 있습니다. 이는 EMD에서 피하려 하는 바로 그 상황으로, EMD가 물리적 유의미성을 갖는 AM-FM 변조된 성분을 선호하는 이유입니다.

참고 문헌 [4]에서는 물리적으로 유의미한 결과를 얻기 위한 옵션을 제안합니다. emd 함수는 코시 유형 중지 기준인 선별 상대 허용오차 방법을 사용하여 원래의 IMF 정의를 완화합니다. emd 함수는 반복을 통해 자연적인 AM-FM 모드를 추출합니다. 생성된 IMF는 국소 극값-영점교차 기준을 충족하지 못할 수 있습니다. 정현파 내재 모드 함수의 영점교차 및 극값 항목을 참조하십시오.

선별 상대 허용오차

선별 상대 허용오차[4]에서 제안하는 코시 유형 중지 기준입니다. 현재 상대 허용오차가 SiftRelativeTolerance보다 작으면 선별 과정이 중지됩니다. 현재 상대 허용오차는 다음과 같이 정의됩니다.

Relative Tolerancerprev(t)rcur(t)22rprev(t)22.

코시 기준은 영점교차와 국소 극값의 개수를 직접 세지 않기 때문에, 분해에서 반환되는 IMF가 내재 모드 함수의 엄격한 정의를 충족하지 않을 가능성이 있습니다. 이 경우 SiftRelativeTolerance의 값을 디폴트 값에서 줄여 볼 수 있습니다. 중지 기준에 대한 자세한 내용은 [4] 항목을 참조하십시오. 참고 문헌에서는 경험적 모드 분해에서 엄격하게 정의된 IMF를 고집하는 것의 이점과 단점도 설명합니다.

에너지 비

에너지 비는 선별 시작 시의 신호 에너지 대 평균 포락선 에너지의 비입니다[2]. 현재 에너지 비가 MaxEnergyRatio보다 크면 분해가 중지됩니다. i번째 IMF의 에너지 비는 다음과 같이 정의됩니다.

Energy Ratio10log10(X(t)2ri(t)2).

참고 문헌

[1] Huang, Norden E., Zheng Shen, Steven R. Long, Manli C. Wu, Hsing H. Shih, Quanan Zheng, Nai-Chyuan Yen, Chi Chao Tung, and Henry H. Liu. “The Empirical Mode Decomposition and the Hilbert Spectrum for Nonlinear and Non-Stationary Time Series Analysis.” Proceedings of the Royal Society of London. Series A: Mathematical, Physical and Engineering Sciences 454, no. 1971 (March 8, 1998): 903–95. https://doi.org/10.1098/rspa.1998.0193.

[2] Rato, R.T., M.D. Ortigueira, and A.G. Batista. “On the HHT, Its Problems, and Some Solutions.” Mechanical Systems and Signal Processing 22, no. 6 (August 2008): 1374–94. https://doi.org/10.1016/j.ymssp.2007.11.028.

[3] Rilling, Gabriel, Patrick Flandrin, and Paulo Gonçalves. "On Empirical Mode Decomposition and Its Algorithms." IEEE-EURASIP Workshop on Nonlinear Signal and Image Processing 2003. NSIP-03. Grado, Italy. 8–11.

[4] Wang, Gang, Xian-Yao Chen, Fang-Li Qiao, Zhaohua Wu, and Norden E. Huang. “On Intrinsic Mode Function.” Advances in Adaptive Data Analysis 02, no. 03 (July 2010): 277–93. https://doi.org/10.1142/S1793536910000549.

확장 기능

버전 내역

R2018a에 개발됨

참고 항목

함수

도움말 항목