作者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
1F:→ sunneo:牛人 ? (GNU上的那的图示吗 XDrz) 04/04 00:16
2F:→ james732:把 Coref 变成参数 做不做 GauCoeff 让 main 决定? 04/04 00:18
3F:推 ewn:牛人是大陆用语的高手... 04/04 01:10
4F:→ zhi5566:为什麽你设了static就不会再做复利业? 04/04 02:04
5F:→ zhi5566:照程式码看来coeff会被算n次 04/04 02:05
6F:→ weiyucsie:因为那个函数是放在设定初值的地方吧。 04/04 02:20
7F:→ weiyucsie:static real *Coeff = GauCoeff(L); 04/04 02:20
8F:→ weiyucsie:不过感觉当成参数传,似乎不错?(感觉要改比较方便) 04/04 02:21
9F:→ zhi5566:阿对static有这用法 但没看过这样用 而且效能会变差 04/04 16:21
10F:→ zhi5566:static一般用在需累加减数 不希望函数消失值就消失 04/04 16:25
11F:→ zhi5566:如果是做二维就用global值传参数 放在n loop上 04/04 16:27
※ 编辑: Carbontube 来自: 218.167.78.235 (04/04 19:51)