Я экспериментирую с прореживанием сигнала, в данном случае единичного импульса.
Я использую Python, с Pylab. Сначала я создаю импульс единицы и искажаю его на 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]
Я использую фильтр нижних частот пихты перед тем, как уничтожить, импульсная характеристика фильтра
Это объясняет, почему импульс искажается при наличии задержки, при прореживании выбираются части импульсного отклика, когда задержка кратна децимации, он выбирает только нули импульсного отклика и одну ненулевую выборку при Пик.
Есть ли способ прореживания единичной выборки с произвольной задержкой, что приводит к масштабированному выводу единичной выборки?
источник
Ответы:
Опять же, как вы заметили, это имеет эффект выдергивания другого набора отводов из отклика фильтра, так что прореженный выходной сигнал больше не равен нулю для всех, кроме одного сэмпла (т.е. он больше не выглядит как импульс ). Этого следовало ожидать. Почему?
Поскольку фильтр является источником нежелательных искажений, вы можете попробовать повторить процесс без фильтра. Но подумайте, что вы получите тогда:
источник