FFT 구현을 테스트하기 위해 어떤 데이터를 사용해야하며 어떤 정확도를 기대해야합니까?


14

FFT 알고리즘을 구현하려는 노력에 참여하고 있으며 입력 테스트 데이터를 사용하기 위해 권장되는 조언이 무엇인지 궁금합니다. -그리고 예상되는 정확도

테스트 입력에서 오래된 유즈넷 게시물에서 답변으로 게시 할 약간의 지침을 찾았지만 많은 정당화가없는 한 사람의 제안 일뿐입니다. 단단한 답변처럼 보이는 것을 찾지 못했습니다.

정확히 말하면, Wikipedia는 오류가 O (e log N) 여야한다고하지만 절대적인 관점에서 합리적인 기대치는 무엇입니까?

추가 편집 : 실제 테스트는 입력 데이터 배열과 사전 계산 된 "참조"출력 데이터를 저장 한 형식으로되어 있으므로 닫힌 양식 솔루션이 필요한 것은 아닙니다.

답변:


12

FFT 알고리즘의 정확성검증 하려면 이산 푸리에 변환 의 알려진 속성을 갖는 원하는 기능을 수행한다는 점 에서 다음과 같이 제안 된 접근 방식을 사용할 수 있습니다.

에르 군, 펀다 (1995 년 6 월). 다변량 선형 함수 테스트 : 생성기 병목 현상 극복. 에서 발동. 스물 일곱 앤 ACM 증상 컴퓨팅 이론 . (p. 407–416).

위의 논문은 FFTW 제작자들이 특정 FFT 구현이 무엇을해야하는지 확인하기 위해 선택한 방법으로 참조 합니다. 제안 된 기술은 기능을 별도의 테스트로 검증 된 세 가지 주요 구성 요소로 증류합니다.

  • 선형성 : DFT (푸리에 계열의 다른 사촌 변환과 함께)는 선형 연산자 이므로 1 , a 2 , x 1 [ n ] , x 2 [ n ]의 모든 값에 다음 방정식을 유지해야합니다.1,2,엑스1[],엑스2[]

에프에프(1엑스1[]+2엑스2[])=1에프에프(엑스1[])+2에프에프(엑스2[])
  • 단위 임펄스의 DFT : 크로네 커 델타 함수와 동일한 시간 영역 신호가 FFT 알고리즘의 입력에 적용되고 출력이 단위 임펄스 함수의 알려진 DFT와 비교하여 확인됩니다 (모든 출력에서 ​​일정한 값으로 변환 됨) 쓰레기통). FFT 알고리즘이 IFFT를 제공하는 경우 역임 테스트하여 단위 임펄스 기능을 다시 생성 함을 보여줍니다.

  • 타임 시프트 : FFT 알고리즘의 입력에 2 세트의 데이터가 적용됩니다. 시간 영역에서 둘 사이의 유일한 차이점은 일정한 시간 이동입니다. DFT의 알려진 특성에 기초하여, 이는 두 신호의 주파수 영역 표현 사이의 알려진 선형 위상 편이에 영향을 미치며, 여기서 위상 편이의 기울기는 시간 편이에 비례한다.

이 논문의 저자는 이러한 테스트가 FFT 구현의 정확성을 검증하기에 충분하다고 주장합니다. 과거에는이 기술을 사용하지 않았지만 이치에 맞지 않는 것 같습니다. FFTW의 저자 (무료 소프트웨어를 많이 만든 사람)는 검증 문제에 대한 올바른 접근 방식에 대한 신뢰할 수있는 기관으로 신뢰합니다.


감사! 저자가 선형성 테스트에 사용할 a1, a2, x1 [n] 및 x2 [n]의 값에 대한 제안이 있습니까 (또는 이것이 중요하지 않다고 주장합니까)? 그리고 그 문제에 대해 데이터 세트가 타임 시프트 테스트에 사용할 것인가?
Brooks Moses

