iphone – 使用Accelerate框架进行FFT时如何设置缓冲区?

iphone – 使用Accelerate框架进行FFT时如何设置缓冲区?,第1张

概述我正在使用Accelerate框架来执行快速傅立叶变换(FFT),并且我正在尝试找到一种方法来创建一个缓冲区,以便使用长度为1024的缓冲区.我可以访问平均峰值和峰值.我想做FFT的信号. 有人可以帮我或给我一些提示吗? Apple提供了一些如何在 vDSP Programming Guide中设置FFT的示例.您还应该查看 vDSP Examples示例应用程序.对于Mac,此代码也应直接转换为 我正在使用Accelerate框架来执行快速傅立叶变换(FFT),并且我正在尝试找到一种方法来创建一个缓冲区,以便使用长度为1024的缓冲区.我可以访问平均峰值和峰值.我想做FFT的信号.

有人可以帮我或给我一些提示吗?

解决方法 Apple提供了一些如何在 vDSP Programming Guide中设置FFT的示例.您还应该查看 vDSP Examples示例应用程序.对于Mac,此代码也应直接转换为iOS.

我最近需要对64整数输入波形进行简单的FFT,为此我使用了以下代码:

static FFTSetupD fft_weights;static DSPDoubleSplitComplex input;static double *magnitudes;+ (voID)initialize{    /* Setup weights (twIDdle factors) */    fft_weights = vDSP_create_fftsetupD(6,kFFTradix2);    /* Allocate memory to store split-complex input and output data */    input.realp = (double *)malloc(64 * sizeof(double));    input.imagp = (double *)malloc(64 * sizeof(double));    magnitudes = (double *)malloc(64 * sizeof(double));}- (CGfloat)performAcceleratedFastFourIErtransformAndReturnMaximumAmplitudeForArray:(NSUInteger *)waveformArray;{       for (NSUInteger currentinputSampleIndex = 0; currentinputSampleIndex < 64; currentinputSampleIndex++)    {        input.realp[currentinputSampleIndex] = (double)waveformArray[currentinputSampleIndex];        input.imagp[currentinputSampleIndex] = 0.0f;    }    /* 1D in-place complex FFT */    vDSP_fft_zipD(fft_weights,&input,1,6,FFT_FORWARD);      input.realp[0] = 0.0;    input.imagp[0] = 0.0;    // Get magnitudes    vDSP_zvmagsD(&input,magnitudes,64);    // Extract the maximum value and its index    double fftMax = 0.0;    vDSP_maxmgvD(magnitudes,&fftMax,64);    return sqrt(fftMax);}

如您所见,我只使用此FFT中的实数值来设置输入缓冲区,执行FFT,然后读出幅度.

总结

以上是内存溢出为你收集整理的iphone – 使用Accelerate框架进行FFT时如何设置缓冲区?全部内容,希望文章能够帮你解决iphone – 使用Accelerate框架进行FFT时如何设置缓冲区?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1015176.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存