1.线性卷积
设X1为N1点的有限长序列,X2为N2点的有限长序列(0 < n < N2)
线性卷积y1(n)的长度为N2+N2-1
2.圆周卷积
设有限长序列x(n)和h(n)的长度分别为N1和N2,取N>=max(N1,N2),分别对x(n)和h(n)取N点的DFT,将结果取
N点的IDFT得到y(n)
3.圆周卷积与线性卷积之间的关系
当有限长序列x(n)和h(n)的长度分别为N1和N2,取N>=max(N1,N2),当N>=N1+N2-1,则线性卷积与圆周卷积相同。
1.子函数编写
`
function yc=circonv(x1,x2,N)
%功能 : 计算圆周卷积
%输入 : 需计算圆周卷积的序列x1,x2和圆周卷积的点数N
%输出 : 圆周卷积结果
%判断两个序列的长度是否小于N
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
x1 = [x1,zeros(1,N - length(x1))]; %填充序列x1使其长度为N1+N2-1
x2 = [x2,zeros(1,N - length(x2))]; %填充序列x2使其长度为N1+N2-1
n =0:1:N-1;
x2 = x2(mod(-n,N)+1); %生成序列x2((-n))N
H = zeros(N,N); %生成N * N 的零矩阵
for n = 1:1:N
H(n,:) = cirshiftd(x2,n-1,N); %该矩阵的k行为 x2(k-1-(n mod N))
end
yc = x1 * H'; %计算循环卷积
`
`
function y = cirshiftd(x,m,N)
%对于序列x直接实现圆周移位
%x:输入序列长度小于N
%m:移位量
%N:圆长
%y:移位后的序列
if length(x) > N
error('the 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);
`
‘
clear all;
n = 0:1:12;
m = 0:1:5;
N1 = length(n);
N2 = length(m);
xn = 0.8.^n; %生成xn
hn = ones(1,N2); %生成hn
yln = conv(xn,hn); %计算线性卷积
ycn = circonv(xn,hn,15); %计算圆周卷积
nyl = 0:1:length(yln)-1;
ny2 = 0:1:length(ycn)-1;
%图形显示时分割窗口命令,把一个窗口分成m行,n列,并指定第i个敞口为当前窗口
subplot(2,1,1);
stem(nyl,yln); %绘制散点图
ylabel('线性卷积'); %Y轴标签
axis([0,25,0,4]);
subplot(2,1,2);
stem(ny2,ycn);
ylabel('圆周卷积');
%x范围为0-16 y范围为0-4
axis([0,25,0,4]);
‘
验证程序中,固定DFT点数为15
ycn = circonv(xn,hn,15); %计算圆周卷积
改变序列xn的长度
当 n = 0:1:12 时 此时N < N1 + N2 -1 线性卷积与圆周卷积不相等。结果如下图所示。
当 n = 0:1:5 时,此时N > N1 + N2 -1 线性卷积与圆周卷积相等。结果如下图所示。
临界条件 N = N1+N2-1时线性卷积与圆周卷积相等,结果如下
通过上述结果,可以得出结论:
当DFT点数N满足 N>=N1+N2-1时,圆周卷积与线性卷积相等