3
실제로 논문을 읽은 후 나는 내 자신의 질문에 대답 할 수있다. 저자는 선형성 테스트를 수행하는 방법을 설명하지 않고 대신 "대부분의 입력"에 대해 사실임을 증명하기에 충분하다고 가정했다. 또한이 논문은 정확한 산술을 가정 한 정확한 정확성의 증거를 설명하고 있습니다. 근사 프로그램에서 수치 오차를 특성화하기위한 수단을 설명하지는 않습니다 (필수-정밀도 산술을 사용해야 함).
브룩스 모세

나는 지금까지 가장 좋은 답변이기 때문에 이것을 받아 들인 것으로 표시 할 것입니다. 그러나 여전히 사용할 테스트 입력 데이터 세트 (및 이유) 또는 예상 정확도에 대한 세부 사항을 다루는 다른 답변에 여전히 관심이 있습니다 . 감사!
브룩스 모세

2
FFT 알고리즘의 유효성을 검사하는 데있어 두 가지 구성 요소가 있습니다. 정확성을 검증하고 수치 정확도를 측정하는 것입니다. 내 대답은 첫 번째 문제 만 해결했습니다. 본질적으로 구현에 의존하기 때문에 어떤 수치 정확도를 기대할 수 있는지에 대한 진술은 어렵습니다. 산술 유형 (예 : 고정 대 부동 소수점), 알고리즘을 구현하는 데 사용되는 구조, FFT 길이 (즉, 문제를 분해하는 데 사용되는 단계 수), 실행 속도를 향상시키기 위해 수행 된 모든 단축키 등이 모두 재생됩니다. 요인과 일반화하기 어렵다.
Jason R

좋은 지적; 나는 아마도 그것들을 별도의 질문으로 물어야했을 것입니다.
브룩스 모세

5

질문에서 언급했듯이, 보관 된 comp.dsp 유즈넷 게시물 ( http://www.dsprelated.com/showmessage/71595/1.php , "tdillon"의 게시물)에서 한 가지 제안을 찾았 습니다.

A.Single FFT tests - N inputs and N outputs
 1.Input random data
 2.Inputs are all zeros
 3.Inputs are all ones (or some other nonzero value)
 4.Inputs alternate between +1 and -1.
 5.Input is e^(8*j*2*pi*i/N) for i = 0,1,2, ...,N-1. (j = sqrt(-1))
 6.Input is cos(8*2*pi*i/N) for i = 0,1,2, ...,N-1.
 7.Input is e^((43/7)*j*2*pi*i/N) for i = 0,1,2, ...,N-1. (j = sqrt(-1))
 8.Input is cos((43/7)*2*pi*i/N) for i = 0,1,2, ...,N-1.

B.Multi FFT tests - run continuous sets of random data
 1.Data sets start at times 0, N, 2N, 3N, 4N, ....
 2.Data sets start at times 0, N+1, 2N+2, 3N+3, 4N+4, ....

스레드는 또한 진폭이 큰 하나와 진폭이 작은 두 가지 사인을 수행하도록 제안합니다.

내가 주요 질문에서 말했듯이, 이것이 특히 좋은 대답인지, 또는 완전히 완료되었는지는 확실하지 않지만 사람들이 투표하고 의견을 말할 수 있도록 여기에 넣고 있습니다.


1
"1. 랜덤 데이터 입력"은 무엇을 드러 낼까요?
Dilip Sarwate

1
@DilipSarwate : 퍼지 테스트는 충돌을 밝히는 데 유용 할 수 있습니다. 또한 노이즈 입력 유형 (예 : 핑크 노이즈 또는 화이트 노이즈)에 따라 전체 에너지 분포가 예상 한대로 확인하는 데 유용 할 수 있습니다.
smokris 2011

2
@Dilip-내 fft "연기 테스트"는 ifft (fft (random_stuff)) ~ = random_stuff입니다.
hotpaw2

(0,1)99% (0,1)

2
@Dilip : 저는 하드웨어 녀석입니다. 모든 승수와 CSA에서 모든 비트의 높은 비율을 토글 할 수있는 것을 원했습니다.
hotpaw2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.