간격이 고르지 않은 데이터의 FFT를 어떻게 가져 옵니까?


55

고속 푸리에 변환 알고리즘은 입력 포인트가 시간 영역 균등하게 있다고 가정하여 푸리에 분해를 계산합니다 . 그들이 아닌 경우 어떻게? 가변 샘플링 속도가 실제로 무엇인지 설명하기 위해 사용할 수있는 다른 알고리즘이나 FFT를 수정할 수있는 방법이 있습니까?tk=kT

솔루션이 샘플이 어떻게 분포되어 있는지에 달려 있다면, 가장 관심이있는 두 가지 상황이 있습니다.

  • 지터가있는 일정한 샘플링 속도 : 여기서 는 무작위 분포 변수입니다. 라고 말하는 것이 안전하다고 가정하십시오. .tk=kT+δtkδtk|δtk|<T/2
  • 그렇지 않으면 일정한 샘플링 속도에서 샘플을 삭제했습니다. 여기서tk=nkTnkZk

동기 부여 : 우선, 이 사이트 에 대한 제안 에서 가장 많이 투표 된 질문 중 하나였습니다 . 그러나 또한 얼마 전에 나는 불균일 한 점이 샘플링 된 일부 입력 데이터 가 나오는 FFT 사용법 ( 스택 오버플로 에 대한 질문으로 표시)에 대한 토론에 참여 했습니다. 데이터의 타임 스탬프가 잘못되었다는 것이 밝혀졌지만이 문제를 해결할 수있는 방법에 대해 생각하게했습니다.

답변:


40

비 균일 FFT에는 다양한 기술이 있으며 가장 효율적인 기술은 모두 여러분의 경우를위한 것입니다 : 준-균일 샘플. 기본 아이디어는 가우시안에 대한 로컬 컨볼 루션을 통해 불균일하게 샘플링 된 소스를 약간 더 미세한 ( "과다 샘플링 된") 균일 한 그리드에 표시하는 것입니다. 그런 다음 오버 샘플링 된 균일 그리드에서 표준 FFT를 실행할 수 있으며 가우스와의 컨벌루션을 취소 할 수 있습니다. 좋은 구현은 차원 의 표준 FFT보다 배 더 비싸고 는 4 또는 5에 가까운 것입니다.CddC

Greengard와 Lee 의 비 균일 고속 푸리에 변환 가속화를 읽는 것이 좋습니다 .

또한 , 소스 및 / 또는 평가 포인트가 희박 할 때 , 즉 이상의 빠른 기술이 존재하며,보다 일반적인 정수 연산자, 예를 들어 푸리에 정수 연산자에 대한 일반화도 있습니다. 당신이이 기술에 관심이 있다면, 나는 추천 스파 스 푸리에 나비 알고리즘을 통해 변환푸리에 적분 연산자의 계산을위한 빠른 나비 알고리즘 . 표준 FFT에 비해 이러한 기술로 지불 된 가격은 훨씬 높은 계수입니다. 면책 조항 : 내 고문은이 두 가지 논문을 작성 / 작성했으며 그 기술을 병렬 처리하는 데 상당한 시간을 보냈습니다.O(NdlogN)

중요한 점은 위의 모든 기술이 더 긴 런타임을 희생하여 임의로 정확하게 만들 수있는 근사치이며 표준 FFT 알고리즘은 정확하다는 것입니다.


9

신호 처리에서 샘플링 전에 저역 통과 필터를 통해 신호를 보내 앨리어싱 을 피할 수 있습니다. Jack Poulson은 이미 잘린 가우시안을 저역 통과 필터로 사용하여 비 균일 FFT에 대한 한 가지 기술을 설명했습니다. 잘린 가우시안의 불편한 기능 중 하나는 FFT (= 신호 처리의 샘플링 속도)에 대한 그리드 간격을 결정한 후에도 여전히 가우시안 폭과 절단 반경의 두 가지 자유 매개 변수가 있다는 것입니다.

따라서 저역 통과 필터로 두 개의 격자 셀 너비를 가진 "모자"기능을 선호합니다. 이는 제 4 푸리에 차수가 정확하고, 낮은 푸리에 차수는 2 차적으로 수렴되는 효과가 있습니다. "모자"함수의 푸리에 변환은 계산하기 쉽고 (sinc 함수의 제곱) FFT 후 컨볼 루션 취소를 단순화합니다. "모자 (hat)"기능은 (중심) 단위 셀의 특징적인 기능과 그 자체의 컨볼 루션이다. 임의의 원하는 수렴 속도는 단위 셀 자체를 두 번 이상 뒤 얽고 "모자"기능 대신 결과 기능을 사용하여 달성 할 수 있습니다.


6

소프트웨어에 관심이 있다면 여기 에서 찾을 수있는 NFFT 라이브러리 (C에서 MATLAB에 대한 인터페이스 포함)를 추천 할 수 있습니다 . 병렬 FFT 계산을위한 PFFT 라이브러리 와 동일한 개발자 가 평등 비평 형 FFT 위한 PNFFT 라이브러리도 있습니다.


1
내가 아는 한, PNFFT는 병렬 3D 비 균일 FFT를위한 가장 빠른 라이브러리입니다.
Jack Poulson

PNFFT 링크가 끊어진 것 같습니다.
Foad

2

허용 된 답변에 추가. 다음은 Greengard와 Lee의 메소드의 오픈 소스 구현에 대한 링크입니다. https://finufft.readthedocs.io/en/latest/ C, fortran, MATLAB, octave 및 python에 대한 랩퍼가 있습니다. FINUFFT는 C ++로 작성되었다고 생각합니다.

그것은 NYU Courant 연구소, SFU, Flatiron 연구소 (명확하게), Texas Austin University 및 Florida 주립 대학에서 유지 관리되고 사용됩니다. 적어도 이것들은 내가 아는 것입니다.

나는 게으 르기 때문에 이전 버전을 사용하고 있습니다. 참조 : https://cims.nyu.edu/cmcl/nufft/nufft.html


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