Main Content

decimate

데시메이션 — 정수 인자만큼 샘플 레이트 감소

설명

예제

y = decimate(x,r)은 입력 신호 x의 샘플 레이트를 r배만큼 줄입니다. 데시메이션된 벡터 ylength(y) = ceil(length(x)/r)이 되도록 r배만큼 축소됩니다. 기본적으로, decimate는 차수가 8인 저역통과 체비쇼프 유형 I 무한 임펄스 응답(IIR) 필터를 사용합니다.

예제

y = decimate(x,r,n)은 차수가 n인 체비쇼프 필터를 사용합니다.

y = decimate(x,r,'fir')은 해밍 윈도우 기반의 윈도우 방법을 사용하여 설계된 유한 임펄스 응답(FIR) 필터를 사용합니다. 이 필터의 차수는 30입니다.

예제

y = decimate(x,r,n,'fir')은 차수가 n인 FIR 필터를 사용합니다.

예제

모두 축소

4kHz로 샘플링된 정현파 신호를 생성합니다. 인자 4로 신호를 데시메이션합니다.

t = 0:1/4e3:1;
x = sin(2*pi*30*t) + sin(2*pi*60*t);
y = decimate(x,4);

원래 신호와 데시메이션된 신호를 플로팅합니다.

subplot(2,1,1)
stem(0:120,x(1:121),'filled','MarkerSize',3)
grid on
xlabel('Sample Number')
ylabel('Original')

subplot(2,1,2)
stem(0:30,y(1:31),'filled','MarkerSize',3)
grid on
xlabel('Sample Number')
ylabel('Decimated')

Figure contains 2 axes objects. Axes object 1 contains an object of type stem. Axes object 2 contains an object of type stem.

2개의 정현파를 갖는 신호를 생성합니다. 차수가 5인 체비쇼프 IIR 필터를 사용하여 인자 13으로 신호를 데시메이션합니다. 원래 신호와 데시메이션된 신호를 플로팅합니다.

r = 13;
n = 16:365;
lx = length(n);
x = sin(2*pi*n/153) + cos(2*pi*n/127);

plot(0:lx-1,x,'o')
hold on
y = decimate(x,r,5);
stem(lx-1:-r:0,fliplr(y),'ro','filled','markersize',4)

legend('Original','Decimated','Location','south')
xlabel('Sample number')
ylabel('Signal')

Figure contains an axes object. The axes object contains 2 objects of type line, stem. These objects represent Original, Decimated.

원래 신호와 데시메이션된 신호는 마지막 요소가 일치합니다.

2개의 정현파를 갖는 신호를 생성합니다. 차수가 82인 FIR 필터를 사용하여 인자 13으로 신호를 데시메이션합니다. 원래 신호와 데시메이션된 신호를 플로팅합니다.

r = 13;
n = 16:365;
lx = length(n);
x = sin(2*pi*n/153) + cos(2*pi*n/127);

plot(0:lx-1,x,'o')
hold on
y = decimate(x,r,82,'fir');
stem(0:r:lx-1,y,'ro','filled','markersize',4)

legend('Original','Decimated','Location','south')
xlabel('Sample number')
ylabel('Signal')

Figure contains an axes object. The axes object contains 2 objects of type line, stem. These objects represent Original, Decimated.

원래 신호와 데시메이션된 신호의 첫 번째 요소가 일치합니다.

입력 인수

모두 축소

입력 신호로, 벡터로 지정됩니다.

데이터형: double

데시메이션 인자로, 양의 정수로 지정됩니다. r이 13보다 큰 경우에 더 나은 결과를 얻으려면 r을 더 작은 여러 인자가 되도록 나누고 decimate를 여러 번 호출하십시오.

데이터형: double

필터 차수로, 양의 정수로 지정됩니다. 13보다 큰 IIR 필터 차수는 수치적으로 불안정하기 때문에 권장되지 않습니다. 이런 경우 함수에서 경고를 표시합니다.

데이터형: double

출력 인수

모두 축소

데시메이션된 신호로, 벡터로 반환됩니다.

데이터형: double

알고리즘

데시메이션은 시퀀스의 원래 샘플 레이트를 더 낮은 레이트로 감소시킵니다. 이는 보간의 반대입니다. decimate는 입력값에 저역통과 필터를 적용하여 에일리어싱을 방지하고 그 결과를 다운샘플링합니다. 이 함수는 [1]에 나와 있는 데시메이션 알고리즘 8.2와 8.3을 사용합니다.

  1. decimate는 저역통과 필터를 생성합니다. 디폴트는 cheby1을 사용하여 설계된 체비쇼프 유형 I 필터입니다. 이 필터는 정규화된 차단 주파수 0.8/r과 통과대역 리플 0.05dB을 가집니다. 전달 함수를 생성하는 데 필요한 컨벌루션에서 누적된 반올림 오차로 인해, 지정된 필터 차수에서 통과대역 왜곡이 발생하는 경우가 가끔 있습니다. decimate는 이런 왜곡으로 인해 차단 주파수에서의 크기 응답이 리플과 10–6 넘게 차이가 나게 되면 필터 차수를 자동으로 감소시킵니다.

    'fir' 옵션이 선택된 경우 decimatefir1을 사용하여 차단 주파수 1/r을 갖는 저역통과 FIR 필터를 설계합니다.

  2. FIR 필터를 사용할 경우 decimate는 한 방향으로만 입력 시퀀스를 필터링합니다. 이는 메모리를 절약해 주며, 긴 시퀀스로 작업하는 데 유용합니다. IIR의 경우, decimate는 위상 왜곡을 제거하기 위해 filtfilt를 사용하여 순방향과 역방향으로 필터를 적용합니다. 이 과정은 사실상 필터 차수를 2배로 늘립니다. 두 경우 모두, 이 함수는 끝점 조건을 일치시켜 신호의 양쪽 끝에서 과도(Transient) 효과를 최소화합니다.

  3. 마지막으로, decimate는 필터링된 신호의 내부에서 매 r번째 점을 선택하여 데이터를 리샘플링합니다. 리샘플링된 시퀀스(y)에서 IIR 필터가 사용된 경우에는 y(end)x(end)와 일치하고, FIR 필터가 사용된 경우에는 y(1)x(1)과 일치합니다.

참고 문헌

[1] Digital Signal Processing Committee of the IEEE® Acoustics, Speech, and Signal Processing Society, eds. Programs for Digital Signal Processing. New York: IEEE Press, 1979.

버전 내역

R2006a 이전에 개발됨

참고 항목

| | | | |