에 FFT에 대한 가속기 프레임 워크 :설정 내가 읽은 후 나는, 설치에 기능을 가속기를 설정 한 아이폰
Using the Apple FFT and Accelerate Framework
iPhone FFT with Accelerate framework vDSP
와 사과 문서.
나는이 한 :
void fftSetup()
{
COMPLEX_SPLIT A;
FFTSetup setupReal;
uint32_t log2n;
uint32_t n, nOver2;
int32_t stride;
uint32_t i;
float *originalReal, *obtainedReal;
float scale;
uint32_t L = 1024;
float *mag = new float[L/2];
log2n = 10 ;
n = 1 << log2n;
stride = 1;
nOver2 = n/2;
printf("1D real FFT of length log2 (%d) = %d\n\n", n, log2n);
for (i = 0; i < n; i++)
originalReal[i] = (float) (i + 1);
vDSP_ctoz((COMPLEX *) originalReal,2,&A,1,nOver2);
A.realp = (float *) malloc(nOver2 * sizeof(float));
A.imagp = (float *) malloc(nOver2 * sizeof(float));
setupReal = vDSP_create_fftsetup(log2n, FFT_RADIX2);
vDSP_fft_zrip(setupReal, &A, stride, log2n, FFT_FORWARD);
vDSP_fft_zrip(setupReal, &A, stride, log2n, FFT_INVERSE);
//get magnitude;
for(i = 1; i < L/2; i++){
mag[i] = sqrtf(A.realp[i]*A.realp[i] + A.imagp[i] * A.imagp[i]);
}
scale = (float) 1.0/(2 * n);
vDSP_vsmul(A.realp, 1, &scale, A.realp, 1, nOver2);
vDSP_vsmul(A.imagp, 1, &scale, A.imagp, 1, nOver2);
}
질문 :
- 항상이 두 라인 중 하나에 오류없이 (BAD ACCESS)와 충돌이 내 응용 프로그램 :
originalReal [i] = (float) (i + 1); // 또는
vDSP_ctoz ((COMPLEX *) originalReal, 2, & A, 1, nOver2);
나는 log2n에 대해 좋은 값을 설정하지 않았을까? (1024를 얻으려면 10을 얻으시겠습니까?)
어떻게하면 저장소의 실제 크기를 얻을 수 있습니까? 내 실제 fft? 내가 썼던 것과 똑같은가? 내가 입력 내 데이터 버퍼 배열을
(정확히 내 코드에서? 대신 originalReal?)
고마워요.
가능한 [오디오 버퍼에서 가속기 사용] (http://stackoverflow.com/questions/14114682/using-the-accelerator-to-fft-on-audio-buffer) –