线性卷积与圆周卷积的计算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
线性卷积与圆周卷积的计算
一、基本原理
1. 线性卷积
当系统输入序列为x(n),系统的单位冲击响应为h(n),输出序列为y (n ),则线性时不变系统输入、输出间的关系为:
Y (n )=h (n )*x (n )
2. 圆周卷积
设两个有限长序列1()x n 和2()x n ,均为N 点,其N 点的DFT 分别为1()X k 和2()X k ,如果312()()()X k X k X k =⋅,则
1
3120()[()()]()N N m x n x
m x n m R n -==-∑ 1
120()(())N N m x m x n m -==-∑
1()x n =○
N 2()x n 01n N ≤≤-
二、实验内容与要求
已知两个有限长序列:
()()2(1)3(2)4(3)5(4)x n n n n n n δδδδδ=+-+-+-+-
()()2(1)(2)2(3)h n n n n n δδδδ=+-+-+-
(1) 实验前,预先笔算好这两个序列的线性卷积及下列几种情况的圆周卷积 ①()x n ⑤()h n ②()x n ⑥()h n ③()x n ⑨()h n ④()x n ⑩()h n
(2)编制一个计算两个序列线性卷积的通用程序,计算()()x n h n *。
(3)编制一个计算圆周卷积的通用程序,计算上述4种情况下的两个序列的圆周卷积。
(4)上机调试并记录实验结果
(5)将实验结果和预先笔算的结果比较,验证其正确性。
三、实验过程
function yc=circonv(x1, x2, N)
if length(x1)>N
error('N必须大于等于x1的长度');
end
if length(x2)>N
error('N必须大于等于x2的长度');
end
x1=[x1, zeros(1,N-length(x1))];
x2=[x2, zeros(1,N-length(x2))];
n=[0:1:N-1];
x2=x2(mod(-n, N)+1);
H=zeros(N, N);
for n=1:1:N
H(n,:)=cirshiftd(x2, n-1, N);
end
yc=x1*H'; %计算圆周卷积
function y=cirshiftd(x, m, N)
if length(x)>N
error('x的长度必须小于N');
end
x=[x, zeros(1, N-length(x))];
n=[0:1:N-1];
y=x(mod(n-m,N)+1);
①x(n)⑤y(n)
clear all
xn=[1 2 3 4 5];
hn=[1 2 1 2];
N1=length(xn);
N2=length(hn);
y1n=conv(xn, hn);
ycn=circonv(xn, hn, 5);
ny1=[0:1:length(y1n)-1];
ny2=[0:1:length(ycn)-1];
subplot(2,1,1);
stem(ny1, y1n);
subplot(2,1,2);
stem(ny2, ycn);
②x(n)⑥y(n)
clear all;
N1=5;
N2=4;
xn=[1 2 3 4 5];
hn=[1 2 1 2];
yln=conv(xn,hn);
ycn=circonv(xn,hn,6);
ny1=[0:1:length(yln)-1]; ny2=[0:1:length(ycn)-1]; subplot(2,1,1);
stem(ny1,yln);
ylabel('线性卷积');
subplot(2,1,2);
stem(ny2,ycn);
ylabel('圆周卷积');
③x(n)⑨y(n)
clear all;
N1=5;
N2=4;
xn=[1 2 3 4 5];
hn=[1 2 1 2];
yln=conv(xn,hn);
ycn=circonv(xn,hn,9);
ny1=[0:1:length(yln)-1]; ny2=[0:1:length(ycn)-1]; subplot(2,1,1);
stem(ny1,yln);
ylabel('线性卷积');
subplot(2,1,2);
stem(ny2,ycn);
ylabel('圆周卷积');
④x(n)⑩y(n)
clear all;
N1=5;
N2=4;
xn=[1 2 3 4 5];
hn=[1 2 1 2];
yln=conv(xn,hn);
ycn=circonv(xn,hn,10); ny1=[0:1:length(yln)-1]; ny2=[0:1:length(ycn)-1]; subplot(2,1,1);
stem(ny1,yln);
ylabel('线性卷积');
subplot(2,1,2);
stem(ny2,ycn);
ylabel('圆周卷积');