线性卷积、循环卷积与FFT

彼此的关系

关于线性卷积、循环卷积和FFT之间的关系,MATLAB的帮助文档写的非常清晰,如下所示,
线性卷积、循环卷积与FFT_第1张图片
此外,链接[话题讨论] [原创]一个开始:线性卷积与循环卷积 自己的理解也提出了一种理解思路,
线性卷积、循环卷积与FFT_第2张图片

循环卷积的计算

线性卷积、循环卷积与FFT_第3张图片
附上部分测试代码,

clc;clear all;close all;
x     = [2 1 2 1];
y     = [1 2 3];
xpad  = [x zeros(1,6-length(x))];
ypad  = [y zeros(1,6-length(y))];
ccirc = ifft(fft(xpad).*fft(ypad))
clin  = conv(x,y)

MATLAB提供了函数cconv来计算循环卷积,下面

clc;clear all;close all;
%----------------------------------------------------------
%比较循环卷积的直接实现与cconv函数的处理结果
a   = [1 2 3 4 5];
b   = [1 1];
N   = 4;
c   = conv(a,b);
if N<length(c)
    zeropadding = N-mod(length(c),N);
    d = [c zeros(1,zeropadding)];
    e = reshape(d,N,length(d)/N);
    f = sum(e,2)'
else
    f = c
end
g = cconv(a,b,N)

%----------------------------------------------------------
%cconv函数的循环卷积计算结果(指定长度)、默认计算结果、线性卷积计算结果
a = [2 1 2 1];
b = [1 2 3 4];
c = cconv(a,b,4)
d = cconv(a,b)
e = conv(a,b)

%----------------------------------------------------------
%cconv函数的循环卷积计算结果(指定长度)、线性卷积计算结果
a = [1 2 -1 1];
b = [1 1 2 1 2 2 1 1];
c = cconv(a,b,length(a)+length(b)-1)
d = conv(a,b)

%----------------------------------------------------------
%互相关处理
a = [1 2 2 1]+1i;
b = [1 3 4 1]-2*1i;
c = cconv(a,conj(fliplr(b)),length(a)+length(b)-1)
d = conv(a,conj(fliplr(b)))
e = xcorr(a,b)

你可能感兴趣的:(Matlab,信号处理)