문제

Android 응용 프로그램에 사용할 MATLAB에 간단한 오디오 처리 알고리즘을 작성했습니다. FFT 구현을 Java로 번역하는 데 어려움이 있습니다.

Java 버전의 FFTPack 의 Java 버전을 사용하려고합니다. 또한 저에게 약간의 암호화, 아마도 FFT에 대한 단단한 파손이 일반적으로 파악하기 때문일 것입니다.

나는 FFT를 나타내는 복소수의 해당 배열을 생성하고자하는 이중 배열을 단순히 갖게됩니다. FFT에서 수행 할 수있는 유일한 계산은 요소의 절대 값을 취하고 있습니다.

명확성을 위해 자바 FFTPack을 사용하여 복제하려는 필수적인 MATLAB 코드가 있습니다.

X = fft(myDoubleArray);
abs(X[i]);
.

이것은 오히려 단순하지만, 진입 점을 fftpack으로 식별 할 수는 없습니다.


해결 :

Lutzl Works에서 아래의 답변이 작지만 FFTPACK이 입력으로 이중 배열을 지원하는 경우는 실제로 불필요합니다.

RealDoubleFFT rdfft = new RealDoubleFFT(myArray.length);
rdfft.ft(myArray);
.

도움이 되었습니까?

해결책

sourceforge jfftpack 저장소

를 통해 새로운 FFT 객체를 초기화합니다.
fft = new ComplexDoubleFFT(N);
.

다음 FFT 객체의 순방향 변환을

로 사용합니다.
Complex1D X;
X.x=new double[N];
X.y=new double[N];
for(k=0;k<N;k++) X.x[k]=x[k];

fft.ft(X);
.

및 절대 값을

로 액세스 할 수 있습니다.
x=X.x[k]; y=X.y[k]; a=Math.sqrt(x*x+y*y);
.

선택적으로 N로 나누기 FFT를 정상화하십시오.

적절한 변수 선언을 추가합니다.


일반적인 규칙이 적용되며, 신호가 샘플링 주파수 FS로 샘플링되면, Entry X. (XY) [K]는 K= N / 2 ~ N-1에 대한 K * FS / N의 주파수 성분을 나타냅니다. < / P>


순수한 Java에서 수행되는 다른보다 나은 지원 FFT 구현을 찾고 싶을 수 있습니다. 이는 Dyadic Length에 대한 FFT를 구현하는 것은 복잡하지 않습니다. 유일한 합병증은 최종 속도 업 요인을 얻기 위해 변환을 구현할 때 유일한 합병증이옵니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top