상호 상관 이전의 업 샘플링이 쓸모 없습니까?


12

두 개의 서로 다른 센서의 두 신호가 상호 연관되고 도착 시간 지연이 상호 상관 함수의 피크의 가로 좌표에서 계산되는 간단한 경우를 고려하십시오.

이제 두 안테나의 차원 제약과 가능한 최대 샘플링 속도에 대한 제약 때문에 가능한 최대 지연 시간은 이며 10 개의 샘플에 해당 한다고 가정하겠습니다 .D

문제 :

이러한 제약 때문에 계산 지연은 0에서 10 사이의 정수 값, 즉 과 다를 수 있습니다 . 실제로 원하는 것은 안테나에 충돌하는 두 신호 사이의 지연을 분수 지연으로 구분하는 것이므로 크기 나 샘플링 속도를 변경하는 것은 옵션이 아니기 때문에 문제가됩니다.0D10

몇 가지 생각 :

  • 당연히이 경우에 가장 먼저 생각하는 것은 상호 상관을 수행하기 전에 신호를 업 샘플링하는 것입니다. 그러나 나는 실제로 시스템에 새로운 정보를 추가하지 않기 때문에 이것이 어떻게 든 부정 행위라고 생각합니다.

  • 업 샘플링이 어떻게 '속임수'가 아닌지 이해하지 못합니다. 그렇습니다. 현재 관측 된 주파수 정보를 기반으로 신호를 재구성하고 있습니다. 그러나 어떻게 과 사이에서 신호가 실제로 시작되었는지에 대한 정보를 얻을 수 있습니까? 이 정보는 신호의 실제 소수 지연 시작이 실제로 임을 결정한 원래 신호에 어디에 포함되어 있습니까?D = 8 D = 7.751D=7D=8D=7.751

질문 :

  • 이것이 진정으로 부정 행위입니까?

    • 그렇지 않다면,이 새로운 '정보'는 어디에서 오는가?
    • 그렇다면 분수 지연 시간을 추정하는 데 사용할 수있는 다른 옵션은 무엇입니까?
  • 지연에 대한 하위 샘플 답변을 얻으려는 시도에서 교차 상관 의 결과 를 업 샘플링하는 것을 알고 있지만 이것이 또한 부정 행위의 형태가 아닙니까? 상호 상관 이전의 업 샘플링과 다른 이유는 무엇입니까?

실제로 업 샘플링이 '속임수'가 아닌 경우 샘플링 속도를 높여야하는 이유는 무엇입니까? (낮은 샘플링 된 신호를 보간하는 것보다 항상 높은 샘플링 속도를 갖는 것이 더 좋은 의미입니까?)

그때 우리는 매우 낮은 속도로 샘플링하고 원하는만큼 보간 할 수있을 것 같습니다. 그러면 단순히 우리의 마음의 욕망에 신호를 보간한다는 관점에서 샘플링 속도를 '불필요하게'늘리지 않겠습니까? 보간에는 계산 시간이 걸리고 더 높은 샘플링 속도로 시작하는 것이 아니라고 생각하는 것이 유일한 이유입니까?

감사.


3
정보의 양이 어느 쪽이든 동일하기 때문에 정확성에 차이가 있는지 의심 스럽지만 관심있는 지역에서만 상호 상관 보간 하는 것이 모든 것을 먼저 샘플링 한 다음 추가 곱셈을 수행하는 것보다 확실히 저렴합니다 .
endolith

@endolith 좋은 점. 나는 이것이 왜 / 어떻게 작동하는지에 대해 더 명확 해졌고, 그렇다. 결과를 업 샘플링하는 것이이 경우에 갈 길이다.
Spacey

답변:


12

부정 행위가 아니며 새로운 정보도 추가하지 않습니다. 업 샘플링 LPF에서 0을 추가 한 다음 이미 알려진 주파수 정보로 파형을 재구성하는 것과 동일한 작업을 수행합니다. 따라서 새로운 정보는 없지만 시간 분해능은 여전히 ​​우수합니다.

결과를 업 샘플링하는 것은 새로운 정보가 아니라 시간 해상도가 더 좋습니다. 2 차 보간법을 통해 매우 유사한 작업을 수행 할 수 있습니다 .

업 샘플링 및 다항식 보간법의 이러한 모든 방법은 분수 자체가 피크 자체와 인접 노드의 위치에 관한 정보를 얻습니다. 빠른 그림의 예. 밸런스 피크

