저는 Accelerate 프레임 워크를 사용하여 FFT (Fast Fourier Transform)를 수행하고 길이가 1024 인 버퍼를 만드는 방법을 찾으려고합니다. 평균 피크 및 피크에 액세스 할 수 있습니다. 내가 FFT를하고 싶은 신호의Accelerate 프레임 워크를 사용하여 FFT를 수행 할 때 버퍼를 어떻게 설정합니까?
누군가가 나를 도울 수 있나요?
저는 Accelerate 프레임 워크를 사용하여 FFT (Fast Fourier Transform)를 수행하고 길이가 1024 인 버퍼를 만드는 방법을 찾으려고합니다. 평균 피크 및 피크에 액세스 할 수 있습니다. 내가 FFT를하고 싶은 신호의Accelerate 프레임 워크를 사용하여 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, 1, magnitudes, 1, 64);
// Extract the maximum value and its index
double fftMax = 0.0;
vDSP_maxmgvD(magnitudes, 1, &fftMax, 64);
return sqrt(fftMax);
}
, 나는에만 설정이 FFT에 실제 값을 사용을 입력 버퍼를 올리고 FFT를 수행 한 다음 크기를 읽습니다.
thx, 많은 도움이되었습니다. – Kiwi
감사합니다 - 이것은 내가 본 대부분의 경우 (대부분 역 FFT를 수행하는 곳)보다 훨씬 간단한 예입니다. 매우 도움이되는 것은 내가 내 문제에 필요한 최소한의 비트인지 알 수 있습니다! –
웨이브 진폭 인덱스를 실제 값으로 설정합니다. imagp가 0이어야합니까? 나에게는 분명하지 않다. 왜 CTOZ 기능을 사용하지 않습니까? thx –
Accelerate.Framework에 관한 WWDC2010 세션 중 하나에서 그들은 그것에 대해 이야기했습니다. 나는 틀릴 수도 있지만 아마도 * 그에 대한 견본이있을 것입니다. 어느 쪽이든, 당신은 Accelerate 봐야한다. 프레임 워크 참조, 당신이 원하는 일을 매우 유용한 기능이있다;) – nacho4d
[이 StackOverflow 질문] (http://stackoverflow.com/questions/)에 대한 답변을보고 싶지 수도 있습니다 3398753/using-the-apple-fft-and-accelerate-framework "이 스택 오버플로 문제"). Apple의 Accelerate 프레임 워크를 사용하여 오디오의 FFT를 생성하는 여러 가지 좋은 예가 제공됩니다. – rcw3