关于fortran语言编程的问题,求高手帮忙!急!
现在需要用fortran90编写这样一个程序:有一个信号脉冲,每隔一个固定时间t,采下它的信号值,存在一个一维数组里,保存在一个txt文档中(这一步已经完成了),现在的任...
现在需要用fortran90编写这样一个程序:有一个信号脉冲,每隔一个固定时间t,采下它的信号值,存在一个一维数组里,保存在一个txt文档中(这一步已经完成了),现在的任务是,对这个已知数组,例如【a】={1,2,6,7,8,9,5,4,3,2,0,2,4,6,7,9,8,6,4,3,....(还有很长很长,一直这样从小到大,又从大到小波动着)},我要把这个数组读到程序里(不能手动输入),并且要把每个峰值找到,另外还要知道各个峰值之间的时间间隔T,输出T即可。其实也就是求这个信号的周期吧,如果有其他方法也行,只要能尽量提高精度就好了!谢谢了!
那些信号数值只是保存在txt文档里,请问要什么格式来记录?一行一个数字吗? 展开
那些信号数值只是保存在txt文档里,请问要什么格式来记录?一行一个数字吗? 展开
2个回答
展开全部
如果数据很多的话,一行一个看起来不太划算,可以记录一个,然后空格。(不过实际上如果只是为了读取的话,一行一个也没什么不行的)
关于找峰值,我没有做信号处理的经验,不过大致可以想一个算法如下:
序列A,B,C,D,E(整数),用A与B比较,得到一个true或false的布尔变量Bool1,然后用B和C比较,得到第二个布尔变量Bool2,如果bool1和bool2一致的话,说明B不是峰值,接着往下比较,用C和D比较的结果Bool3替换Bool1,以此类推。
如果不一致的话,B就是峰值,输出B在数组中的位置,然后找到第二个峰值后,相减,得到间隔T。
如果考虑相等的情况的话,可以把等于的if语句放在大小比较之前,如果true的话,就直接跳到下一步比较,而这一步的布尔变量可以不用管,知道下一步比较出现不等于的情况就来更新这个布尔变量。
具体程序还是自己编吧,这也是一种锻炼~
祝好运
关于找峰值,我没有做信号处理的经验,不过大致可以想一个算法如下:
序列A,B,C,D,E(整数),用A与B比较,得到一个true或false的布尔变量Bool1,然后用B和C比较,得到第二个布尔变量Bool2,如果bool1和bool2一致的话,说明B不是峰值,接着往下比较,用C和D比较的结果Bool3替换Bool1,以此类推。
如果不一致的话,B就是峰值,输出B在数组中的位置,然后找到第二个峰值后,相减,得到间隔T。
如果考虑相等的情况的话,可以把等于的if语句放在大小比较之前,如果true的话,就直接跳到下一步比较,而这一步的布尔变量可以不用管,知道下一步比较出现不等于的情况就来更新这个布尔变量。
具体程序还是自己编吧,这也是一种锻炼~
祝好运
展开全部
open(unit=1,file='信号值')
do i=1,a_max !a_max为信号值的个数
read(1,*), a(i) !读入信号值
enddo
这是将数据读入程序中,下面要找每个峰值的话,我建议可以分段找,比方说将所有的值分成a_max/8段(8是根据周期预估的值)。在每一段里找最大值的话就可以采用下面的程序了
temp=0.
do i=1,a_max/8 !a_max为信号值的个数
if(a(i)>temp) then temp=a(i)
write(*,*) temp,i !temp为该段中的最大值,i为最大值的位置
endif
enddo
希望能对你有帮助吧 。
do i=1,a_max !a_max为信号值的个数
read(1,*), a(i) !读入信号值
enddo
这是将数据读入程序中,下面要找每个峰值的话,我建议可以分段找,比方说将所有的值分成a_max/8段(8是根据周期预估的值)。在每一段里找最大值的话就可以采用下面的程序了
temp=0.
do i=1,a_max/8 !a_max为信号值的个数
if(a(i)>temp) then temp=a(i)
write(*,*) temp,i !temp为该段中的最大值,i为最大值的位置
endif
enddo
希望能对你有帮助吧 。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询