我一直花費相當多的時間研究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