Зниження сигналу з десятковим


12

Я експериментую з децимацією сигналу, в даному випадку одиничним імпульсом.

Я використовую 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)]

Це призводить до наступних сюжетів

Імпульс одиниці із затримкою 3-х зразків та отриманим децимінованим сигналом

У другому наборі сюжетів отриманий децимований сигнал вже не є єдиним зразком, а був спотворений.

Якщо я затримаю сигнал із 5 - і будь-яким кратним q-зразками, я знову отримую перший набір сюжетів.

Вихідний код для десяткової функції - 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]

Я використовую фільтр фільтрів низької частоти перед тим, як знизити, імпульсна характеристика фільтра є

імпульсна характеристика фільтрів низьких частот

Це пояснює, чому імпульс спотворюється, коли виникає затримка, децимація - це вибір частини імпульсної відповіді, коли затримка кратна децимації, вона вибирає лише нулі імпульсної відповіді та один ненульовий зразок при вершина.

Чи існує спосіб зменшення одиничного зразка з довільною затримкою, що призводить до масштабування вибірок одиничної вибірки?


Ви розумієте, що імпульс "єдиного зразка" насправді представляє функцію sinc, правда? Тому що ви повинні відфільтрувати псевдонім перед тим, як відібрати вибірку, і ваша ідеальна математична імпульсна функція змінюється на функцію sinc, коли вона фільтрується. Просто буває, що зразки потрапляють саме на нулі sinc, так що це не схоже на це, але якби синск змістився менше, ніж один зразок у часі, ви б це побачили.
ендоліт

Відповіді:


11

Ви ніби правильно розумієте, що відбувається. Однак я не впевнений, що ви очікуєте отримати. Візьміть свій початковий приклад. Нехай ваш вхідний сигнал буде :x[n]

x[n]=δ[n]

Перший крок у процесі децимації полягає в тому, що вхідний сигнал поєднується з імпульсною відповіддю антизгладжувального фільтра :h[n]

xf[n]=x[n]h[n]=δ[n]h[n]=h[n]

Далі відфільтрований сигнал подається на вибір в коефіцієнт ( у вашому прикладі).q5

xd[n]=xf[qn]=h[qn]

Як ви зазначали, для фільтрів FIR, порядки яких кратні (насправді, оскільки фільтр є лінійно-фазовим, замовлення повинно бути лише кратним ), під час затримки є крани нуль для всіх . Тому є ненульовим лише при , як ви знайшли.qq2qnq0xd[n]n=0

Якщо застосувати затримку часу до вхідного імпульсу , відфільтрований вихід просто затримується на ту саму кількість, оскільки фільтр лінійний та інваріантний за часом (LTI) :x[n]

xf[n]=h[nD]

xd[n]=xf[qn]=h[qnD]

Знову, як ви зазначали, це призводить до вищипування різного набору відводів у відповіді фільтра, таким чином, що зменшений вихідний сигнал більше не дорівнює нулю для всіх, а лише для одного зразка (тобто він більше не схожий на імпульс ). Цього можна очікувати. Чому?

Пам'ятайте, що дискретний перетворення Фур'є (DTFT) дискретного імпульсу є рівним (за величиною) в частотній області. Якщо має бути еквівалентним уповільненому імпульсу, він також повинен мати рівну величину в області частоти. Однак його DTFT - це лише масштабована копія частотного відгуку фільтра:xd[n]

xd[n]=h[qnD]ejωDH(ωq)

де - частотна характеристика фільтра. Для того, щоб вихід дорівнював затримці імпульсу, фільтр повинен мати відповідь цегляної стінки, яка ідеально рівна по всій смузі пропускання (аж до частоти Найквіста після децимації) та нуль всюди в іншому місці (так відсутність випромінювання не протікає після зменшення тиску, що робить результат не рівним). Це неможливо здійснити, якщо у вас є нескінченна кількість часу та ресурсів.H(ω)xd[n]

Оскільки фільтр є джерелом "спотворень", які ви не хочете, ви можете спробувати повторити процес без фільтра. Але, подумайте, що ви отримаєте тоді:

xf[n]=x[n]=δ[nD]

xd[n]=xf[qn]=δ[qnD]

Якщо не є кратним , то , що, мабуть, не те, що ви хотіли б.D x d [ n ] = 0 nqDxd[n]=0  n

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.