循环卷积与线性卷积的实现matlab,线性卷积与循环卷积的计算
如果
则
N
上式称为循环卷积或圆周卷积
注: 为 序列的周期化序列; 为 的主值序列。
上机编程计算时, 可表示如下:
(3) 两个有限长序列的线性卷积
序列 为 点长,序列 为 点长, 为这两个序列的线性卷积,则 为
且线性卷积 的最大长 ,也就是说当 和 时 。
(4) 循环卷积与线性卷积的关系
序列 为 点长,序列 为 点长,若序列 和
进行N点的循环卷积,其结果是否等于该两序列的线性卷积,完全取决于循环卷积的长度:
当 时循环(圆周)卷积等于线性卷积,即
N
当 时,循环卷积等于两个序列的线性卷积加上相当于下式的时间混叠,即
3、 实验内容及要求
已知两个有限长序列
(1) 实验前,预先笔算好这两个序列的线性卷积及下列几种情况的循环卷积 ⑤ ⑥
⑨
⑩
(2) 编制一个计算两个序列线性卷积的通用程序,计算 。
(3) 编制一个计算循环卷积的通用程序,计算上述4种情况下两个序列 与 的循环卷积。
(4) 上机调试并打印或记录实验结果。
注:可在一个程序中用菜单形式实现上述两种卷积的计算。
(5) 将实验结果与预先笔算的结果比较,验证其正确性。
4.实验程序
的定义
function yc=circonv(x1,x2,N)
%realize circular convolution use direct method
%y=circonv(x1,x2,N)
%y:output sequences
%x1,x2:input sequences
%N:circulation length
if length(x1)>N
error('N must not be less than length of x1');
end
if length(x2)>N
error('N must not be less than length of x2');
end
%以上语句判断两个序列的长度是否小于N
x1=[x1,zeros(1,N-length(x1))]; %填充序列x1(n)使其长度为N1+N2-1(序列%h(n)的长度为N1,序列x(n)的长度为N2)
x2=[x2,zeros(1,N-length(x2))]; %填充序列x2(n)使其长度为N1+N2-1
n=[0:1:N-1];
x2=x2(mod(-n,N)+1); %生成序列x2((-n))N
H=zeros(N,N);
for n=1:1:N
H(n,:)=cirshiftd(x2,n-1,N); %该矩阵的k行为x2((k-1-n))N
end
yc=x1*H';
的定义
function y=cirshiftd(x,m,N)
%directly realize circular shift for sequence x
%y=cirshiftd(x,m,N);
%x:input sequence whose length is less than N
%m:how much to shift
%N:circular length
%y:output shifted sequence
if length(x)>N
error('length of x must be less than N');
end
x=[x,zeros(1,N-length(x))];
n=[0:1:N-1];
y=x(mod(n-m,N)+1);
x=[1:5];
h=[1,2,1,2];
subplot(3,1,1);
stem(x);
subplot(3,1,2);
stem(h);
y=circonv(x,h,5);
subplot(3,1,3);
stem(y);
图形 ⑤
⑥
⑨
(6) ⑩
更多推荐



所有评论(0)