程序是用fortran写的,但这里没有单独的板块,所以发到这里了,其实这不是一个程序语言的问题,用matlab编的话也会出现这个问题。
关于卷积,怎样求两个未知长度序列的卷积,就是不声明数组,只保存当前步数据
我们一般求卷积(非fft方法)的程序是:
这里求的是两组已知长度的序列x(n)和h(m)的卷积,卷积结果由y表示
dimension x(0-1),h(0-1),y(0-1)
l=m+n-1
Ierror=0
if(l.ge.(m+n-1))goto 1
Ierror=1
return
1 do 2 i=n,L-1 !由于y长度是m+n-1,所以x和h分别在n和m之外的部分用零
!补足
2 x(i)=0.0
do 3 i=m,L-1
3 h(i)=0.0
c
do 11 k=0,L-1
sum=0.0
do 12 i=0,k
sum=sum+x(i)*h(k-i)
12 continue
y(k)=sum
write(111,*) y(k)
11 continue
return
end
我们都知道,卷级的核心就是翻转,成绩,叠加,也就是这一步:
sum=sum+x(i)*h(k-i)
我现在想知道的是,可不可以不定义数组dimension x(0-1),h(0-1),y(0-1),
也就是x或h的长度不知道,只知道要计算到某一时刻t就停止(这里就当成计算两组时间序列的卷积),只保存当前步骤的卷积数值(也就是这里的sum),把当前步骤的卷积值写到文本文件里就行了,比如下面这样(但这个结果不对,想问一下大家这个应该怎么写呢?)
program test_conv
!计算两组数据 ht和ft的卷积,ht和ft的具体取值如下面程序所写:
!ht=exp(-time)等等
time=0.0
do i=1,600
ht=exp(-time)
!
if(i>=1 .and.i<=101) then
ft=1.
else
ft=0.
end if
!
ans=ans+ht*ft*0.01 !现在计算的是相关,不是卷积,因为没有翻转
! 我感觉错误还是出现在这一步,但不知道应该怎么写
!才能跟上一个程序的结果一样呢?
! 然后在这里把这一步得到的ans,也就是卷积结果写入文本
time=time+0.01
end do
end
我的意思就是不把ht和ft定义成数组,怎样来求ht和ft的卷积? (这里ft和ht的例子好像给的不好) 好像类似于叫动态卷积?
我写的有点多,但想尽量写得详细一写大家才能弄明白我的问题是什么意思吧? 如果还有写的不清楚的地方,大家尽管问我。 我被这个问题困扰很久了 非常感谢