我正在尝试使用FFT加速神经模拟器的计算.
等式是:
(1)\ sum(j = 1到N)(w(i-j)*s_NMDA [j])
其中s_NMDA是长度为N的向量,w由以下定义:
(2)W(j)的双曲正切= [1 /(2*西格玛*P)]*EXP(-abs(J)/(西格玛*P)]
sigma和p是常量.
(有没有更好的方法在stackoverflow上呈现方程?)
必须对N个神经元进行计算.由于(1)仅取决于绝对距离abs(i-j),因此应该可以使用FFT(卷积定理)来计算它.
我试图使用FFTW实现这一点,但结果与预期结果不符.我之前从未使用过FFTW,现在我不确定如果我对卷积定理的假设是假的,那么我的实现是不正确的.
void f_I_NMDA_FFT(
const double **states, // states[i][6] == s_NMDA[i]
const unsigned int numNeurons)
{
fftw_complex *distances, *sNMDAs, *convolution;
fftw_complex *distances_f, *sNMDAs_f, *convolution_f;
fftw_plan p, pinv;
const double scale = 1./numNeurons;
distances = (fftw_complex *)fftw_malloc(sizeof(fftw_complex) * numNeurons);
sNMDAs = (fftw_complex *)fftw_malloc(sizeof(fftw_complex) * numNeurons);
convolution = (fftw_complex *)fftw_malloc(sizeof(fftw_complex) * numNeurons);
distances_f = (fftw_complex *)fftw_malloc(sizeof(fftw_complex) * numNeurons);
sNMDAs_f = (fftw_complex *)fftw_malloc(sizeof(fftw_complex) * numNeurons);
convolution_f = (fftw_complex *)fftw_malloc(sizeof(fftw_complex) * …Run Code Online (Sandbox Code Playgroud)