위 그림의 파란색 선은 시뮬레이션 된 상호 상관 데이터입니다 (단, 상호 상관이 아닌 결과 일 수도 있음). 이웃이 대칭이기 때문에 이것이 "균형"피크라고합니다. 예상 한대로 결과 2 차 보간 (빨간색 선)은 실제 피크가 0에 있음을 나타냅니다.

반면, 아래 이미지는 불균형 피크를 보여줍니다. 가장 가까운 두 이웃의 값을 제외하고는 결과가 변경되지 않았습니다. 그러나 이것은 보간 기가 분수 피크의 추정치를 이동시킵니다. 여기에 이미지 설명을 입력하십시오

이러한 방법 (다항식 보간 및 업 샘플링)의 장점은 일반적으로 위치에 더 관심이 있지만 실제 피크 값의 추정치를 제공한다는 것입니다.

실제로 업 샘플링이 '속임수'가 아닌 경우 샘플링 속도를 높여야하는 이유는 무엇입니까?

나이키 스트 기준을 만족시키기 위해.

샘플링 속도가 낮은 신호를 낮은 샘플링 신호를 보간하는 것보다 항상 더 좋은 의미는 없습니까?

아닙니다. 이론적 인 관점에서, 나이키 스트 기준이 충족되는 한 샘플 속도는 중요하지 않습니다. 실제적인 관점에서 볼 때 일반적으로 스토리지 요구 사항과 계산 부하를 줄이기 위해 얻을 수있는 샘플링 속도가 낮아 필요한 자원과 전력 소비가 줄어 듭니다.


1
@Jim, Nyquist Criterion을 알고 있습니다. :-) 를 증가시키는 맥락에서 의미하는 것은 샘플링 할 필요가없는 높은 샘플링 속도를 갖는 것이 좋지 않을 것입니다. Nyquist가 만족되면, 당신이 얻을 모든 정보는 '이미 있습니다', 그리고 어느 정도 수준으로 업 샘플링하면 원하는 시간 분해능을 얻을 수 있습니다. 그런 의미에서 이것이 끝났습니까? 업 샘플링 할 여유가 높을수록 더 좋습니까? Fs
Spacey

1
@Mohammad 예, 아니오. 결과 자체 또는 양자화 노이즈로 인한 노이즈는 결국 시간 분해능을 무의미하게 증가시킵니다. 그러나 그 시점까지는 업 샘플링이 더 많으면 추정의 정확도가 향상되어야합니다.
Jim Clay

1
2 차 / 포물선 보간에 대한 참고 및 예제 코드 : gist.github.com/255291#file_parabolic.md 및 일부 대체 보간 방법 : dspguru.com/dsp/howtos/how-to-interpolate-fft-peak
endolith

2
@JimClay 잠을 잘 기회가 있습니다. 정보가 항상 존재 한다는 것은 분명 합니다. 즉, 샘플 간의 관계로 말해서 표현 된 것입니다. 그리고 이것이 폴리 피팅이 실제로 보간에 사용하는 것입니다. 또한 신호가 대역 제한되어 있기 때문에 (즉, 시간 범위 내에서 매우 빠르게 변경 될 수 있음), 샘플간에 존재할 수있는 방법은 너무 많습니다.
Spacey

8

대역 제한 신호는 보간 될 수 있습니다. "샘플 사이"의 추가 정보는 인접 샘플에 더해 신호가 샘플링 전에 대역 제한되었다는 사실 (인접 샘플 사이에 정보가 확산되는 경향이 있음)이 포함됩니다. 두 신호가 대역 제한되어있는 경우, 상호 상관도 마찬가지이므로 상호 상관도 보간 될 수 있습니다. 업 샘플링은 또 다른 형태의 보간법으로, 대역 제한 신호에 대한 매우 정확한 형태의 보간법입니다. 그러나 Sinc 보간도 사용할 수 있습니다 (둘 다 2 차 또는 포물선 보간보다 더 정확할 수 있음).

보간은 샘플 간의 피크를 보여줄 수 있습니다. 따라서 아마도 쓸모가 없습니다.

더 넓은 스펙트럼을 포함하는 신호가있는 경우 더 많은 정보를 포함 할 수 있습니다. 더 높은 속도로 샘플링하면 더 많은 정보를 제공 할 수 있지만, 새로운 대역 제한 주파수의 절반 이하에 신호가 구 대역 제한을 초과하는 실제 유용한 스펙트럼 주파수 내용이 포함 된 경우에만 추가 정보를 얻을 수 있습니다. 기존의보다 손실이 많은 새로운 광대역 대역 제한 프로세스 또는 필터를 사용하여 스펙트럼을 분석합니다. Fs / 2 이하의 훨씬 낮은 주파수로 이미 대역 제한된 신호의 훨씬 더 높은 주파수에서 데이터를 샘플링하면 더 이상 정보 내용이 아닌 보간 만 구매합니다.

