图1. ①运行结果 图2. ②运行结果2.序列的卷积运算
序列f 1(k)、f 2(k)的卷积和运算f (k)= f 1(k)*f 2(k),可由MATLAB 的conv( )函数实现,调用格式为:
f=conv(f1,f2)
如:已知序列:???≤≤=???≤≤-=其他
,其他,030,2)(,02
2,1)(21k k f k k f k ,运行如下M 文件可
求其卷积和:
k1=-2:2;
f1=ones(1,length(k1)); k2=0:3; f2=2.^k2; f=conv(f1,f2) 结果为:
f =
1 3 7 15 15 14 1
2 8
可见,conv( )函数不需要给定f 1(k)、f 2(k)的非零样值的时间序号,也不返回卷积和序列f (k) 的时间序号;此外,conv( )假定f 1(k)、f 2(k)都是从k=0开始,这就限制了它的应用范围。因此,要对从任意k 值开始的序列进行卷积和运算,同时正确标识出函数conv( )的计算结果各量f ,还须构造序列f 1(k)、f 2(k)和f (k)的对应序号向量。下面是求序列f 1(k)、f 2(k)卷积和的实用函数dconv( ),它可实现序号向量的返回。
function [f,k]=dconv(f1,k1,f2,k2) %求卷积和:f(k)=f1(k)*f2(k)
f=conv(f1,f2)
k0=k1(1)+k2(1); %计算序列f 非零样值的起点位置k0 k3=length(k1)+length(k2)-2; %计算序列f 非零样值的宽度 k=k0:k0+k3; %确定序列f 非零样值的序号向量