2011-05-17 79 views
0

我想寫一個簡單的FFTW例程(版本2),我想我剛剛得到了骨頭,但我遇到了一個持久性段錯誤,當我打電話fftwnd_one函數(我正在做一維變換,但爲了模塊化,我使用了n維代碼)。但是,我相信我的問題在於創造計劃。任何人都可以提供一些有關此代碼有什麼問題的見解?如果願意,我將不勝感激 - 謝謝!FFTW Segfault(可能簡單的答案)

作爲參考,我在這裏使用的函數是sin(x)。我意識到並非所有的數學運算都已經實現,我只是想先讓FFTW2庫工作,然後才能使數據有用。

#include <stdio.h> 
#include <fftw.h> 
#include <math.h> 
#include <complex.h> 

int main(){ 
    int i; 
    fftw_complex in[8]; 
    fftwnd_plan p; 
    const int *n; 
    int temp = (int)pow(2, 2)*pow(3,2)*pow(5,1)*pow(7,1)*pow(11,1)*pow(13,0); 
    n = &temp; 

    in[0].re = 0; 
    in[1].re = (sqrt(2)/2); 
    in[2].re = 1; 
    in[3].re = (sqrt(2)/2); 
    in[4].re = 0; 
    in[5].re = -(sqrt(2)/2); 
    in[6].re = -1; 
    in[7].re = -(sqrt(2)/2); 

    for(i = 0; i < 8; i++){ 
    (in[i]).im = 0; 
    } 

    p = fftwnd_create_plan(8, n, FFTW_FORWARD, FFTW_ESIMATE | FFTW_IN_PLACE); 
    fftwnd_one(p, &in[0], NULL); 
    fftwnd_destroy_plan(p); 

    printf("Sin\n"); 
    for(i = 0; i < 8; i++){ 
    printf("%d\n", n[i]); 
    } 
    return 0; 
} 

回答

1

前兩個參數來fftwnd_create_plan看起來完全錯誤的。看起來你只是想爲8碼的1D FFT創建一個計劃(如果你只需要一維FFT,這就引發了你爲什麼使用fftwnd_create_plan的問題)。電話應該是這樣的:

const int n = 8; 
p = fftwnd_create_plan(1, // rank = 1, i.e. 1D 
         &n, // size of first (and only) dimension = n = 8 
         FFTW_FORWARD, 
         FFTW_ESIMATE | FFTW_IN_PLACE); 
+0

太棒了,謝謝!我使用fftwnd_create_plan的原因是因爲這只是一種測試案例,爲的是讓我自己熟悉該軟件。在我爲這個簡單的例子工作之後,我將會在圖書館進行一個更大的項目,所以我想使用n維函數,所以我會熟悉它們。現在我已經掌握了每個參數的具體含義,所以我希望能夠繼續下去。感謝您的幫助! – Patrick 2011-05-17 15:18:24

0

你似乎把n當作一個數組,當它只指向一個整數時。例如,不應該這樣:

printf("%d\n", n[i]); 

是:

printf("%d\n", in[i]); 
+0

啊 - 這是真的,謝謝,但我不認爲這是問題。我放入了一堆printf語句,並確定在調用fftwnd_one函數時發生段錯誤。我瀏覽過文檔,我認爲最可能的情況是我在創建計劃時犯了一個錯誤,但我不確定。 – Patrick 2011-05-17 06:17:46

相關問題