이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

smoothdata

잡음이 있는 데이터 스무딩

설명

예제

B = smoothdata(A)는 경험적으로 결정된 고정 윈도우 길이를 사용하여 벡터 요소의 이동 평균을 반환합니다. 윈도우는 벡터 전체에 대해 아래로 이동하면서, 각 윈도우 내 요소의 평균을 계산합니다.

  • A가 행렬인 경우 smoothdata는 각 열에 대해 아래로 이동하며 이동 평균을 계산합니다.

  • A가 다차원 배열인 경우 smoothdata는 크기가 1이 아닌 첫 번째 차원에 따라 동작합니다.

  • A가 숫자형 변수를 포함한 테이블이거나 타임테이블인 경우 smoothdata는 각 변수에 대해 개별적으로 연산을 수행합니다.

예제

B = smoothdata(A,dim)A의 차원 dim을 따라 동작합니다. 예를 들어, A가 행렬인 경우 smoothdata(A,2)A의 각 행에 있는 데이터를 스무딩합니다.

예제

B = smoothdata(___,method)는 위에 열거된 구문에 대한 스무딩 방법을 지정합니다. 예를 들어, B = smoothdata(A,'sgolay')는 사비츠키-골레이 필터를 사용하여 A의 데이터를 스무딩합니다.

예제

B = smoothdata(___,method,window)는 스무딩 방법에서 사용되는 윈도우의 길이를 지정합니다. 예를 들어, smoothdata(A,'movmedian',5)는 요소를 5개 가진 슬라이딩 윈도우에서 중앙값을 구하여 A에서 데이터를 스무딩합니다.

예제

B = smoothdata(___,nanflag)는 위에 열거된 구문에서 NaN 값이 처리되는 방식을 지정합니다. 'omitnan'NaN 값을 무시하고 'includenan'은 각 윈도우 내에서 계산할 때 NaN 값을 포함시킵니다.

예제

B = smoothdata(___,Name,Value)는 하나 이상의 이름-값 쌍의 인수를 사용하여 스무딩에 대한 추가 파라미터를 지정합니다. 예를 들어, t가 시간 값의 벡터인 경우 smoothdata(A,'SamplePoints',t)t에 상대적인 A의 데이터를 스무딩합니다.

예제

[B,window] = smoothdata(___)는 또한 이동 윈도우 길이를 반환합니다.

예제

모두 축소

잡음이 있는 데이터를 포함하는 벡터를 만들고 이동 평균으로 데이터를 스무딩합니다. 원래 데이터와 스무딩된 데이터를 플로팅합니다.

x = 1:100;
A = cos(2*pi*0.05*x+2*pi*rand) + 0.5*randn(1,100);
B = smoothdata(A);
plot(x,A,'-o',x,B,'-x')
legend('Original Data','Smoothed Data')

세 개의 잡음이 있는 신호를 행으로 나타내는 행렬을 만듭니다. 이동 평균을 사용하여 세 개의 신호를 스무딩하고 스무딩된 데이터를 플로팅합니다.

x = 1:100;
s1 = cos(2*pi*0.03*x+2*pi*rand) + 0.5*randn(1,100);
s2 = cos(2*pi*0.04*x+2*pi*rand) + 0.4*randn(1,100) + 5;
s3 = cos(2*pi*0.05*x+2*pi*rand) + 0.3*randn(1,100) - 5;
A = [s1; s2; s3];
B = smoothdata(A,2);
plot(x,B(1,:),x,B(2,:),x,B(3,:))

가우스 가중 이동 평균 필터를 사용하여 잡음이 있는 데이터 벡터를 스무딩합니다. 필터에서 사용된 윈도우 길이를 표시합니다.

x = 1:100;
A = cos(2*pi*0.05*x+2*pi*rand) + 0.5*randn(1,100);
[B, window] = smoothdata(A,'gaussian');
window
window = 4

길이 20의 큰 윈도우로 원래 데이터를 스무딩합니다. 두 윈도우 길이 모두에 대해 스무딩된 데이터를 플로팅합니다.

C = smoothdata(A,'gaussian',20);
plot(x,B,'-o',x,C,'-x')
legend('Small Window','Large Window')

NaN 값을 포함하는 잡음이 있는 벡터를 만든 후, NaN 값을 무시한 채로 데이터를 스무딩합니다. 이것은 디폴트 값입니다.

A = [NaN randn(1,48) NaN randn(1,49) NaN];
B = smoothdata(A);

NaN 값을 포함하는 데이터를 스무딩합니다. NaN을 포함하는 윈도우의 평균은 NaN입니다.

C = smoothdata(A,'includenan');

BC의 스무딩된 데이터를 플로팅합니다.

plot(1:100,B,'-o',1:100,C,'-x')
legend('Ignore NaN','Include NaN')

