附程序代码:x2=[1,2,1,0];h2=[1,-1]; y2=conv(x2,h2); N=length(y2);
stem(0:0.5:(N-1).*0.5,y2); %红体为相比间隔为1的函数修改的部分 axis([0 8 -1 1])
(5)完成了分段常数信号卷积积分的分析和计算后,你对y1(t)的近似计算方法有无新的认识?
可以由离散的卷积来近似的计算连续函数的卷积,但是要根据实际函数在0右边的积分的值,来确定离散函数向右偏移的格数,如可以取y1(t)的边界值先进行离散序列的卷积,如在用y2[t]来近似计算y2(t)时,由于y2(t)在0~1时,存在卷积积分的由0逐渐增长,到1时,存在着积分的变化,所以应将离散的图形向右平移一个单位。同时由于连续序列卷积后也是连续的可以将相邻的离散点相连。这样可以较快的计算出y1(t)的近似。
四、(**)非时限信号卷积积分的近似计算
近似计算若卷积积分y3(t)。若出现问题请分析出现问题的原因,并给出一种解决问题的方案;根据提出的方案完成近似计算卷积分的程序;
用近似方法计算y3(t)的代码及结果如下。 当区间长度为20时:
附程序代码:N=0.01; t=0:0.01:20; x=1*(t>=0); y=exp(-t).*(t>=0);
yt=conv(x,y); subplot(211); n=0:0.01:40; plot(n,N*yt); axis([0 20 0 2]); xlabel('时间(s)'); ylabel('近似值yt(t)'); subplot(212);
yt1=(1-exp(-t)).*(t>=0); plot(t,yt1); axis([0 inf 0 2]); xlabel('时间(s)'); ylabel('真实值yt(t)');
当区间长度为40时:
附程序代码:N=0.01; t=0:0.01:20; x=1*(t>=0); y=exp(-t).*(t>=0); yt=conv(x,y); subplot(211); n=0:0.01:40; plot(n,N*yt); axis([0 40 0 2]); xlabel('时间(s)');
ylabel('近似值yt(t)'); subplot(212);
yt1=(1-exp(-t)).*(t>=0); plot(t,yt1); axis([0 inf 0 2]); xlabel('时间(s)'); ylabel('真实值yt(t)');
出现这种情况的原因:因为conv函数无法计算一个无穷的卷积,题目中虽然是算了exp(-t)的卷积,但是实际取的是(0,20)这个区间内的值,在做卷积的计算过程中,使用matlab对t进行了赋值,在赋值以外的点,被认为时0,所以在t>=0&t<=20这个区间内是没有问题的,但是t一但大于20两者的卷积就会有缺失,计算值就不在准确,t>20的部分就相当于是错误的,没有任何意义。
解决方法:在绘制图形时,将绘制图形的坐标范围限定在t的取值范围之内,或绘制图形后去掉无效值。
五、(***)卷积函数conv函数选项的定义与应用研究
在新版MATLAB中,卷积函数conv提供了选项conv(A, B,’valid’ ),下面将研究conv(A, B,’valid’ )的定义及应用。
(1)读MATLAB提供的关于conv的Help,给出卷积函数conv(A, B,’valid’ )的定义。设计一些简单的实验,验证你给出的定义。你认为这样定义的卷积有何优缺点?
键入?help conv?可知matlab对于valid的定义:
C = CONV(A, B, SHAPE) returns a subsection of the convolution with size specified by SHAPE:
'valid' - returns only those parts of the convolution that are computed without the zero-padded edges. LENGTH(C)is MAX(LENGTH(A)-MAX(0,LENGTH(B)-1),0).
【只返回那些卷积计算无零填充的边缘部分】
接下来利用A=[1 2 3 4 5]和B=[1 2 3]对valid进行研究。
根据计算,A与B的卷积为[1,4,10,16,22,22,15]。用conv和conv-vaild分别计算的结果如下:
结论:由图像可得,在valid模式下,计算卷积只会计算A,B序列完全重合的部分,略去未完全重合的部分。
思考:与conv不同,valid 返回在卷积过程中,未使用边缘补 0 部分进行卷积计算,使得卷积出来的结果具有实际意义。但同时valid有一个显著缺点,即卷积运算时,只会将B翻转与A比较,而不会自动选择短的序列进行翻转,当B的长度大于A时,无法得出卷积结果。 附代码:A=[1 2 3 4 5]; B=[1 2 3 ]; C=conv(A,B);
C1=conv(A,B,'valid');
subplot(211)
stem((1:length(C))-1,C); axis([-1,10,0,30]); xlabel('conv(A,B))') c=length(C)
subplot(212)
stem((1:length(C1))-1,C1); axis([-1,10,0,30]);
xlabel('conv(A,B,‘valid’)') c1=length(C1)
附:valid的原理图解:
54.543.532.521.510.50-4-3-2-1012345654.543.532.521.510.50-4-3-2-10123456
图(1) 图(2)
54.543.532.521.510.50-4-3-2-1012345654.543.532.521.510.50-4-3-2-10123456
图(3) 图(4)
54.543.532.521.510.50-4-3-2-1012345654.543.532.521.510.50-4-3-2-10123456
图(5) 图(6)

