Output from OouraFFT correct sometimes but completely false other times. Why ?
Posted
by Yan
on Stack Overflow
See other posts from Stack Overflow
or by Yan
Published on 2010-03-17T15:43:58Z
Indexed on
2010/03/21
20:01 UTC
Read the original article
Hit count: 245
Hi
I am using Ooura FFT to compute the FFT of the accelerometer data in windows of 1024 samples. The code works fine, but then for some reason it produces very strange outputs, i.e. continuous spectrum with amplitudes of the order of 10^200.
Here is the code:
OouraFFT *myFFT=[[OouraFFT alloc] initForSignalsOfLength:1024 NumWindows:10]; // had to allocate it
UIAcceleration *tempAccel = nil;
double *input=(double *)malloc(1024 * sizeof(double));
double *frequency=(double *)malloc(1024*sizeof(double));
if (input)
{
//NSLog(@"%d",[array count]);
for (int u=0; u<[array count]; u++)
{
tempAccel = (UIAcceleration *)[array objectAtIndex:u];
input[u]=tempAccel.z;
//NSLog(@"%g",input[u]);
}
}
myFFT.inputData=input; // specifies input data to myFFT
[myFFT calculateWelchPeriodogramWithNewSignalSegment]; // calculates FFT
for (int i=0;i<myFFT.dataLength;i++) // loop to copy output of myFFT, length of spectrumData is half of input data, so copy twice
{
if (i<myFFT.numFrequencies)
{
frequency[i]=myFFT.spectrumData[i]; //
}
else
{
frequency[i]=myFFT.spectrumData[myFFT.dataLength-i]; // copy twice
}
}
for (int i=0;i<[array count];i++)
{
TransformedAcceleration *NewAcceleration=[[TransformedAcceleration alloc]init];
tempAccel=(UIAcceleration*)[array objectAtIndex:i];
NewAcceleration.timestamp=tempAccel.timestamp;
NewAcceleration.x=tempAccel.x;
NewAcceleration.y=tempAccel.z;
NewAcceleration.z=frequency[i];
[newcurrentarray addObject:NewAcceleration]; // this does not work
//[self replaceAcceleration:NewAcceleration];
//[NewAcceleration release];
[NewAcceleration release];
}
TransformedAcceleration *a=nil;//[[TransformedAcceleration alloc]init]; // object containing fft of x,y,z accelerations
for(int i=0; i<[newcurrentarray count]; i++)
{
a=(TransformedAcceleration *)[newcurrentarray objectAtIndex:i];
//NSLog(@"%d,%@",i,[a printAcceleration]);
fprintf(fp,[[a printAcceleration] UTF8String]); //this is going wrong somewhow
}
fclose(fp);
[array release];
[myFFT release];
//[array removeAllObjects];
[newcurrentarray release];
free(input);
free(frequency);
© Stack Overflow or respective owner