시간 벡터 t에 대응하는 잡음이 있는 데이터로 구성된 벡터를 만듭니다. 시간(단위: t) 기준으로 데이터를 스무딩하고 원래 데이터와 스무딩된 데이터를 플로팅합니다.

x = 1:100;
A = cos(2*pi*0.05*x+2*pi*rand) + 0.5*randn(1,100);
t = datetime(2017,1,1,0,0,0) + hours(0:99);
B = smoothdata(A,'SamplePoints',t);
plot(t,A,'-o',t,B,'-x')
legend('Original Data','Smoothed Data')

입력 인수

모두 축소

입력 배열로, 벡터, 행렬, 다차원 배열, table형 또는 timetable형으로 지정됩니다. A가 테이블이거나 타임테이블인 경우, 변수는 숫자형이거나, 'DataVariables' 이름-값 쌍을 사용하여 숫자형 변수를 명확하게 나열해야 합니다. 숫자형 변수가 아닌 변수도 포함되어 있는 테이블을 사용할 때 변수를 지정하면 유용합니다.

데이터형: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | table | timetable

복소수 지원 여부:

함수 동작이 수행될 차원으로, 양의 정수 스칼라로 지정됩니다. 값이 지정되지 않은 경우 디폴트 값은 크기가 1이 아닌 첫 번째 배열 차원이 됩니다.

행렬 A가 있다고 가정합니다.

B = smoothdata(A,1)A의 각 열에 있는 데이터를 스무딩합니다.

B = smoothdata(A,2)A의 각 행에 있는 데이터를 스무딩합니다.

A가 테이블 또는 타임테이블이면 dim이 지원되지 않습니다. smoothdata는 각 테이블 변수나 타임테이블 변수를 따라 동작합니다.

데이터형: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

스무딩 방법으로, 다음 중 하나로 지정됩니다.

  • 'movmean'A의 각 윈도우에 대한 이동 평균. 이 방법은 데이터에서 주기적 추세를 줄이는 데 유용합니다.

  • 'movmedian'A의 각 윈도우에 대한 이동 중앙값입니다. 이 방법은 이상값이 나타날 때 주기적 추세를 줄이는 데 유용합니다.

  • 'gaussian'A의 각 윈도우에 대한 가우스 가중 이동 평균입니다.

  • 'lowess'A의 각 윈도우에 대한 선형 회귀입니다. 이 방법은 많은 계산량을 요할 수 있지만, 그 결과 불연속점의 수는 적어집니다.

  • 'loess'A의 각 윈도우에 대한 2차 회귀입니다. 이 방법은 'lowess'보다 계산량이 약간 더 많습니다.

  • 'rlowess'A의 각 윈도우에 대한 로버스트 선형 회귀입니다. 이 방법은 'lowess'보다 계산량이 더 많은 방법이지만, 이상값에 대해 더 견고합니다.

  • 'rloess'A의 각 윈도우에 대한 로버스트 2차 회귀입니다. 이 방법은 'loess'보다 계산량이 더 많은 방법이지만, 이상값에 대해 더 견고합니다.

  • 'sgolay' — 사비츠키-골레이 필터로, A의 각 윈도우에 대해 피팅되는 2차 다항식에 따라 스무딩됩니다. 이 방법은 데이터가 급격하게 변화할 때 다른 방법보다 더 효과적일 수 있습니다.

윈도우 길이로, 양의 정수 스칼라, 양의 정수로 구성된 요소를 2개 가진 벡터, 양의 duration형 스칼라 또는 양의 duration형으로 구성된 요소를 2개 가진 벡터로 지정됩니다.

window가 양의 정수 스칼라인 경우 윈도우는 현재 요소의 인근 지점에 중심을 두며, window-1개의 인접 요소를 가집니다. window가 짝수이면 윈도우의 중심은 현재 요소 및 이전 요소가 됩니다. window가 양의 정수로 구성된 요소를 2개 가진 벡터 [b f]인 경우 윈도우에는 현재 요소, 현재 요소의 역방향으로 b개 요소, 그리고 현재 요소의 정방향으로 f개 요소가 들어 있습니다.

A가 timetable형이거나 'SamplePoints'datetime형 또는 duration형 벡터로 지정된 경우 windowduration형이어야 하며, 윈도우는 샘플 점을 기준으로 하여 계산됩니다.

윈도우 길이가 출력 인수로도 지정되는 경우, 출력 값은 입력 값과 일치합니다.

데이터형: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | duration

NaN 조건으로, 다음 중 하나로 지정됩니다.

  • 'omitnan' — 입력값의 NaN 값을 무시합니다. 윈도우에 모든 NaN 값이 포함되는 경우 smoothdataNaN을 반환합니다.

  • 'includenan' — 각 창 내에서 계산할 때 NaN을 포함하여, NaN을 반환합니다.

이름-값 쌍의 인수

