J'expérimente la décimation d'un signal, dans ce cas une impulsion unitaire.
J'utilise Python, avec pylab. Tout d'abord, je crée une impulsion unitaire et je la décime de 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))))
Cela se traduit par les tracés suivants
J'ajoute ensuite quelques échantillons de délai avant l'impulsion, en changeant x en:
x = r_[zeros(3), 1, zeros(100)]
Il en résulte les tracés suivants
Dans le deuxième ensemble de tracés, le signal décimé résultant n'est plus un seul échantillon, mais a été déformé.
Si je retarde le signal avec 5 - et n'importe quel multiple de q - échantillons, j'obtiens à nouveau le premier ensemble de tracés.
Le code source de la fonction de décimation est, 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]
J'utilise un filtre passe-bas en sapin avant de décimer, la réponse impulsionnelle du filtre est
Cela explique pourquoi l'impulsion est déformée lorsqu'il y a un retard, la décimation sélectionne des parties de la réponse impulsionnelle, lorsque le retard est un multiple de la décimation, elle ne sélectionne que les zéro de la réponse impulsionnelle et un échantillon non nul à le sommet.
Existe-t-il un moyen de décimer un échantillon unitaire avec un retard arbitraire, ce qui se traduit par une sortie d'échantillon unitaire mise à l'échelle?
la source
Réponses:
Encore une fois, comme vous l'avez noté, cela a pour effet d'extraire un ensemble différent de prises de la réponse du filtre, de sorte que le signal de sortie décimé n'est plus nul pour tous les échantillons sauf un (c'est-à-dire qu'il ne ressemble plus à une impulsion ). C'est à prévoir. Pourquoi?
Étant donné que le filtre est la source de la "distorsion" dont vous ne voulez pas, vous pourriez envisager de réessayer le processus sans filtre. Mais réfléchissez à ce que vous obtiendriez alors:
la source