2013-10-14 2 views
2

빠른 푸리에 변환과 관련된 질문이 있습니다. FFT는 "수학 커먼즈 3.2"라이브러리를 다운로드했습니다. 그러나 그 결과는 내가 예상했던 것과 다르다. 실제와 같은 데이터에 대한 예를 들어빠른 푸리에 변환 wolframalpha와 commons-math 사이의 결과 차이

: 1,0,0,0,0,0,0,0,0 상상 : 0,0,0,0,0,0,0,0,0 내가있어, 실제 : 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 상상 : 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 나는 this code ("공공 정적 주"절에서 사용될 때 내가있어 동일한 결과 이 예제는 "테스트"로 존재합니다) wolframalpha에 실제 값은 모두 1.0이 아닌 1/3입니다.

질문 :
경우/차이이며 일반적인 관례 내가 울프 럼 알파의
안부처럼 같은 결과를 얻을 수있는 방법
DAWID D

답변

2

이상적으로 이산 푸리에 변환은 직교 변형입니다. 좌표계를 회전시켜 공간상의 동일한 점에 대해 다른 좌표 세트를 제공합니다.

DFT의 많은 구현은 정상적이지 않습니다. 그들은 계산 편의를 위해 벡터의 크기를 간단히 변경합니다. 본질적으로, 모든 추가 작업은 벡터 길이에 요소의 수를 곱하고 구현은 절대로 곱하거나 나누어 보정하지 않습니다.

여러분에게 반환 된 벡터 WolframAlpha의 길이가 입력 벡터의 길이와 동일한 1임을 관찰하십시오. (길이는 요소의 제곱의 합에 대한 제곱근입니다. 입력 벡터의 길이는 sqrt (1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0) = 1입니다. 출력 벡터는 sqrt (1/9 + 1/9 + 1/9 + 1/9 + 1/9 + 1/9 + 1/9 + 1/9) = 1이다.)

일반적인 정규화를 무시하고 확장 된 결과를 반환하는 DFT 구현을위한 규칙. 이것은 변환 결과에 사용되는 대부분의 연산이 절대 크기를 신경 쓰지 않기 때문에 효과적입니다. 또한 일반적인 프로세스는 하나 이상의 DFT를 계산하고 결과를 결합 또는 처리하며 역 DFT를 계산하는 것입니다. 스케일링이 DFT의 일부라면, 각 DFT와 각 역 DFT에서 수행되어야합니다. DFT에서 스케일링을 남겨두면 애플리케이션은 마지막에 단일 스케일링 연산과 관련된 모든 스케일을 결합 할 수 있습니다. 컴퓨팅 성능이 여러 번 이상 배율을 조정하는 것이 더 좋으므로이 방법을 사용하는 것이 좋습니다.

3

의 벡터의 FFT 무엇 1은 1,0,0,0이어야합니다. 따라서 Wolfram Alpha 결과는 비정규 화됩니다. 큰 차이는 아니지만 실제로는 "잘못"하지는 않지만 Alpha에서 정규화 된 결과를 얻으려면 분명히 3을 곱해야합니다.

+1

사실, 그 반대의 경우입니다. 대부분의 DFT 구현은 비정규 화되어 있습니다. 직교 변형의 수학적 가치와 일치하도록 결과를 확장하지 않습니다. WolframAlpha 결과는 정규화됩니다. 그 출력 벡터는 입력 벡터와 동일한 벡터 길이를가집니다. –