作者Carbontube (碳管)
看板C_and_CPP
標題[問題] 請問這情況要如何處理?
時間Sat Apr 4 00:06:34 2009
小弟現在做個訊號處理的計算,問題如下。
有個function 會被呼叫n次(n~ pow(10,7) ),n為一訊號的點數
而function裡用到一些coefficient 會用到(快速)傅立業求得
#define real double
typedef struct Complex
{
real Re;
real Im;
}complex;
int main(void)
{
:
for(int i =0;i<n;i++){
// some procedure
ConvolutionGaussian(L,fs,fw);
}//for
:
:
}//main
void ConvolutionGaussian(L,*fs, *fw)
{
static real *Coeff = GauCoeff(L);
for(int i = 0;i< L;i++)
{
//Convolution procedure :
// fw = Sum (GauCoeff*fs)
}//i
}//ConvolutionGaussian
GauCeoff()這函式裡面用到(快速)傅立業 而對整個在main中的回圈(做n次)而言
這些Coeff全都一樣,所以把這變數設為static
現在問題是...
若外面的main 做這種處理超過一次(也就是不只一個forloop,好比處理兩條訊號)
這樣Coeff會不同,但在ConvolutionGaussian中Coeff已被設為static ..
那請問怎樣處理呢?
若不把Coeff設為 static ,則每做一個點就要做一次傅立業,計算量會過度
旁大。。
有牛人可幫解一下嗎 ,謝謝。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.167.78.235
→ sunneo:牛人 ? (GNU上的那的圖示嗎 XDrz) 04/04 00:16
→ james732:把 Coref 變成參數 做不做 GauCoeff 讓 main 決定? 04/04 00:18
推 ewn:牛人是大陸用語的高手... 04/04 01:10
→ zhi5566:為什麼你設了static就不會再做復利業? 04/04 02:04
→ zhi5566:照程式碼看來coeff會被算n次 04/04 02:05
→ weiyucsie:因為那個函數是放在設定初值的地方吧。 04/04 02:20
→ weiyucsie:static real *Coeff = GauCoeff(L); 04/04 02:20
→ weiyucsie:不過感覺當成參數傳,似乎不錯?(感覺要改比較方便) 04/04 02:21
→ zhi5566:阿對static有這用法 但沒看過這樣用 而且效能會變差 04/04 16:21
→ zhi5566:static一般用在需累加減數 不希望函數消失值就消失 04/04 16:25
→ zhi5566:如果是做二維就用global值傳參數 放在n loop上 04/04 16:27
※ 編輯: Carbontube 來自: 218.167.78.235 (04/04 19:51)