线性卷积与圆周卷积

1.圆周卷积(circular convolution)

圆周卷积,也叫循环卷积,两个长度为N的有限场序列 x ( n ) x(n) x(n) h ( n ) h(n) h(n)的循环卷积定义为

即循环卷积相当于周期延拓后的序列 x ~ ( n ) \widetilde{x}(n) x (n) h ~ ( n ) \widetilde{h}(n) h (n)做周期卷积后再取主值区间,若x(n)和h(n)的离散傅里叶变换为 X ( K ) X(K) X(K) H ( K ) H(K) H(K),则有

时域中的循环卷积对应于其离散傅里叶变换的乘积,循环卷积的结果y(n)长度为N
关于圆周卷积的计算,可以看另一篇的图解计算

2.线性卷积(linear convolution)

通常所说的卷积就是指线性卷积,设x(n)、h(n)长度分别为M和N,则它们的线性卷积结果为

得到的y(n)长度为M+N-1,同样,根据卷积定理可以知道,时域卷积等于频域相乘

注意,现在只是频域DTFT相乘相等,而离散傅里叶变换相乘并不相等,DFT是在DTFT基础上再进行了频域采样,即对 ω \omega ω 离散化。
  要让线性卷积的时域结果与频域相乘的逆变换相等,首先容易想到的就是对H( ω \omega ω )和X( ω \omega ω)做相同的频域采样,也就是对x(n)、h(n)做相同点数的DFT,即让两序列在时域做圆周卷积,那么现在问题是,做多少点数的DFT能让圆周卷积等于线性卷积呢?
  
  线性卷积最常见,直接套用公式计算,这里就不图解。
  
结论:利用循环卷积计算线性卷积的条件为循环卷积长度 L ⩾ M + N − 1 L\geqslant M+N-1 LM+N1
利用循环卷积计算线性卷积的具体步骤为:

1. 将序列 x ( n ) x(n) x(n) h ( n ) h(n) h(n)补零延长,使其长度 L ⩾ N 1 = N + M − 1 L\geqslant N_1 = N+M-1 LN1=N+M1,若采用基-2 FFT,还应使 L L L为不小于 N 1 N_1 N1的2的最小整数次幂;
  
  2. 做 x ( n ) x(n) x(n) h ( n ) h(n) h(n)的长度为 L L L的FFT得到 X ( k ) X(k) X(k) H ( k ) H(k) H(k),并求它们的积 Y ( k ) = X ( k ) H ( k ) Y(k) = X(k)H(k) Y(k)=X(k)H(k);
  
  3. 求 Y ( k ) Y(k) Y(k)的iFFT并取前 N 1 N_1 N1点,获得线性卷积的结果 y ( n ) = I F F T [ Y ( k ) ] , 0 ⩽ n ⩽ N 1 y(n) = IFFT[Y(k)],0\leqslant n\leqslant N_1 y(n)=IFFT[Y(k)],0nN1

说的好像很简单的样子,那就用代码验证下

x1 = [1,7,8,9,5,4,6,3,2];
x2 = [5,8,9,6,3,4,8,2,1,7,5,6,7];
conv(x1,x2)
# 5  43  105  178  214  214  221  246  242  213  190  193  231  225  191  162  112  93  70  33 14
L = 13;
ifft(fft(x1,L).*fft(x2,L))
# 230   234   267   290   307   284   254   260   242   213   190   193   231

上面程序中x1的长度为9,x2的长度为13,用matlab的conv函数直接计算出时域线性卷积,然后我们再验证下频域相乘,改变L值使分别L=13、21、23看看,与conv的结果对比,可以验证,只有当L>=9+13 -1时才会得到与conv一样的结果。这里也记一下结论:

  • 当圆周卷积长度 L > = N + M − 1 时 L>=N + M - 1时 L>=N+M1,没有混叠,圆周卷积的前 N + M − 1 N + M - 1 N+M1个值为有效值,且与线性卷积相同
  • 当圆周卷积长度 L < N + M − 1 时 L<N + M - 1时 L<N+M1,产生混叠,圆周卷积的前 ( N + M − 1 ) − L (N+M-1) - L (N+M1)L个值有混叠,因此只有 ∣ L − ( ( N + M − 1 ) − L ) ∣ = ∣ 2 L − ( N + M − 1 ) ∣ |L - ((N+M-1) - L)| = |2L-(N+M−1)| L((N+M1)L)=∣2L(N+M1) 是有效值,

