相关计算的c和fortran实现 实现

实现

  • 1.C语言自相关

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void (float *x,int N,float *y)
    {
    int i,j;
    for(i=0;i<N;i++)
    {
    y[N+i-1]=y[N-i-1]=0;
    for(j=0;j<N;j++)
    if((j-i>=0)) y[N+i-1]+=x[j]*x[j-i];
    y[N-i-1]=y[N+i-1];
    }
    }
  • 2.C语言互相关

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void xcorr(float *x,float *y,int N,float *z)
    {
    int i,j;
    for(i=-N+1;i<N-1;i++)
    {
    z[i+N-1]=0;
    for(j=0;j<N;j++)
    if((j+i>=0)&&(j+i)<N) z[i+N-1]+=x[j+i]*y[j];
    }
    }
  • 3.Fortran语言自相关

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    c ------------------------------------------------------------
    c CC calculating
    c ------------------------------------------------------------
    subroutine xcorr(x,y,n,z)
    real x(n),y(n),z(n+n-1)
    do i=-n+1,n-1
    z(i+n)=0
    do j=1,n
    if((j+i.ge.1).and.(j+i.le.n)) then
    z(i+n)=z(i+n)+x(j+i)*y(j)
    end if
    end do
    end do
    return
    end
  • 4.Fortran语言互相关

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    c --------------
    c XX calculating
    c --------------
    subroutine conv(x,n,y,m,z)
    real x(n),y(m),z(n+m-1)
    do i=0,n+m-2
    z(i+1)=0
    do j=0,m-1
    if(i-j.lt.0) then
    exit
    end if
    if((i-j.ge.0).and.(i-j.lt.n)) then
    z(i+1)=z(i+1)+x(j+1)*y(i-j+1)
    else
    continue
    end if
    end do
    end do
    return
    end

坚持原创技术分享,您的支持将鼓励我继续创作!

微信