이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
filter
1차원 디지털 필터
설명
는 분자 및 분모 계수인 y
= filter(b
,a
,x
)b
와 a
로 정의되는 유리 전달 함수(Rational Transfer Function)를 사용하여 입력 데이터 x
를 필터링합니다.
a(1)
이 1
과 일치하지 않으면 filter
는 a(1)
로 필터 계수를 정규화합니다. 따라서 a(1)
은 0이 아니어야 합니다.
x
가 벡터인 경우filter
는 필터링된 데이터를x
와 동일한 크기의 벡터로 반환합니다.x
가 행렬인 경우filter
는 첫 번째 차원에 적용되어 각 열에 대해 필터링된 데이터를 반환합니다.x
가 다차원 배열인 경우filter
는 크기가 1이 아닌 첫 번째 배열 차원을 따라 동작을 수행합니다.
예제
이동평균 필터
이동평균 필터는 잡음이 있는 데이터의 평활화에 사용되는 일반적인 방법입니다. 이 예제에서는 filter
함수를 사용하여 데이터의 벡터를 따라 평균을 계산합니다.
랜덤 잡음으로 손상되는 정현파 데이터로 구성된 1×100 행 벡터를 생성합니다.
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')
행렬 행 필터링하기
이 예제에서는 다음 유리 전달 함수를 사용하여 데이터 행렬을 필터링합니다.
임의의 입력 데이터로 구성된 2×15 행렬을 만듭니다.
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')
초기 조건 지정하기
윈도우 크기가 3인 이동평균 필터를 정의합니다.
windowSize = 3; b = (1/windowSize)*ones(1,windowSize); a = 1;
데이터로 구성된 1×6 행 벡터의 3점 이동평균을 구합니다.
x = [2 1 6 2 4 3]; y = filter(b,a,x)
y = 1×6
0.6667 1.0000 3.0000 3.0000 4.0000 3.0000
기본적으로 filter
함수는 과거의 입력값과 출력값이 모두 0이라고 가정하여 필터 지연을 0으로 초기화합니다. 이 경우 y
의 처음 두 개 요소는 각각 x
의 첫 번째 요소와 처음 두 개 요소의 3점 이동평균입니다. 즉, 첫 번째 요소 0.6667은 2의 3점 평균이고, 두 번째 요소 1은 2와 1의 3점 평균입니다.
데이터에 과거의 입력값과 출력값을 추가로 포함하려면 초기 조건을 필터 지연으로 지정하십시오. 현재 입력값의 이러한 초기 조건은 과거 입력값(및 과거 출력값)에 동일한 전달 함수를 적용하여 얻은 최종 조건입니다. 예를 들어, 과거 입력값 [1 3]
을 포함시켜 보겠습니다. 필터 지연이 없는 경우 과거 출력값은 (0+0+1)/3 및 (0+1+3)/3입니다.
x_past = [1 3]; y_past = filter(b,a,x_past)
y_past = 1×2
0.3333 1.3333
그러나 이러한 과거 입력값의 꼬리가 0이라고 가정하면 동일한 전달 함수를 계속 적용하여 0이 아닌 출력값을 추가로 생성할 수 있습니다. 이러한 추가 출력값은 (1+3+0)/3 및 (3+0+0)/3이며, 이는 과거 입력값에서 얻은 최종 조건을 나타냅니다. 이러한 최종 조건을 계산하려면 filter
함수의 두 번째 출력 인수를 지정하십시오.
[y_past,zf] = filter(b,a,x_past)
y_past = 1×2
0.3333 1.3333
zf = 2×1
1.3333
1.0000
현재 데이터에 과거 입력값을 포함하려면 filter
함수의 네 번째 입력 인수를 사용하여 필터 지연을 지정합니다. 과거 데이터의 최종 조건을 현재 데이터의 초기 조건으로 사용합니다.
y = filter(b,a,x,zf)
y = 1×6
2.0000 2.0000 3.0000 3.0000 4.0000 3.0000
이 경우 y
의 첫 번째 요소는 1, 3, 2의 3점 이동평균인 2가 되고, y
의 두 번째 요소는 3, 2, 1의 이동평균인 2가 됩니다.
섹션의 데이터 필터링
특히 메모리 제한을 고려해야 한다면, 필터 지연에 대한 초기 및 최종 조건을 사용하여 섹션의 데이터를 필터링합니다.
큰 랜덤 데이터 시퀀스를 생성하여 2개의 세그먼트 x1
과 x2
로 분할합니다.
x = randn(10000,1); x1 = x(1:5000); x2 = x(5001:end);
전체 시퀀스 x
는 x1
과 x2
의 세로 결합입니다.
유리 전달 함수에 대해 분자 및 분모 계수를 정의합니다.
b = [2,3]; a = [1,0.2];
부분 시퀀스 x1
과 x2
를 한 번에 하나씩 필터링합니다. x1
필터링에서 최종 조건을 출력하여 필터의 내부 상태를 첫 번째 세그먼트의 끝에 저장합니다.
[y1,zf] = filter(b,a,x1);
x1
필터링의 최종 조건을 초기 조건으로 사용하여 두 번째 세그먼트 x2
를 필터링합니다.
y2 = filter(b,a,x2,zf);
y1
은 x1
에서 필터링된 데이터이고 y2
는 x2
에서 필터링된 데이터입니다. 필터링된 전체 시퀀스는 y1
과 y2
의 세로 결합입니다.
비교를 위해 전체 시퀀스를 동시에 필터링합니다.
y = filter(b,a,x); isequal(y,[y1;y2])
ans = logical
1
입력 인수
b
— 유리 전달 함수의 분자 계수
벡터
유리 전달 함수의 분자 계수로, 벡터로 지정됩니다.
데이터형: double
| single
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
복소수 지원 여부: 예
a
— 유리 전달 함수의 분모 계수
벡터
유리 전달 함수의 분모 계수로, 벡터로 지정됩니다.
데이터형: double
| single
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
복소수 지원 여부: 예
x
— 입력 데이터
벡터 | 행렬 | 다차원 배열
입력 데이터로, 벡터, 행렬, 다차원 배열 중 하나로 지정됩니다.
데이터형: double
| single
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
복소수 지원 여부: 예
zi
— 필터 지연의 초기 조건
[]
(디폴트 값) | 벡터 | 행렬 | 다차원 배열
필터 지연의 초기 조건으로, 벡터, 행렬, 다차원 배열 중 하나로 지정됩니다.
zi
가 벡터인 경우 길이는max(length(a),length(b))-1
이어야 합니다.zi
가 행렬이나 다차원 배열이면 선행 차원의 크기는max(length(a),length(b))-1
이어야 합니다. 각각의 나머지 차원의 크기는x
의 대응하는 차원의 크기와 일치해야 합니다. 예를 들어, 3×4×5 배열x
의 두 번째 차원(dim = 2
)에 대해filter
를 사용한다고 가정합니다. 배열zi
의 크기는[max(length(a),length(b))-1]
×3×5여야 합니다.
[]
로 지정되는 디폴트 값은 모든 필터 지연을 0으로 초기화합니다.
데이터형: double
| single
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
복소수 지원 여부: 예
dim
— 연산을 수행할 차원
양의 정수 스칼라
연산을 수행할 차원으로, 양의 정수 스칼라로 지정됩니다. 차원을 지정하지 않을 경우 디폴트 값은 크기가 1보다 큰 첫 번째 배열 차원이 됩니다.
2차원 입력 배열 x
가 있다고 가정하겠습니다.
dim = 1
인 경우filter(b,a,x,zi,1)
은x
의 열을 따라 연산을 수행하고 각 행에 적용된 필터를 반환합니다.dim = 2
인 경우filter(b,a,x,zi,2)
는x
의 행을 따라 연산을 수행하고 각 행에 적용된 필터를 반환합니다.
dim
이 ndims(x)
보다 큰 경우 filter
는 x
에 dim
개까지의 차원이 추가적으로 있는 것으로 간주합니다. 추가적인 차원은 크기가 1입니다. 예를 들어, x
는 크기가 2×3인 행렬이고 dim = 3
인 경우 filter
는 2×3×1 크기의 행렬인 것처럼 x
의 세 번째 차원을 따라 연산을 수행합니다.
데이터형: double
| single
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
출력 인수
y
— 필터링된 데이터
벡터 | 행렬 | 다차원 배열
필터링된 데이터로, 입력 데이터 x
와 크기가 같은 벡터, 행렬, 다차원 배열 중 하나로 반환됩니다.
x
가 single
형인 경우 filter
는 기본적으로 단정밀도로 계산되며 y
또한 single
형이 됩니다. 그렇지 않으면, y
가 double
형으로 반환됩니다.
데이터형: double
| single
zf
— 필터 지연의 최종 조건
벡터 | 행렬 | 다차원 배열
필터 지연의 최종 조건으로, 벡터, 행렬, 다차원 배열 중 하나로 반환됩니다.
x
가 벡터인 경우zf
는max(length(a),length(b))-1
길이의 열 벡터입니다.x
가 행렬이거나 다차원 배열인 경우zf
는max(length(a),length(b))-1
길이의 열 벡터로 구성된 배열이며,zf
의 열 개수는x
의 열 개수와 같습니다. 예를 들어, 3×4×5 배열x
의 두 번째 차원(dim = 2
)에 대해filter
를 사용한다고 가정합니다. 배열zf
의 크기는[max(length(a),length(b))-1]
×3×5입니다.
데이터형: double
| single
세부 정보
유리 전달 함수
Z 변환 도메인의 벡터에서 filter
연산의 입력-출력 설명은 유리 전달 함수입니다. 유리 전달 함수는 다음 형식을 사용합니다.
여기서 유한 임펄스 응답(FIR) 및 무한 임펄스 응답(IIR) 필터가 모두 처리됩니다[1]. 여기서 X(z)는 입력 신호 x의 Z 변환이고 Y(z)는 출력 신호 y의 Z 변환이며 na는 피드백 필터의 차수이고 nb는 피드포워드 필터의 차수입니다. 정규화로 인해 a(1) = 1로 간주됩니다.
L 요소를 가진 이산 신호의 경우 유리 전달 함수를 다음의 차분 방정식으로 표현할 수도 있습니다.
또한 IIR 디지털 필터의 다음 도식에서와 같이 DFIIt(Direct Form II Transposed) 구현 방식을 사용하여 유리 전달 함수를 표현할 수 있습니다. 도식에서 na = nb = n–1입니다. 피드백과 피드포워드 필터의 차수가 다른 경우 또는 na ≠ nb인 경우 더 높은 차수의 항을 0으로 처리할 수 있습니다. 예를 들어, a = [1,2]
이고 b = [2,3,2,4]
인 필터의 경우 a = [1,2,0,0]
이라고 가정할 수 있습니다.
샘플 점 m에서 filter
의 연산은 다음과 같은 시간 영역 차분 방정식으로 주어집니다.
기본적으로 filter
함수는 필터 지연을 0으로 초기화합니다. 여기서 wk(0) = 0입니다. 이 초기화에서는 과거의 입력값과 출력값이 모두 0이라고 가정합니다. 현재 데이터에 0이 아닌 과거 입력값을 포함하려면 현재 데이터의 초기 조건을 필터 지연으로 지정하십시오. 필터 지연은 과거 입력값(및 과거 출력값)에 동일한 전달 함수를 적용하여 얻은 최종 조건이라고 생각할 수 있습니다. filter
를 사용하여 필터 지연을 설정할 때 네 번째 입력 인수 zi
를 지정할 수 있습니다. 여기서 wk(0) = zi(k)
입니다. filter
를 사용하여 최종 조건에 액세스할 때 두 번째 출력 인수 zf
를 지정할 수도 있습니다. 여기서 wk(L) = zf(k)
입니다.
팁
filter
함수를 FIR 필터의b
계수와 함께 사용하려면y = filter(b,1,x)
를 사용하십시오.Signal Processing Toolbox™가 있는 경우,
y = filter(d,x)
를 사용하여digitalFilter
(Signal Processing Toolbox) 객체d
로 입력 신호x
를 필터링하십시오. 주파수 응답 사양에 따라d
를 생성하려면designfilt
(Signal Processing Toolbox)를 사용하십시오.필터링 함수에 대한 자세한 내용은 디지털 필터링 (Signal Processing Toolbox)을 참조하십시오.
참고 문헌
[1] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. Upper Saddle River, NJ: Prentice-Hall, 1999.
확장 기능
tall형 배열
메모리에 담을 수 없을 정도로 많은 행을 가진 배열을 계산할 수 있습니다.
사용법 관련 참고 및 제한 사항:
출력값을 2개 갖는 구문 [y,zf] = filter(___)
는 dim > 1
조건일 때는 지원되지 않습니다.
자세한 내용은 tall형 배열 항목을 참조하십시오.
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
dim
을 제공할 경우 그 값은 상수여야 합니다.Variable-Sizing Restrictions for Code Generation of Toolbox Functions (MATLAB Coder) 항목을 참조하십시오.
GPU 코드 생성
GPU Coder™를 사용하여 NVIDIA® GPU용 CUDA® 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
dim
을 제공할 경우 그 값은 상수여야 합니다.Variable-Sizing Restrictions for Code Generation of Toolbox Functions (MATLAB Coder) 항목을 참조하십시오.
스레드 기반 환경
MATLAB®의 backgroundPool
을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool
을 사용해 코드 실행 속도를 높일 수 있습니다.
이 함수는 스레드 기반 환경을 완전히 지원합니다. 자세한 내용은 스레드 기반 환경에서 MATLAB 함수 실행하기 항목을 참조하십시오.
GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
사용법 관련 참고:
y = filter(d,x)
는digitalFilter
객체d
와gpuArray
입력값x
에서 지원됩니다. IIR 필터의 경우,digitalFilter
객체는 필터 계수를 2차섹션형(SOS)으로 구성된 행렬로 저장합니다.gpuArray
입력값의 경우 SOS 행렬을gpuArray
로 변환할 필요가 없습니다.
자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
분산 배열
Parallel Computing Toolbox™를 사용하여 대규모 배열을 클러스터의 결합된 메모리에 걸쳐 분할할 수 있습니다.
이 함수는 분산 배열을 완전히 지원합니다. 자세한 내용은 분산 배열을 사용하여 MATLAB 함수 실행 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2006a 이전에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)