小编neb*_*ebw的帖子

使用FFT(FFTW)计算两个函数的卷积

我正在尝试使用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)

c++ math fft fftw biological-neural-network

1
推荐指数
1
解决办法
9854
查看次数

标签 统计

biological-neural-network ×1

c++ ×1

fft ×1

fftw ×1

math ×1