신호를 데시 메이션 (이 경우에는 단위 임펄스)으로 실험하고 있습니다.
pylab과 함께 Python을 사용하고 있습니다. 먼저 단위 임펄스를 생성하고 5만큼 줄입니다.
x = r_[zeros(0), 1, zeros(100)]
N = 2 ** 14
q = 5
y = decimate(x, q, ftype="fir")
subplot(211)
title("Original")
stem(range(len(x)), x)
subplot(212)
title("Decimated - FIR")
stem(range(len(y)), y)
figure()
subplot(211)
semilogx(log(abs(fft(x, N))))
subplot(212)
y = decimate(x, q, ftype="fir")
semilogx(log(abs(fft(y, N))))
결과는 다음과 같습니다.
그런 다음 x를 다음과 같이 변경하여 임펄스 전에 몇 가지 지연 샘플을 추가합니다.
x = r_[zeros(3), 1, zeros(100)]
결과는 다음과 같습니다.
두 번째 플롯 세트에서 결과 데시 메이션 된 신호는 더 이상 단일 샘플이 아니라 왜곡되었습니다.
5 개 및 여러 개의 q 개 샘플로 신호를 지연 시키면 첫 번째 플롯 세트가 다시 나타납니다.
decimate 함수의 소스 코드는 https://github.com/scipy/scipy/blob/master/scipy/signal/signaltools.py#L1570입니다.
def decimate(x, q, n=None, ftype='iir', axis=-1):
if not isinstance(q, int):
raise TypeError("q must be an integer")
if n is None:
if ftype == 'fir':
n = 30
else:
n = 8
if ftype == 'fir':
b = firwin(n + 1, 1. / q, window='hamming')
a = 1.
else:
b, a = cheby1(n, 0.05, 0.8 / q)
y = lfilter(b, a, x, axis=axis)
sl = [slice(None)] * y.ndim
sl[axis] = slice(None, None, q)
return y[sl]
데시 메이트하기 전에 전나무 저역 통과 필터를 사용하고 있습니다. 필터의 임펄스 응답은
지연이있을 때 임펄스가 왜곡되는 이유, 데시 메이션이 임펄스 응답의 일부를 선택하는 경우, 지연이 데시 메이션의 배수 인 경우 임펄스 응답의 0 만 선택하고 0이 아닌 샘플 하나만 선택합니다. 피크.
임의의 지연으로 단위 샘플을 소멸시키는 방법이 있습니까?