데시 메이트로 신호 다운 샘플링


12

신호를 데시 메이션 (이 경우에는 단위 임펄스)으로 실험하고 있습니다.

pylab과 함께 Python을 사용하고 있습니다. 먼저 단위 임펄스를 생성하고 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))))

결과는 다음과 같습니다.

지연이 0 인 단위 임펄스 및 결과적으로 감소 된 신호

그런 다음 x를 다음과 같이 변경하여 임펄스 전에 몇 가지 지연 샘플을 추가합니다.

x = r_[zeros(3), 1, zeros(100)]

결과는 다음과 같습니다.

3 개의 샘플 지연을 갖는 단위 임펄스 및 결과적인 소멸 된 신호

두 번째 플롯 세트에서 결과 데시 메이션 된 신호는 더 이상 단일 샘플이 아니라 왜곡되었습니다.

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]

데시 메이트하기 전에 전나무 저역 통과 필터를 사용하고 있습니다. 필터의 임펄스 응답은

저역 통과 필터의 임펄스 응답

지연이있을 때 임펄스가 왜곡되는 이유, 데시 메이션이 임펄스 응답의 일부를 선택하는 경우, 지연이 데시 메이션의 배수 인 경우 임펄스 응답의 0 만 선택하고 0이 아닌 샘플 하나만 선택합니다. 피크.

임의의 지연으로 단위 샘플을 소멸시키는 방법이 있습니까?


"단일 샘플"임펄스가 실제로 sinc 함수를 나타내는 것임을 알고 있습니까? 샘플링하기 전에 앤티 앨리어싱 필터를 사용해야하고 필터링 할 때 이상적인 수학적 임펄스 함수가 ​​sinc 함수로 변경됩니다. 샘플이 정확히 sinc의 0에 떨어지기 때문에 발생하지 않지만, sinc가 한 번에 하나보다 적은 샘플로 이동하면 볼 수 있습니다.
endolith

답변:


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 필터의 (실제로 필터가 선형 위상이기 때문에 차수는 의 배수 이면 됨) 시간 지연의 탭은 입니다. 모든 입니다. 따라서 은 찾은 것처럼 에서만 0이 아닙니다 .qq2qnq0xd[n]n=0

입력 임펄스 시간 지연을 적용 하면 필터가 선형이고 시간 불변 (LTI) 이기 때문에 필터링 된 출력이 같은 양만큼 지연됩니다 .x[n]

xf[n]=h[nD]

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

다시 말하지만, 이것은 필터 응답과 다른 탭 세트를 뽑아내는 효과가 있으므로, 데시 메이션 출력 신호는 더 이상 하나의 샘플을 제외하고 모두 0이 아닙니다 (즉, 더 이상 임펄스처럼 보이지 않음) ). 이것은 예상됩니다. 왜?

기억 푸리에 변환 이산 시간 (DTFT) 이산 충동은 주파수 도메인에서 (크기의) 평면이다. 경우 지연된 임펄스 동등한 것으로하고, 또한 주파수 도메인에서의 평면 크기를 가져야한다. 그러나 DTFT는 필터 주파수 응답의 스케일 사본입니다.xd[n]

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

여기서 는 필터의 주파수 응답입니다. 데시 메이션 된 출력 이 지연된 임펄스와 같도록하려면 필터는 통과 대역 (완벽 후 데시 메이션 나이 퀴 스트 주파수까지)에 걸쳐 완벽하게 평평하고 다른 곳에서는 0 인 브릭 월 응답을 가져야합니다. 다운 샘플링 후에 다시 앨리어싱이 누출되지 않아 결과가 평평하지 않습니다. 시간과 자원이 무한하지 않으면 실현할 수 없습니다.H(ω)xd[n]

필터는 원하지 않는 "왜곡"의 소스이므로 필터없이 프로세스를 다시 시도하는 것이 좋습니다. 그러나 다음에 얻을 수있는 것을 고려하십시오.

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

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

경우 의 배수가 아닌 , 다음 당신도 원하는 것이 무엇인지 아마 아닙니다.D x d [ n ]qDxd[n]=0  n

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.