이전 답변에 대해 좀 더 자세히 설명하기 위해 길이가 신호의 자동 상관을 계산하면 크기가 (샘플링 된) 자동 상관이 발생합니다 . 사실, 그것은 무한대 여야하지만 외부의 자동 상관 은 어쨌든 같습니다 .2 N - 1 [ - ( N - 1 ) , N - 1 ] 0N2N−1[−(N−1),N−1]0
이제, 이산 푸리에 변환 (DFT)을 사용하여이를 계산하려고하고, 공식은 실제로 신호 DFT의 제곱 크기의 역 DFT입니다. 그러나 생각해보십시오. 우리가 다른 방법으로 가져 와서 자기 상관의 DFT를 계산하면 방해가되는 샘플을 잃고 싶지 않으면 크기의 스펙트럼으로 끝납니다 ! 따라서이 스펙트럼의 크기는 이어야하며, 따라서 시간 영역 신호를 최대 까지 0으로 DFT ( 포인트)를 계산 한 후 계속 진행 해야하는 이유 입니다.2 N − 1 2 N − 1 2 N − 12N−12N−12N−12N−1
이것을 보는 또 다른 방법은 포인트 에서 DFT를 계산할 때 발생하는 상황을 분석하는 것입니다 . 이는 (연속 주파수) 이산 시간 푸리에 변환 (DTFT)을 다운 샘플링하는 것과 같습니다. 샘플링되지 않은 크기 스펙트럼 으로 크기가 이어야하는 자동 상관 관계를 검색하면 시간 앨리어싱 (원형 피케 네트에 대해 이야기하고 있음)이 발생합니다. 출력면 "2 N - 1 NN2N−1N
실제로 Hilmar가 제공 한 코드도 작동합니다. 보다 큰 크기 (0의 경우 FT는 의 크기를 계산 함) 까지 패드 를 채우면 FT 를 "과도하게 샘플링"하기 때문입니다. , 여전히 "유용한"샘플을 얻습니다 (다른 샘플은 초 여야 함 ). 따라서 효율성을 높이기 위해 제로 패드에서 이면 충분합니다 ( FFT를 사용하는 경우 의 다음 제곱까지 제로 패드 를 사용하는 것이 좋습니다).N 2 N - 1 0 2 N - 1 2 N - 1N−1N2N−102N−12N−1
간단히 말해서 : 프로그래밍 언어에 맞게이 작업을 수행해야합니다.
autocorr = ifft( complex( abs(fft(inputData, n=2*N-1))**2, 0 ) )
또는 MATLAB에서 :
autocorr = ifft(abs(fft(inputData, 2*N-1)).^2)