Estoy experimentando con diezmar una señal, en este caso un impulso unitario.
Estoy usando Python, con pylab. Primero, creo un impulso unitario y lo diezmo por 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))))
Esto resulta con las siguientes parcelas
Luego agrego algunas muestras de retraso antes del impulso, cambiando x a:
x = r_[zeros(3), 1, zeros(100)]
Esto da como resultado las siguientes parcelas
En el segundo conjunto de gráficos, la señal diezmada resultante ya no es una sola muestra, sino que se ha distorsionado.
Si retraso la señal con 5 - y cualquier múltiplo de q - muestras, obtengo el primer conjunto de gráficos nuevamente.
El código fuente de la función diezmar es 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]
Estoy usando un filtro de paso bajo de abeto antes de diezmar, la respuesta al impulso del filtro es
Esto explica por qué el impulso se distorsiona cuando hay un retraso, la aniquilación está seleccionando partes de la respuesta al impulso, cuando el retraso es un múltiplo de la aniquilación, solo selecciona los ceros de la respuesta al impulso y una muestra distinta de cero en el pico.
¿Hay alguna manera de diezmar una muestra unitaria con un retraso arbitrario, lo que resulta en una salida de muestra unitaria escalada?
fuente
Respuestas:
Nuevamente, como notó, esto tiene el efecto de extraer un conjunto diferente de tomas de la respuesta del filtro, de modo que la señal de salida diezmada ya no sea cero para todas las muestras, excepto una (es decir, ya no parece un impulso). ) Esto es de esperar. ¿Por qué?
Dado que el filtro es la fuente de la "distorsión" que no desea, puede considerar intentar el proceso nuevamente sin un filtro. Pero, considere lo que obtendría entonces:
fuente