我一直花费相当多的时间研究FFT的。我特别喜欢使用KISSFFT,因为它是一个非常便携的C实现。kiss FFT bin幅度
我还很不清楚如何将i [x]和r [x]变成频率箱的幅度。于是创建了一个有符号的int 16版本的罪。我有512个我的正弦波样本。我期望看到一个Bin有数据,其余的都是零。事实并非如此......
这里是我的代码...
- (IBAction)testFFT:(id)sender{
NSLog(@"testFFT");
static double xAxis = 0;
static int sampleCount = 0;
static double pieSteps;
static double fullSinWave = 3.14159265*2;
static double sampleRate = 44100;
static double wantedHz = 0;
int octiveOffset;
char * globalString = stringToSend;
SInt16 dataStream[512];
// Notes: ioData contains buffers (may be more than one!)
// Fill them up as much as you can. Remember to set the size value in each buffer to match how
// much data is in the buffer.
for (int j = 0; j < 512; j++) {
wantedHz = 1000;
pieSteps = fullSinWave/(sampleRate/wantedHz);
xAxis += pieSteps;
dataStream[j] = (SInt16)(sin(xAxis) * 32768.0);
NSLog(@"%d) %d", j, dataStream[j]);
}
kiss_fft_cfg mycfg = kiss_fft_alloc(512,0,NULL,NULL);
kiss_fft_cpx* in_buf = malloc(sizeof(kiss_fft_cpx)*512);
kiss_fft_cpx* out_buf = malloc(sizeof(kiss_fft_cpx)*512);
for (int i = 0;i < 512;i++){
in_buf[i].r = dataStream[i];
in_buf[i].i = dataStream[i];
}
kiss_fft(mycfg,in_buf, out_buf);
for (int i = 0;i < 256;i++){
ix = out_buf[i].i;
rx = out_buf[i].r;
printfbar(sqrt(ix*ix+rx*rx)););
}
}
我得到的结果是这样的....
***** ********************* **************************** ********************* ************************ ********************* **************************** ********************* ***** ********************* **************************** ********************* ***************** ********************* **************************** ********************* ***** ********************* **************************** ********************* ************************ ********************* **************************** *********************
我创造了这个输出的一个简单的ASCII图形,我发现一个规律。我只是不明白这个模式... – 2011-05-31 16:45:09
因为你在这里是一个老成员,但从来没有投过票,从来没有接受过答案,让我提醒我们在这里通常做的三件事:1)当你得到帮助时,试着给它**在您的专业领域回答问题** 2)[阅读常见问题](http:// tinyurl。3)当你看到很好的问答时,用['灰色三角形](http://i.imgur.com/kygEP.png)“来投票,因为系统的可信度是基于用户通过分享知识获得的声誉。还请记住接受更好地解决您的问题的答案,[按下复选标记符号](http://tinyurl.com/4srwe2t) – 2011-06-02 03:37:44