画一个简单示意图说明一下

  1. 为什么会产生混叠?
    根据圆周卷积的定义,是周期信号卷积后再取主值区间,如下图,蓝框为x(n)以圆周卷积点数L为周期延拓后的信号,绿框为卷积核,当 L > = N + M − 1 L>=N+M-1 L>=N+M1时,卷积核从左至右移动整过过程都不会与[-L, 0]、[L,2L]的周期接触,因此计算出来的结果就是与线性卷积结果相同的,没有混叠产生
    而当圆周卷积点数 L < N + M − 1 L<N+M-1 L<N+M1时,如第二行的图,卷积核会与[-L, 0]周期的信号接触,因此计算出来的值就是有混叠的
  2. 为什么混叠值只出现在前面,且后面没有?
    还是上面的解释,卷积核会与[-L, 0]周期的信号接触,因此计算出来的前面值是有混叠的,而圆周卷积限定了只计算L点的值,也就是卷积核只会从左往右移动L各点,因此不会与[L,2L]]周期的信号接触,也就是后面的值没混叠

在这里插入图片描述

那为什么要讲线性卷积转化为循环卷积呢,那是因为时域中的循环卷积对应于其离散傅里叶变换的乘积,在两个卷积项非常长且长度相差不大时,转换到频域利用FFT计算量会大大减小。
  当两个卷积项长度相差很大时,又该怎么办呢,这又引出了下一个问题,重叠相加法与重叠保留法

线性卷积圆周卷积都是信号处理中常用的运算,它们的定义和计算方法略有不同。 线性卷积:给定两个长度为 $N$ 的实数序列 $x$ 和 $y$,它们的线性卷积 $z$ 定义为: $$ z_n = \sum_{m=0}^{N-1} x_m y_{n-m} $$ 其中,$n = 0, 1, \cdots, 2N-2$。线性卷积通常用于时域信号处理。 计算线性卷积的一种常见方法是使用快速傅里叶变换(FFT)。具体而言,将序列 $x$ 和 $y$ 分别进行 $N$ 点 FFT,得到它们的频域表示 $X$ 和 $Y$,则它们的线性卷积 $z$ 可以通过将 $X$ 和 $Y$ 逐元素相乘,并进行 $N$ 点逆FFT 得到: $$ z = {\rm IFFT}(X \cdot Y) $$ 其中,${\rm IFFT}$ 表示逆傅里叶变换,$\cdot$ 表示逐元素相乘。 圆周卷积:给定两个长度为 $N$ 的复数序列 $x$ 和 $y$,它们的圆周卷积 $z$ 定义为: $$ z_n = \sum_{m=0}^{N-1} x_m y_{(n-m) \bmod N} $$ 其中,$\bmod$ 表示取模运算,$n = 0, 1, \cdots, N-1$。圆周卷积通常用于频域信号处理。 计算圆周卷积的一种常见方法是使用循环卷积定理。具体而言,将序列 $x$ 和 $y$ 分别进行 $N$ 点 DFT(离散傅里叶变换),得到它们的频域表示 $X$ 和 $Y$,则它们的圆周卷积 $z$ 可以通过将 $X$ 和 $Y$ 逐元素相乘,并进行 $N$ 点 IDFT(离散傅里叶逆变换)得到: $$ z = {\rm IDFT}(X \cdot Y) $$ 其中,${\rm IDFT}$ 表示离散傅里叶逆变换,$\cdot$ 表示逐元素相乘。需要注意的是,IDFT 的结果可能有复数部分,但是在实际应用中,通常只关注实数部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值