Fortran Coder

查看: 5597|回复: 3
打印 上一主题 下一主题

[通用算法] 傅里叶逆变换

[复制链接]

23

帖子

9

主题

0

精华

熟手

F 币
134 元
贡献
82 点
跳转到指定楼层
楼主
发表于 2017-12-29 11:39:02 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
最近写了一个只取5实部的傅里叶变换,现在想对结果做个逆变换,不知逆变换程序写得对不对,望各位帮助修改,多谢!
[Fortran] 纯文本查看 复制代码
01!      傅里叶变换
02      PROGRAM FOURIER
03      IMPLICIT NONE
04      REAL(8)::DT,t,FCT,df,pi,w
05      CHARACTER::U
06      INTEGER::I,j
07      REAL(8),DIMENSION(10001)::CT
08      OPEN(12,FILE='VACFHI.txt')
09      OPEN(13,FILE='testFT.txt')
10      dt=1.2     ! fs
11      df=1.d-4   ! 1 fs^-1 = 33000 cm^-1
12      pi=4.d0*atan(1.d0)
13      DO i=1,10001
14        READ(12,*)U,CT(I)
15      ENDDO
16      DO j=1,12500
17         FCT=0
18         w=2.d0*pi*dble(j)*df
19        DO i=0,10000
20          t=dble(i)*DT
21          FCT=FCT+2.d0*(CT(I+1)*dCOS(w*t)*DT)
22        ENDDO
23        WRITE(13,*)w/pi/2.d0*3.3d4,FCT       
24      ENDDO
25      CLOSE(12)
26      CLOSE(13)
27      END     
28!傅里叶逆变换
29      program inverse FT
30      implicit none
31      integer,parameter::N=12500
32      real(8),dimension(N)::FT,u
33      integer::i,j
34      real(8)::t,dw,CT,w
35      open(11,file='testFT.txt')
36      open(12,file='inverseFT.txt')
37   
38      do i=1,N
39      read(11,*)u(i),FT(i)
40      enddo
41       
42      do i=1,12500
43        CT=0
44        t=i
45        dw=3.3    
46        do j= 1,N
47          w=3.3*j
48          CT=CT+2.d0*(FT(j)*cos(w*t)*dw)
49        enddo
50        write(12,*)t,CT
51      enddo
52      close(11)
53      close(12)
54      end
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

955

帖子

0

主题

0

精华

大师

F 币
188 元
贡献
77 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
地板
发表于 2018-1-1 21:15:38 | 只看该作者
你只取实部的话,肯定是不能还原原有信号的。

你可以用matlab来验证一下自己的结果。

[Fortran] 纯文本查看 复制代码
01PROGRAM FOURIER
02      IMPLICIT NONE
03      Real(8) , parameter :: PI = acos(-1.d0)
04      REAL(8)::FCT,w
05      CHARACTER::U
06      INTEGER::I,j
07      Integer , parameter :: N = 10001
08      Integer , parameter :: M = 12501
09      REAL(8),DIMENSION(N)::CT
10      OPEN(12,FILE='VACFHI.txt')
11      OPEN(13,FILE='testFT.txt')
12      DO i=1,N
13        READ(12,*)U,CT(I)
14      ENDDO
15      DO j=0,M-1
16         FCT=0
17         w=2.d0*pi*j/M
18        DO i=0,N-1
19          FCT=FCT+(CT(I+1)*COS(w*i))
20        ENDDO
21        WRITE(13,*)w/pi/2.d0*3.3d4,FCT       
22      ENDDO
23      CLOSE(12)
24      CLOSE(13)
25      END

23

帖子

9

主题

0

精华

熟手

F 币
134 元
贡献
82 点
板凳
 楼主| 发表于 2017-12-31 11:49:48 | 只看该作者
li913 发表于 2017-12-30 09:47
自己验证一下,逆变换能恢复原信号不。

不能,所以不知道是不是写的不对,谢谢。

837

帖子

2

主题

0

精华

大宗师

F 币
3934 元
贡献
2338 点
沙发
发表于 2017-12-30 09:47:04 | 只看该作者
自己验证一下,逆变换能恢复原信号不。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2025-4-8 04:47

Powered by Discuz! X3.4

© 2013-2025 Comsenz Inc.

快速回复 返回顶部 返回列表