24小时热门版块排行榜    

查看: 2396  |  回复: 18
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

chenxiankai

禁虫 (正式写手)

本帖内容被屏蔽

» 猜你喜欢

已阅   关注TA 给TA发消息 送TA红花 TA的回帖

feixiaolin

荣誉版主 (文坛精英)

优秀版主

再看一下这个:

http://blog.renren.com/blog/247544700/703436782?bfrom=01020100300
!!时域分解FFT算法
!!离散时域信号的序号对应的时刻为nΔ,离散频域信号的序号对应的频率为m/(nΔ)
!!离散时域信号保存在文件A1.TXT中
!! 变换后的离散频域信号保存在文件 FFT_RESULT.TXT
!!编译器为cvf6.6

      PROGRAM FFT
      PARAMETER(K=4)
      !COMPLEX用结构体定义复数
      TYPE CMPLX0
      REAL RE0,IM0
      END TYPE

      REAL M
      TYPE(CMPLX0)A(0:2**K-1),A0(0:2**K-1)

      OPEN(1,FILE='A1.TXT')
      DO I=0,2**K-1
           READ(1,*) A(I).RE0,A(I).IM0
      ENDDO
!     PRINT*,A
      CLOSE(1)
      DO I=0,2**K-1
           A0(I)=A(IFIX(CTY_I(I,K)))
      ENDDO
!     PRINT*,A0
!     PAUSE

      DO I=1,K                                                      !大循环
           DO J0=1,2**(K-I)                                !单元个数
                 M=0
                 DO J1=(J0-1)*2**I,(J0-1)*2**I+2**(I-1)-1 !每个单元的运算次数
                      A(J1)=PLUS(A0(J1),MULT(A0(J1+2**(I-1)),W(M,2.**K)))
                      A(J1+2**(I-1))=SUBT
     &(A0(J1),MULT(A0(J1+2**(I-1)),W(M,2.**K)))
                      M=M+2**(K-I)
                      IF(M>=2**(K-1)) M=0
                 ENDDO
           ENDDO
      A0=A
      ENDDO
      OPEN(2,FILE='FFT_RESULT.TXT',ACTION='WRITE')
      DO I=0,2**K-1
           IF(A(I).RE0==0) THEN
                 WRITE(2,100) A(I).IM0
           ELSEIF(A(I).IM0==0)THEN
                 WRITE(2,200) A(I).RE0
           ELSE
                 WRITE(2,300)A(I).RE0,A(I).IM0
           ENDIF
      ENDDO
100 FORMAT(F18.3,'i')
200 FORMAT(F18.3)
300 FORMAT(F18.3,'           +',F18.3,'i')

      CONTAINS
      !PLUS 定义复数的加法
      FUNCTION PLUS(Z1,Z2)
      TYPE(CMPLX0) Z1,Z2,PLUS
      PLUS.RE0=Z1.RE0+Z2.RE0
      PLUS.IM0=Z1.IM0+Z2.IM0
      ENDFUNCTION
      !SUBTRACTION 定义复数的减法
      FUNCTION SUBT(Z1,Z2)
      TYPE(CMPLX0) Z1,Z2,SUBT
      SUBT.RE0=Z1.RE0-Z2.RE0
      SUBT.IM0=Z1.IM0-Z2.IM0
      ENDFUNCTION
      !MULTIPLACATION 定义复数的乘法
      FUNCTION MULT(Z1,Z2)
      TYPE(CMPLX0) Z1,Z2,MULT
      MULT.RE0=Z1.RE0*Z2.RE0-Z1.IM0*Z2.IM0
      MULT.IM0=Z1.RE0*Z2.IM0+Z1.IM0*Z2.RE0
      ENDFUNCTION
      !W(N)**M 定义WN的M次方
      FUNCTION W(M,N)
      REAL M,N
      TYPE(CMPLX0) W
      W.RE0=COS(2*3.1415926*M/N)
      W.IM0=-SIN(2*3.1415926*M/N)
      ENDFUNCTION
      !CONTRARY I 求I的二进制逆序数
      FUNCTION CTY_I(I0,N)
      INTEGER I,A(N),N,IO
      REAL CTY_I
      A=0
      I=I0
      CTY_I=0
      DO K0=1,N
      IF(I-2**(N-K0)<0)THEN
           A(K0)=0
      ELSE
           A(K0)=1
           I=I-2**(N-K0)
      ENDIF
      CTY_I=CTY_I+A(K0)*2**(K0-1)
      ENDDO
      ENDFUNCTION
      END
16楼2014-09-02 16:12:48
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 19 个回答

chenxiankai

禁虫 (正式写手)

本帖内容被屏蔽

3楼2014-09-02 10:12:16
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

chenxiankai

禁虫 (正式写手)

本帖内容被屏蔽

4楼2014-09-02 10:59:30
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

feixiaolin

荣誉版主 (文坛精英)

优秀版主

引用回帖:
4楼: Originally posted by chenxiankai at 2014-09-02 10:59:30
请问,我的复数数组,是一个与时间相关的数组,从-t-t之间的,所以数组个数是奇数,因为包括了t=0的时候,请问我该怎么来写这个呢...

可以补一个数,取最末三个数的平均。
5楼2014-09-02 11:17:06
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见