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

filter

1차원 디지털 필터

구문

y = filter(b,a,x)
y = filter(b,a,x,zi)
y = filter(b,a,x,zi,dim)
[y,zf] = filter(___)

설명

예제

y = filter(b,a,x)는 분자 및 분모 계수인 ba로 정의되는 유리 전달 함수(Rational Transfer Function)를 사용하여 입력 데이터 x를 필터링합니다.

a(1)1과 일치하지 않으면 filtera(1)로 필터 계수를 정규화합니다. 따라서 a(1)은 0이 아니어야 합니다.

  • x가 벡터인 경우 filter는 필터링된 데이터를 x와 동일한 크기의 벡터로 반환합니다.

  • x가 행렬인 경우 filter는 첫 번째 차원에 적용되어 각 열에 대해 필터링된 데이터를 반환합니다.

  • x가 다차원 배열인 경우 filter는 크기가 1이 아닌 첫 번째 배열 차원을 따라 동작을 수행합니다.

예제

y = filter(b,a,x,zi)는 필터 지연에 대해 초기 조건인 zi를 사용합니다. zi의 길이는 max(length(a),length(b))-1과 같아야 합니다.

예제

y = filter(b,a,x,zi,dim)은 차원 dim을 따라 동작을 수행합니다. 예를 들어, x가 행렬인 경우 filter(b,a,x,zi,2)는 각 행에 대해 필터링된 데이터를 반환합니다.

예제

[y,zf] = filter(___)는 위에 열거된 구문 중 하나를 사용하여 필터 지연의 최종 조건인 zf를 반환합니다.

예제

모두 축소

이동평균 필터는 잡음이 있는 데이터의 스무딩에 사용되는 일반적인 방법입니다. 이 예제에서는 filter 함수를 사용하여 데이터의 벡터를 따라 평균을 계산합니다.

랜덤 잡음으로 손상되는 정현파 데이터로 구성된 1x100 행 벡터를 생성합니다.

t = linspace(-pi,pi,100);
rng default  %initialize random number generator
x = sin(t) + 0.25*rand(size(t));

이동평균 필터는 데이터를 따라 길이 간격 만큼 이동하며 각 간격에 포함된 데이터의 평균을 계산합니다. 다음 차분 방정식은 벡터 의 이동평균 필터를 정의합니다.

간격 크기 5에 대해, 유리 전달 함수의 분자 및 분모 계수를 계산합니다.

windowSize = 5; 
b = (1/windowSize)*ones(1,windowSize);
a = 1;

데이터의 이동평균을 구한 다음 원래 데이터와 함께 플로팅합니다.

y = filter(b,a,x);

plot(t,x)
hold on
plot(t,y)
legend('Input Data','Filtered Data')

이 예제에서는 다음 유리 전달 함수를 사용하여 데이터 행렬을 필터링합니다.

임의의 입력 데이터로 구성된 2x15 행렬을 만듭니다.

rng default  %initialize random number generator
x = rand(2,15);

유리 전달 함수에 대해 분자 및 분모 계수를 정의합니다.

b = 1;
a = [1 -0.2];

x의 두 번째 차원을 따라 전달 함수를 적용하고 각 행의 1차원 디지털 필터를 반환합니다. 원래 데이터의 첫 번째 행과 필터링된 데이터를 함께 플로팅합니다.

y = filter(b,a,x,[],2);

t = 0:length(x)-1;  %index vector

plot(t,x(1,:))
hold on
plot(t,y(1,:))
legend('Input Data','Filtered Data')
title('First Row')

입력 데이터의 두 번째 행과 필터링된 데이터를 함께 플로팅합니다.

figure
plot(t,x(2,:))
hold on
plot(t,y(2,:))
legend('Input Data','Filtered Data')
title('Second Row')

특히 메모리 제한을 고려해야 한다면, 필터 지연에 대한 초기 및 최종 조건을 사용하여 섹션의 데이터를 필터링합니다.

큰 랜덤 데이터 시퀀스를 생성하여 2개의 세그먼트 x1x2로 분할합니다.

x = randn(10000,1);

x1 = x(1:5000);
x2 = x(5001:end);

전체 시퀀스 xx1x2의 세로 결합(Concatenate)입니다.

유리 전달 함수에 대해 분자 및 분모 계수를 정의합니다.

b = [2,3];
a = [1,0.2];

부분 시퀀스 x1x2를 한 번에 하나씩 필터링합니다. x1 필터링에서 최종 조건을 출력하여 필터의 내부 상태를 첫 번째 세그먼트의 끝에 저장합니다.

[y1,zf] = filter(b,a,x1);

x1 필터링의 최종 조건을 초기 조건으로 사용하여 두 번째 세그먼트 x2를 필터링합니다.

y2 = filter(b,a,x2,zf);

