Ben bir sinyal, bu durumda bir birim dürtü decim deney ediyorum.
Pylab ile Python kullanıyorum. İlk olarak, bir birim dürtü yaratıyorum ve 5 ile tahmin ediyorum.
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))))
Bu, aşağıdaki grafiklerle sonuçlanır
Daha sonra x'i değiştirerek dürtüden önce birkaç gecikme örneği ekliyorum:
x = r_[zeros(3), 1, zeros(100)]
Bu, aşağıdaki grafiklerle sonuçlanır
İkinci grafik kümesinde, sonuçta ortaya çıkan azalan sinyal artık tek bir örnek değildir, ancak bozulmuştur.
Sinyali 5 - ve q - numunelerinden herhangi bir katıyla geciktirirsem, ilk grafik setini tekrar alırım.
Decimate işlevi için kaynak kodu, 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]
Ben karar vermeden önce bir köknar düşük geçiş filtresi kullanıyorum, filtrenin dürtü yanıtı
Bu, bir gecikme olduğunda dürtü neden bozuluyor, decimation dürtü tepkisinin parçalarını seçiyor, gecikme decimasyonun bir katı olduğunda, sadece dürtü tepkisinin sıfırını ve sıfır olmayan bir örneği zirve.
Ölçekli birim örnek çıktısıyla sonuçlanan bir birim örneğini keyfi bir gecikmeyle sonlandırmanın bir yolu var mı?