샘플링이 양자화되면 더 높은 속도로 샘플링하면 양자화 오류의 디더링 또는 노이즈 형성으로 인해 LSB의 일부 정보를 더 많이 구입할 수 있습니다. 그러나 이는 샘플러의 S / N 비율과 정확도 및 샘플링에 사용 된 정확한 양자화 프로세스에 따라 다릅니다.

샘플링 및 상호 상관 이전에 두 신호가 적절히 대역 제한되지 않은 경우 업 샘플링 또는 보간이 모두 쓰레기 결과를 초래할뿐만 아니라 원래 비보 간 된 상호 상관이 될 수 있습니다.


1
고마워 hotpaw2. 그렇다면 두 신호를 모두 업 샘플링 한 다음 결과를 상관 시키거나 상관시킨 다음 업 샘플링해도 실제로 중요하지 않다고 말하는 것이 옳습니까? 대역 제한으로 인해 두 방법이 동일한 결과를 제공해야합니까?
Spacey

@Mohammad : 어느 쪽이든 동일한 정보를 포함한다고 생각하지만 보간이 완벽하지 않기 때문에 구현에 따라 결과가 약간 다릅니다.
endolith

3

나는 당신에게 줄 수있는 가장 좋은 대답은 : 당신은 스스로 알아낼 수있는 모든 수단을 가지고 있다고 생각합니다. "뒤로"예제를 작성하십시오. Matlab을 사용하여 매우 작은 샘플링 주기로 샘플링 된 두 개의 신호로 시작하십시오 (그러므로 거의 연속 신호입니다). 상호 상관을 계산하고 고정밀 도로 수행 할 수있는 피크 (원하는 경우)를 찾으십시오. 그런 다음 두 신호를 모두 다운 샘플링하고 프로세스를 반복하십시오. 두 번째 피크의 위치와 높이를 첫 번째 피크와 비교하십시오. 나는 두 번째가 더 나쁠 것이라고 확신합니다. 교차 상관 전에 업 샘플링하면 두 번째에서 첫 번째로 향상됩니다.

올바른 방법으로 업 샘플링하려면 두 신호 모두 대역 제한이 필요하며 이러한 대역폭을 알아야합니다. 질문에 언급 한 "신규"정보는 인접 샘플에서 나오며 신호가 대역 제한되어 있다는 사실에서 나옵니다.


감사합니다 Telaclavo. 이다 것은 정말 나에게 명확하지가, '대역 제한'되는 용어입니다. 의미가 무엇인지 알고 있지만 여기에서 왜 언급되는지 이해하지 못합니다. 잡음을 제외한 모든 시스템은 '대역 제한'이므로 왜 이런 의미에서 반복해서 언급됩니까?
Spacey

3

이전 답변에 비트를 추가하기 위해 상관 변수를 정수가 아닌 값으로 만들어 업 샘플링 된 대역 제한 교차 상관에 해당하는 것을 얻을 수 있습니다.

다음 (파이썬) 코드는 계산합니다 . 여기서 τ

τ=argmaxτn=0N1f(n)g(n+τ)

즉, 최대 상호 상관을 찾습니다.

입력 변수 ab설명 및 에 대한 두 대역 제한으로 간주되고 주기적 기간 (이동은 이산 푸리에 도메인에서 구현 됨). 는 있습니다.f(n)g(n)n={0,1,...,N1}Nτ[N+1,N1]

정수가 아닌 대해 상호 상관이 수행 될 수있는 방법을 보여주기위한 것인데, 이는 클로저에 의해 정의됩니다 . 이것은 시간 이동 해당하는 각각의 개별 주파수에서 복소 위상의 회전을 설명 하는 배열을 사용합니다 . 그런 다음 는 각 교대마다 이것을 조정합니다. 실시간 신호를 유지하기 위해, 음의 주파수 의 회전은 (적응 한 주파수 쌍에 대한) 양의 주파수의 회전의 배에 불과하다는 것이 명백하다 .τcorrelate_pointomegaτ=1τ1

한 가지 미묘한 점은 샘플 (최신 주파수) 을 처리하는 방법에 있습니다 . 양수와 음수 대역간에 공유되기 때문입니다. 여기에 사용 된 솔루션은 양의 회전 페이저와 네거티브 회전 페이저 (실제 축의 반사) 사이를 보간하여 단위 회전 페이저를 실제 축에 투영하는 것입니다. 이것은 cos 함수 입니다. 나이 퀴 스트 주파수 에 해당하는 값입니다 ). 분명히 실시간 도메인 신호를 유지하려면이 값이 실제 값이어야합니다.N2piomega

