【发布时间】:2012-12-16 17:27:00
【问题描述】:
我已经设置了一个功能来设置加速器,在我阅读之后:
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);
}
问题:
- 我的应用程序在这 2 行之一上总是崩溃且没有错误(BAD ACCESS):
originalReal[i] = (float) (i + 1); // 或
vDSP_ctoz((COMPLEX *) originalReal,2,&A,1,nOver2);
我想我没有为 log2n 设置一个好的值? (10 得到 1024 窗口?)
如何获得垃圾箱的真实大小?我的实际fft?我在这里写的一样吗?
我在哪里输入我的数据缓冲区数组(在我的代码中的确切位置?而不是 originalReal?)
非常感谢。
【问题讨论】:
标签: objective-c accelerate-framework