Saya bereksperimen dengan menghilangkan sinyal, dalam hal ini impuls unit.
Saya menggunakan Python, dengan pylab. Pertama, saya membuat impuls satuan, dan memusnahkannya dengan 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))))
Ini hasil dengan plot berikut
Saya kemudian menambahkan beberapa sampel penundaan sebelum impuls, dengan mengubah x ke:
x = r_[zeros(3), 1, zeros(100)]
Ini menghasilkan plot berikut
Pada set plot kedua, sinyal yang dihancurkan tidak lagi menjadi sampel tunggal, tetapi telah terdistorsi.
Jika saya menunda sinyal dengan 5 - dan kelipatan q - sampel, saya mendapatkan set plot yang pertama lagi.
Kode sumber untuk fungsi decimate adalah, 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]
Saya menggunakan filter low pass fir sebelum menipiskan, respon impuls filter adalah
Ini menjelaskan mengapa impuls terdistorsi ketika ada penundaan, penipisan memilih bagian dari respon impuls, ketika penundaan adalah kelipatan dari penipisan, itu hanya memilih nol dari respon impuls, dan satu sampel tidak nol pada puncaknya.
Apakah ada cara untuk memusnahkan sampel unit dengan penundaan sewenang-wenang, yang menghasilkan output sampel unit skala?