matlab计算卷积
例1
x1(n)={2,1,1,2} x2(n)={1,-1,-1,1}
两种方法
1)直接用时域计算卷积
2)x1(n)={2,1,1,2} x2(n)={1,-1,-1,1}分别dft到频域X1k和X2k,相乘后求idft,注意序列长度
clc;clear all;close all;x1n=[2,1,1,2];x2n=[1,-1,-1,1];yn=conv(x1n,x2n)M1=length(x1n);M2=length(x2n);N=M1+M2-1;X1k=fft(x1n,N);X2k=fft(x2n,N);Yconvk=X1k.*X2k;yconvn=ifft(Yconvk,N)
输出
yn =
2 -1 -22 -2 -12
yconvn =
2.0000 -1.0000 -2.0000 2.0000 -2.0000 -1.0000 2.0000
两种结果一样
例2
h(n)=R6(n),x(n)=n*R8(n)
计算8点循环卷积,和时域卷积
并且观察之间的关系
clc;clear all;close all;hn=ones(1,6);xn=[0,1,2,3,4,5,6,7];H8k=fft(hn,8);%计算8点dftX8k=fft(xn,8);%计算8点dftYconv8k=H8k.*X8k;yconv8k=ifft(Yconv8k,8)yn=conv(hn,xn)
输出结果
yconv8k =
25 23 21 19 17 15 21 27
yn =
0136 10 | 15 21 27 25 22 18 137
在8点循环卷积中会发生序列的重叠