y1x1에서 필터링된 데이터이고 y2x2에서 필터링된 데이터입니다. 필터링된 전체 시퀀스는 y1y2의 세로 결합(Concatenate)입니다.

비교를 위해 전체 시퀀스를 동시에 필터링합니다.

y = filter(b,a,x);

isequal(y,[y1;y2])
ans = logical
   1

입력 인수

모두 축소

유리 전달 함수의 분자 계수로, 벡터로 지정됩니다.

데이터형: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
복소수 지원 여부:

유리 전달 함수의 분모 계수로, 벡터로 지정됩니다.

데이터형: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
복소수 지원 여부:

입력 데이터로, 벡터, 행렬, 다차원 배열 중 하나로 지정됩니다.

데이터형: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
복소수 지원 여부:

필터 지연의 초기 조건으로, 벡터, 행렬, 다차원 배열 중 하나로 지정됩니다.

  • zi가 벡터인 경우 길이는 max(length(a),length(b))-1이어야 합니다.

  • zi가 행렬이나 다차원 배열이면 선행 차원의 크기는 max(length(a),length(b))-1이어야 합니다. 각각의 나머지 차원의 크기는 x의 대응하는 차원의 크기와 일치해야 합니다. 예를 들어, 3x4x5 배열 x의 두 번째 차원(dim = 2)에 대해 filter를 사용한다고 가정합니다. 배열 zi의 크기는 [max(length(a),length(b))-1]x3x5여야 합니다.

[]로 지정되는 디폴트 값은 모든 필터 지연을 0으로 초기화합니다.

데이터형: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
복소수 지원 여부:

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

2차원 입력 배열 x가 있다고 가정하겠습니다.

  • dim = 1인 경우 filter(b,a,x,zi,1)x의 행을 따라 동작을 수행하고 각 열에 적용된 필터를 반환합니다.

  • dim = 2인 경우 filter(b,a,x,zi,2)x의 열을 따라 동작을 수행하고 각 행에 적용된 필터를 반환합니다.

dimndims(x)보다 큰 경우 filterx를 반환합니다.

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

출력 인수

모두 축소

필터링된 데이터로, 입력 데이터 x와 크기가 같은 벡터, 행렬, 다차원 배열 중 하나로 반환됩니다.

xsingle형인 경우 filter는 기본적으로 단정밀도로 계산되며 y 또한 single형이 됩니다. 그렇지 않으면, ydouble형으로 반환됩니다.

데이터형: double | single

필터 지연의 최종 조건으로, 벡터, 행렬, 다차원 배열 중 하나로 반환됩니다.

  • x가 벡터인 경우 zfmax(length(a),length(b))-1 길이의 열 벡터입니다.

  • x가 행렬이거나 다차원 배열인 경우 zfmax(length(a),length(b))-1 길이의 열 벡터로 구성된 배열이며, zf의 열 개수는 x의 열 개수와 같습니다. 예를 들어, 3x4x5 배열 x의 두 번째 차원(dim = 2)에 대해 filter를 사용한다고 가정합니다. 배열 zf의 크기는 [max(length(a),length(b))-1]x3x5입니다.

데이터형: double | single

세부 정보

모두 축소

유리 전달 함수

Z 변환 도메인의 벡터에서 filter 작업의 입력-출력 설명은 유리 전달 함수입니다. 유리 전달 함수는 다음 형식을 사용합니다.

Y(z)=b(1)+b(2)z1+...+b(nb+1)znb1+a(2)z1+...+a(na+1)znaX(z),

여기서는 FIR 필터와 IIR 필터가 모두 처리됩니다. [1]. na는 피드백 필터 차수이고 nb는 피드포워드 필터 차수입니다.

유리 전달 함수는 다음의 차분 방정식으로 표현할 수도 있습니다.

a(1)y(n)=b(1)x(n)+b(2)x(n1)+...+b(nb+1)x(nnb)a(2)y(n1)...a(na+1)y(nna).

또한 다음 도식에서와 같이 DFIIt(Direct Form II Transposed) 구현 방식을 사용하여 유리 전달 함수를 표현할 수 있습니다. 정규화로 인해 a(1) = 1로 간주됩니다.

샘플 m에서 filter 동작은 다음과 같은 시간 영역 차분방정식으로 제공됩니다.

y(m)=b(1)x(m)+w1(m1)w1(m)=b(2)x(m)+w2(m1)a(2)y(m)       =                 wn2(m)=b(n1)x(m)+wn1(m1)a(n1)y(m)wn1(m)=b(n)x(m)a(n)y(m).

  • Signal Processing Toolbox™가 있을 경우 designfilt를 사용하여 필터 d를 설계할 수 있습니다. 그런 다음 Y = filter(d,X)를 사용하여 데이터를 필터링할 수 있습니다.

참고 문헌

[1] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. Upper Saddle River, NJ: Prentice-Hall, 1999.

확장 기능

참고 항목

| | | |

R2006a 이전에 개발됨