이를 사용하여 임의의 정확한 값에 대한 상호 상관을 계산할 수 있습니다 . 값을 사용하여 클로저 (호출 가능으로 반환 할 수 있음)를 호출하십시오 .ττ

import numpy
from numpy import fft
from scipy import optimize

def arg_max_corr(a, b):

    if len(a.shape) > 1:
        raise ValueError('Needs a 1-dimensional array.')

    length = len(a)
    if not length % 2 == 0:
        raise ValueError('Needs an even length array.')

    if not a.shape == b.shape:
        raise ValueError('The 2 arrays need to be the same shape')

    # Start by finding the coarse discretised arg_max
    coarse_max = numpy.argmax(numpy.correlate(a, b, mode='full')) - length+1

    omega = numpy.zeros(length)
    omega[0:length/2] = (2*numpy.pi*numpy.arange(length/2))/length
    omega[length/2+1:] = (2*numpy.pi*
            (numpy.arange(length/2+1, length)-length))/length

    fft_a = fft.fft(a)

    def correlate_point(tau):
        rotate_vec = numpy.exp(1j*tau*omega)
        rotate_vec[length/2] = numpy.cos(numpy.pi*tau)

        return numpy.sum((fft.ifft(fft_a*rotate_vec)).real*b)

    start_arg, end_arg = (float(coarse_max)-1, float(coarse_max)+1)

    max_arg = optimize.fminbound(lambda tau: -correlate_point(tau), 
            start_arg, end_arg)

    return max_arg

1
귀하의 질문이 정확한지 여부를 생각해야합니다 (지금은 시간이 없습니다). 내가 생각하는 방식은 신호의 그룹 지연을 원하는 양으로 변경할 수 있다는 것입니다. 이것은 시간 도메인에서 sinc 함수를 사용한 원형 컨벌루션과 정확히 동일하며 sinc 오프셋은 (단, 원래 신호와 동일한 위치에서 샘플링 됨)입니다. 정수 를 사용하면 sinc의 모든 제로 크로싱은 ( )를 제외하고 샘플 시간과 정렬 되므로 신호가 사소하게 이동됩니다. τττ1
Henry Gomersall

오, 당신의 질문은 사라졌습니다! 그래도 답장을 남겨 두겠습니다.
Henry Gomersall

감사합니다 Henry-(내 질문을 삭제하여 죄송합니다. 더 명확하게 만들려고했습니다! :-)). (나는 파이썬 흡수에 약간 느리지 만 작동합니다). 어쨌든, 그래, 나는 당신의 방법을 이해 생각 - 내가 생각하는 그것의 마음이 교차 상관 결과의 위상 응답의 보간이 수행되는 것을에있다, 그리고 해당 값은 거기에서 해독. 어쩌면 나는 소화하는 데 더 많은 시간이 필요하지만 그럼에도 불구하고 흥미 롭습니다. 시간 영역 보간 대신에 왜 / 왜 사용 했습니까? 상황이 도움이 될 수 있습니다. 감사! tau
Spacey

시간 도메인 보간 알고리즘이 더 빠르다는 것을 알게되어 기쁘지만 속도를 순전히 추구했습니다. 내 이론적 근거는 시간 도메인에서 정수가 아닌 시간 이동 을 수행 하려면 푸리에 방법을 사용하여 대 곱하여 회선을 수행 해야한다는 것입니다. ). 그런 다음 두 경우 모두 시간 영역에서 상관 관계가 적용됩니다. 리샘플링을 시도하면 수행 속도가 매우 느려집니다 (푸리에 도메인에서도 마찬가지입니다). N2N(logN+1)
Henry Gomersall

또한 푸리에 영역에서 생각하는 것이 실제로 훨씬 간단하다는 것을 알았습니다. 그러나 아마도 정상이 아닙니다!
Henry Gomersall

2

상호 상관 이전의 업 샘플링이 이후의 업 샘플링과 동등하다는 직관적 인 증거가 있습니다.

상호 상관은 시간 반전 된 다른 신호와 컨볼 루션됩니다. 시간 반전은 대역폭에 영향을 미치지 않습니다. 컨벌루션은 주파수 영역에서 곱셈이며 대역폭을 증가시키지 않습니다. 원래의 신호가 샘플링 주파수의 절반으로 적절하게 대역 제한되면 상호 상관 결과가 발생합니다. 결과를 망치기 위해 앨리어싱이 도입되지 않았습니다. 이후 보간으로 작업이 절약됩니다.

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