MATLAB离散卷积的实现_自己编写代码_实现两列数的卷积

一、实验目的

1.了解熟悉MATLAB中conv、filter函数的使用;

2.回忆卷积,深入了解conv原理,从差分方程和矩阵两个角度重构conv函数。

二、实验原理

卷积是两个变量在某范围内相乘后求和的结果。如果卷积的变量是序列和x[n]和h[n],则卷积的结果

 

其中星号*表示卷积。当时序n=0时,序列h[-i]是h[i]的时序i取反的结果;时序取反使得h[i]以纵轴为中心翻转180度,所以这种相乘后求和的计算法称为卷积和,简称卷积。另外,n是使h[-i]位移的量,不同的对应不同的卷积结果。

三、实验设计及操作

1、使用conv函数求卷积;

2、使用filter函数求卷积;

3、使用差分方程求卷积;

4、使用循环差分方程求卷积;

5、利用循环差分方程构造myconv1函数求卷积;

6、利用矩阵构造myconv2函数求卷积。

四、实验结果及分析

MATLAB离散卷积的实现_自己编写代码_实现两列数的卷积_第1张图片

 

除了由filter函数求解的y2外,其他结果一致,说明各段代码编写正确。

相比于其他结果的5个结果,fliter取的是前三个结果而非后三个,这是出于实际工程中需要实时低延时输入输出的需要而设计的。

五、实验总结和提升

了解了MATLAB中卷积的实现,为日后的其他信号处理打下基础。

六、源代码

1.	clear  
2.	clc  
3.	close all  
4.	y1=conv([1,2,3],[4,5,6]);  
5.	y2=filter([4,5,6],1,[1,2,3]);  
6.	  
7.	  
8.	x(1:8)=[0,0,1,2,3,0,0,0];  
9.	y3(1:5)=[0,0,0,0,0];  
10.	for n=3:7  
11.	    y3(n-2)=4*x(n)+5*x(n-1)+6*x(n-2);  
12.	end  
13.	  
14.	x=[0,0,0,4,5,6,0,0,0];  
15.	h=[1,2,3];  
16.	y4=zeros(1,5);  
17.	for n = 1:5  
18.	    for m = 1:3  
19.	    y4(n)= y4(n)+x(n+m)*h(4-m);  
20.	    end  
21.	end  
22.	  
23.	%%%%%%%%%%%%%%%%%%%%%  
24.	y5=myconv1([4,5,6],[1,2,3]);  
25.	y6=myconv2([4,5,6],[1,2,3]);  
26.	function y=myconv1(x,h)  
27.	    hl=length(h);  
28.	    xl=length(x);  
29.	    x=[zeros(1,hl),x,zeros(1,hl)];  
30.	    y=zeros(1,xl+hl-1);  
31.	    for n=1:xl+hl-1  
32.	        for m=1:hl  
33.	            y(n)=y(n)+x(n+m)*h(hl+1-m);  
34.	        end  
35.	    end  
36.	end  
37.	  
38.	function y=myconv2(x,h)  
39.	hL=length(h);  
40.	if size(x,2)==1,x=x';end  
41.	x=[zeros(1,hL-1),x,zeros(1,hL-1)];  
42.	  
43.	if size(h,2)==1,h=h';end  
44.	X=buffer(x,hL,hL-1,'nodelay');  
45.	h=flip(h);  
46.	y=h*X;  
47.	end 

你可能感兴趣的:(数字信号处理DSP,matlab,开发语言)