2014-01-11 2 views
3

저는 Android 응용 프로그램에 사용할 MATLAB의 간단한 오디오 처리 알고리즘을 작성했습니다. FFT 구현을 Java로 변환하는 데 문제가 있습니다.Java fftpack의 기본 사용

나는 효율적으로 알려져있는 fftpack의 Java 버전을 사용하려고하지만 일반적으로 FFT를 제대로 이해하지 못했기 때문에 나에게 약간의 설명이 들지 않습니다.

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

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

을 나는이 오히려 간단 기대,하지만 난 fftpack로 진입 점을 식별 할 수 없습니다 : 명확성을 위하여

, 여기에 내가 자바 fftpack를 사용하여 복제하고 싶은 필수 MATLAB 코드입니다.

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

답변

1

sourceforge jfftpack repository

로부터 판독 : fftpack 입력으로 이중 배열을 지원하는 LutzL에서 아래

대답이 작동하지만 Complex1D 객체를 생성 실제로 불필요 :


해결

새 fft 개체는

를 통해 초기화합니다.

935,는 그런 다음 전방

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); 

와 FFT 오브젝트의 변형 사용하고 FFT를 정상화 N 의해

x=X.x[k]; y=X.y[k]; a=Math.sqrt(x*x+y*y); 

선택적으로 나누기로 절대 값을 액세스 할 수있다.

적절한 변수 선언을 추가하십시오. 신호는 샘플링 주파수 fs를, 엔트리 X. (XY)로 샘플링되는 경우


일반적인 규칙이 적용 [K]는 K의 주파수 성분을 나타내고, * FS/N K 용 = N/2 N 행 -1.


당신은 순수 자바에서 수행되는 다른, 더 나은 지원 FFT 구현에보고 할 수 있습니다, 이항 길이의 FFT를 구현하기가 복잡하지 않습니다. 마지막 속도 향상 요인을 얻기 위해 변환을 구현할 때 유일한 문제가 발생합니다.

+0

감사합니다. 이것은 fft.ft가 void를 반환하고 X를 자동으로 변경한다는 점을 제외하고는 작동합니다. 반영된 답변을 기꺼이 받아 들일 것입니다. – Jayz7522

+0

예, 완료되었습니다. 대답을 쓰면서 나는 실제 전화를 제외한 전화 준비를 위해 다른 모든 것을 바꿨다. – LutzL