实验2相关与褶积实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二相关和褶积
实验题目:
已知两个序列:X=(1,2,3,4,5,6,7);Y=(7,6,5,4)
做褶积与相关,并画出图像。
并根据计算结果理解相关和褶积的区别和联系。
实验内容:
1.做序列X、Y的褶积和相关
褶积的计算公式:X(n)=∑h(m)×x(n-m)
相关的计算公式:r xy(m)=∑y(n)×x(n+m)
(1)根据计算公式,褶积的源程序如下:
function C =convolution(A,B)
M=length(A);
N=length(B);
C=zeros(1,N+M-1);
for n=2:(M+N)
k1=min(n-1,M); %根据求和表达式,由1=<k<=M
k2=max(n-N,1); %1=<n-k<=N
for k=k2:1:k1; %确定k的取值范围
C(n-1)=C(n-1)+A(k)*B(n-k);
end
end
由于在matlab中数组下标是从1开始的,所以有效长度为2---11,为10=7+4-1(褶积长度为L=M+N-1);
运行程序,得褶积运算结果:
(2)根据计算公式,实现相关的源程序如下:function D =correlation(A,B)
M=length(A);
N=length(B);
D=zeros(1,M+N-1);
for n=(-N+1):M-1
s1=max(1,1-n);
s2=min(M-n,N);
for s=s1:s2
D(n+N)=D(n+N)+A(n+s)*B(s);
end
end
运行程序,得相关运算结果:
2.褶积和相关的对比分析
(1)用系统自带程序运算验证
1’褶积的源程序与系统自带conv函数对比:
输出数据对比:
>>convolution(A,B)
ans =
7 20 38 60 82 104 126 92 59 28
>>conv(A,B)
ans =
7 20 38 60 82 104 126 92 59 28
显然,输出数据是相等的,说明设计的褶积程序算法与系统自带的算法一致,不存在延迟。
两函数图像如图所示:
2’相关的源程序与系统自带xcorr函数对比:
输出数据对比
>>correlation(A,B)
ans =
4 13 28 50 72 94 116 106 84 49
>>xcorr(A,B)
ans =
Columns 1 through 10
0 0 0 4.0000 13.0000 28.0000 50.0000 72.0000 94.0000 116.0000
Columns 11 through 13
106.0000 84.0000 49.0000
观察输出数据可知,用xcorr函数作离散互相关运算时输出结果可能存在延迟,当x, y
是不等长向量时,短的向量会自动填0与长的对齐,运算结果是行向量还是列向量就与x一样,延迟量一般为长、短序列长度的差值。
两函数对比图如图,红线为相关源程序,黑线为系
统自带相关函数。
图中的系统自带相关函数延迟量为3.
(2)褶积和相关的振幅谱与相位谱研究
1’振幅谱
编写源程序如下:
N=10;
n=[1:10];
k=[1:10];
q(k)=D*exp(-j*2*pi/N).^(n'*k);% q(k)=C *exp(-j*2*pi/N).^(n'*k) a=abs(q);
plot(a,'k'),title('振幅谱'),grid on;
利用DFT实现离散褶积运算和离散相关运算,分析振幅谱。
运行程序得下图:
褶积和相关的振幅是相等的,实际上褶积和相关运算都是振幅谱相乘。
2’相位谱
编写源程序如下:
N=10;
n=[1:10];
k=[1:10];
q(k)=D*exp(-j*2*pi/N).^(n'*k);% q(k)=C *exp(-j*2*pi/N).^(n'*k) a=abs(q);
p=angle(q);
p=180/pi*p;
plot(p,'k'),title('相位谱'),grid on;
利用DFT实现离散褶积运算和离散相关运算,分析相关谱。
运行程序得下图:
与振幅谱不同,褶积和相关的相位谱是不同的,实际上褶积是相位谱相加,相关是相位谱相减。
实际上,褶积与相关都是一种线性滤波。
褶积是振幅谱相乘,相位谱相加,褶积运算满足交换律。
相关是振幅谱相乘,相位谱相减,相关不满足交换律。
附录相关和褶积的源程序
clear
clf
A=[1 2 3 4 5 6 7];
B=[7 6 5 4];
M=length(A);
N=length(B);
C=zeros(1,N+M-1);
for n=2:(M+N)
k1=min(n-1,M); %根据求和表达式,由1=<k<=M k2=max(n-N,1); %1=<n-k<=N
for k=k2:1:k1; %确定k的取值范围
C(n-1)=C(n-1)+A(k)*B(n-k);
end
end
M=length(A);
N=length(B);
D=zeros(1,M+N-1);
for n=(-N+1):M-1
s1=max(1,1-n);
s2=min(M-n,N);
for s=s1:s2
D(n+N)=D(n+N)+A(n+s)*B(s);
end
end
E=conv(A,B); %调用系统自带的conv函数对比
F=xcorr(A,B); %调用系统自带的xcorr函数对比figure(1),plot(C,'k'),title('褶积'),grid on; figure(2),plot(D,'k'),title('相关'),grid on;
figure(3),plot(E,'k'),title('自带褶积函数'),grid on; figure(4),plot(F,'k'),title('自带相关函数'),grid on;。