matlab无限长序列卷积,怎样求未知长度序列的卷积

程序是用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的例子好像给的不好) 好像类似于叫动态卷积?

我写的有点多,但想尽量写得详细一写大家才能弄明白我的问题是什么意思吧? 如果还有写的不清楚的地方,大家尽管问我。  我被这个问题困扰很久了             非常感谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值