如果数据很多的话,一行一个看起来不太划算,可以记录一个,然后空格。(不过实际上如果只是为了读取的话,一行一个也没什么不行的)
关于找峰值,我没有做信号处理的经验,不过大致可以想一个算法如下:
序列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
希望能对你有帮助吧 。