2012-04-21 3 views
0

센서에서 얻은 플로트 배열을 가지고 있으며 FFT를 통해 신호를 실행 한 후에 진폭을 얻고 싶습니다 (그 전에 샘플은 고역 통과 필터와 한 창 함수를 사용하여 처리되었습니다).1D FFT에 대한 입력

Complex[] complex = new Complex[1024]; 
for (int i = 0; i < 1024 - 1; i++) 
{ 
    complex[i] = new Complex(windowedSamples[i], 0); 
} 

FourierTransform.FFT(complex, FourierTransform.Direction.Forward); 
return complex.Select(x => Math.Sqrt(Math.Sqrt(x.Re) + Math.Sqrt(x.Im))).ToArray(); 

나는 이상한 결과를 얻고 문제 잠금이이 실행 : 매개 변수로 나는 다음과 같은 코드를 내놓았다 한 복잡한 숫자의 배열을 AForge.Math 라이브러리 FFT 클래스를 사용

문제에.

처음 10 개의 입력 값 :

0 0 -3.8454E-05 0.0001737584 0.0006910793 0.001071334 0.00204984 0.00276812 0.001741312 0.001796867

처음 10 출력값 :

0.482303347948843 0.706458195192639 NaN가 NaN이 NaN NaN NaN NaN NaN NaN

첫 번째 추측은 상상의 부분이있을 수도 있지만 지금까지 읽은 모든 내용은이 경우 0으로 설정해야한다고 말했습니다.

이 문제를 해결하는 데 정말로 감사드립니다.

+1

과 그 표현을 대체 원하는 경우

그것들이 긍정적 인 가치가 있다고 확신합니까? –

+1

Gebb가 오른쪽입니다. 결과 값이 복소수의 절대 값을 계산하는 데 잘못된 방법을 사용하고 있습니다. –

답변

5

이 표현

Math.Sqrt(Math.Sqrt(x.Re) + Math.Sqrt(x.Im)) 

나에게 이상한 조금 보인다. 여기에 x의 절대 값을 얻으려고합니까? 그렇다면 가상과 실제 부분을 제곱의 제곱근이 아닌 2의 제곱으로 올리는 것이 좋습니다. 절대 값은 당신이 그럼 그냥 당신은 x.Re 및 x.Im.의 제곱근을 복용

x.Magnitude 
+1

Math.Sqrt (x.Re * x.Re + x.Im * x.Im) –

+0

Gebb :) – pguzewicz

관련 문제