선택적으로 Name,Value 인수가 쉼표로 구분되어 지정됩니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. Name은 따옴표 안에 표시해야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍의 인수를 어떤 순서로든 지정할 수 있습니다.

예: smoothdata(A,'SmoothingFactor',0.5)

윈도우 크기 인자로, 'SmoothingFactor'와 함께 0 ~ 1 범위의 스칼라가 쉼표로 구분되어 지정됩니다. 'SmoothingFactor'의 값은 경험적 윈도우 크기를 스케일링하여 스무딩 수준을 조정합니다. 0에 근접한 값은 더 작은 이동 윈도우 길이를 생성하여, 스무딩을 줄입니다. 1에 근접한 값은 더 큰 이동 윈도우 길이를 생성하여, 스무딩을 증가시킵니다.

'SmoothingFactor'는 기본적으로 0.25이고 window가 지정되지 않은 경우에만 지정할 수 있습니다.

데이터형: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

샘플 점으로, 'SamplePoints'와 함께 벡터가 쉼표로 구분되어 지정됩니다. 샘플 점은 A에 있는 데이터의 위치를 나타냅니다. 샘플 점은 균일하게 샘플링할 필요가 없습니다. 기본적으로, 샘플 점 벡터는 [1 2 3 ...]입니다.

이동 윈도우는 샘플 점을 기준으로 하여 정의되며, 이 샘플 점은 정렬되고 고유한 요소를 가져야 합니다. 예를 들어, t가 입력 데이터에 해당하는 시간 벡터인 경우 smoothdata(rand(1,10),3,'SamplePoints',t)에는 t(i)-1.5 ~ t(i)+1.5 범위의 시간 구간을 나타내는 윈도우가 있습니다.

샘플 점 벡터에 데이터형 datetime 또는 duration이 있는 경우 이동 윈도우 길이는 duration형이어야 합니다.

입력 데이터가 timetable형인 경우 이름-값 쌍이 지원되지 않습니다.

데이터형: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | datetime | duration

테이블 변수로, 'DataVariables'와 함께 변수 이름, 변수 이름으로 구성된 셀형 배열, 숫자형 벡터, 논리형 벡터 또는 함수 핸들이 쉼표로 구분되어 지정됩니다. 'DataVariables' 값은 입력 테이블에서 스무딩할 열을 나타내며, 다음 중 하나일 수 있습니다.

  • 단일 테이블 변수 이름을 지정하는 문자형 벡터

  • 각 요소가 테이블 변수 이름인, 문자형 벡터로 구성된 셀형 배열

  • 테이블 변수 인덱스로 구성된 벡터

  • 각각의 요소가 테이블 변수에 해당하는 논리형 벡터. 여기서 true는 해당하는 변수를 포함하고 false는 해당하는 변수를 제외합니다.

  • 테이블을 입력값으로 취하고 논리형 스칼라를 반환하는 함수 핸들

예: 'Age'

예: {'Height','Weight'}

예: @isnumeric

데이터형: char | cell | double | single | logical | function_handle

사비츠키-골레이 도로, 'Degree'과 함께 음이 아닌 정수가 쉼표로 구분되어 지정됩니다. 지정된 스무딩 방법이 'sgolay'일 때만 이 이름-값 쌍을 지정할 수 있습니다. 'Degree'의 값은 각 윈도우 내에 데이터를 피팅하는 사비츠키-골레이 필터의 다항식 도에 상응하며, 기본적으로 이 값은 2입니다.

'Degree'의 값은 균일 샘플 점에 대한 윈도우 길이보다 작아야 합니다. 비균일 샘플 점의 경우, 값은 어떤 윈도우에서나 최대 점 수보다 적어야 합니다.

데이터형: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

출력 인수

모두 축소

출력 배열로, 벡터, 행렬 또는 다차원 배열로 반환됩니다. BA와 크기와 유형이 동일합니다.

데이터형: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | table | timetable

윈도우 길이로, 양의 정수 스칼라, 양의 정수로 구성된 요소를 2개 가진 벡터, 양의 duration형 스칼라 또는 양의 duration형으로 구성된 요소를 2개 가진 벡터로 반환됩니다.

window를 입력 인수로 지정하는 경우 출력 값은 입력 값과 일치합니다. window를 입력 인수로 지정하지 않는 경우 window의 값은 입력 데이터에 기반하여 smoothdata에서 경험적으로 결정하는 스칼라입니다.

데이터형: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | duration

알고리즘

스무딩 방법에 대한 윈도우 크기가 지정되지 않은 경우 smoothdata는 경험적 접근법에 근거해 디폴트 윈도우 크기를 계산합니다. 스무딩 인자 τ의 경우, 경험적 접근법은 입력 데이터의 에너지의 약 100*τ 퍼센트를 감쇠시키는 이동 평균 윈도우 크기를 추정합니다.

확장 기능

R2017a에 개발됨