STFT에 vDSP 기능을 사용하는 방법을 이해하려고합니다. 그래서 애플의 expamles에서 FFT 코드를 사용하고 처음 1024 프레임의 FFT를 얻을 수 있지만 어떻게 파일의 끝까지 다음 1024 - 2047 프레임 정도의 FFT를 얻을 수 있습니까? (이 경우 필자는 파일 크기를 상상합니다. int f = 10000). 당신은 단순히 다음 1024 개 요소의 FFT를 원하는 경우짧은 시간 푸리에 변환을 위해 vDSP 기능을 사용하려면 어떻게합니까?
//vDSP variables
DOUBLE_COMPLEX_SPLIT A;
FFTSetupD setupReal;
uint32_t log2n;
uint32_t n, nOver2;
int32_t stride;
double *obtainedReal;
double scale;
log2n = N;
n = 1 << log2n;
stride = 1;
nOver2 = n/2;
int f = 10000;
buffer = malloc(f *sizeof(double));
obtainedReal = malloc(f *sizeof(double));
A.realp = malloc(f *sizeof(double));
A.imagp = malloc(f *sizeof(double));
vDSP_ctozD((DOUBLE_COMPLEX*) buffer, 2, &A, 1, nOver2);
setupReal = vDSP_create_fftsetupD(log2n, FFT_RADIX2);
if (setupReal == NULL) {
NSLog(@"fft_setup failed to allocate enough memory for real FFT\n");
return 0 ;
}
vDSP_fft_zripD(setupReal, &A, stride, log2n, FFT_FORWARD);
scale = (double) 1.0/(2 * n);
vDSP_vsmulD(A.realp, 1, &scale, A.realp, 1, nOver2);
vDSP_vsmulD(A.imagp, 1, &scale, A.imagp, 1, nOver2);
vDSP_ztocD(&A, 1, (DOUBLE_COMPLEX *) obtainedReal, 2, nOver2);
고맙습니다! A.Orp 및 A.imagp에 nOver2를 어떻게 추가 할 수 있습니까? 코드에서 이것을 보여 주실 수 있습니까? :-) – andrey
'A.realp + = nOver2; A.imagp + = nOver2;' –
대단히 고마워요! – andrey