Fortran 连续(sinc)小波变换给出了NaN

Fortran 连续(sinc)小波变换给出了NaN,fortran,Fortran,我想通过连续香农小波变换对原始信号进行相移。 构造的信号的结果都是NaN,尽管编译时没有任何错误消息。您可能在某处被零除。使用所有调试标志编译并启用浮点异常,您将找到问题所在。非常感谢!你的评论很有意义,也很有帮助。sinc(x)=sin(pi*t)/(pi*t)在t->0时趋向于1,但当t为0.0d0(数字)时,这会产生浮点异常(除以零)。这发生在t(i)=(i*dt-m)/(2**n)上,因为dt=0.01d0,i和m是整数。所以也许最好编写一个自定义sinc()函数,将t=0作为例外处理?

我想通过连续香农小波变换对原始信号进行相移。
构造的信号的结果都是NaN,尽管编译时没有任何错误消息。

您可能在某处被零除。使用所有调试标志编译并启用浮点异常,您将找到问题所在。非常感谢!你的评论很有意义,也很有帮助。sinc(x)=sin(pi*t)/(pi*t)在t->0时趋向于1,但当t为0.0d0(数字)时,这会产生浮点异常(除以零)。这发生在t(i)=(i*dt-m)/(2**n)上,因为dt=0.01d0,i和m是整数。所以也许最好编写一个自定义sinc()函数,将t=0作为例外处理?(例如,如果(abs(t)<1.0d-6)…其他…)您可能在某处被零除。使用所有调试标志编译并启用浮点异常,您将找到问题所在。非常感谢!你的评论很有意义,也很有帮助。sinc(x)=sin(pi*t)/(pi*t)在t->0时趋向于1,但当t为0.0d0(数字)时,这会产生浮点异常(除以零)。这发生在t(i)=(i*dt-m)/(2**n)上,因为dt=0.01d0,i和m是整数。所以也许最好编写一个自定义sinc()函数,将t=0作为例外处理?(例如,如果(abs(t)<1.0d-6)…其他…)。
  implicit     none
  character*20 fflname,oflname
  integer      length_sgnl
  real*8       pi, dt, m, n, theta
  parameter    ( length_sgnl=11900, dt=0.01d0, m=1, n=1, pi=3.1416
 &            ,theta=0.2 )

  integer      i     
  complex*16   cj, coeff ,sgnl(1 : length_sgnl)
  real*8       t(1 : length_sgnl)
  parameter    ( cj = dcmplx(0, 1) )

  real*8       time, real_sgnl, imag_sgnl


  oflname="filtered.data"
  fflname="artificial"
  open(11, file = oflname)
  do i=1, length_sgnl
     read(11, *) time, real_sgnl, imag_sgnl
     sgnl(i) = dcmplx(real_sgnl, imag_sgnl)
     t(i) = (i*dt - m) / (2**n)
  enddo

  coeff = 0
  do i=1, length_sgnl
     coeff = coeff 
 &        + sgnl(i) * sin(pi*t(i)) / (pi*t(i)) * exp (-cj*2*pi*t(i))
  enddo


  do i=1, length_sgnl
     sgnl(i) = sgnl(i) 
 &         - coeff * sin(pi*t(i)) / (pi*t(i)) * exp (-cj*2*pi*t(i))
 &         + coeff * sin(pi*t(i)) / (pi*t(i)) * exp (-cj*2*pi*t(i))
 &         * exp (cj*theta)
  enddo

  open(12, file = fflname)
  do i=1, length_sgnl
    write(12, *) i*dt, sgnl(i)
  enddo
  close(12)

  stop
  end