循环卷积(Circular Convolutions)

最近看论文发现了一个叫循环卷积的东西,这里学习并记录一下,方便以后查阅。

循环卷积(Circular Convolutions)

  • [循环卷积(Circular Convolutions)](#循环卷积(Circular Convolutions))
    • [1. 什么是循环卷积](#1. 什么是循环卷积)
    • [2. 数学定义](#2. 数学定义)
    • [3. 循环卷积与线性卷积的区别](#3. 循环卷积与线性卷积的区别)
    • [4. 循环卷积的计算方法](#4. 循环卷积的计算方法)
      • [方法 1:直接时域计算](#方法 1:直接时域计算)
      • [方法 2:使用快速傅里叶变换(FFT)](#方法 2:使用快速傅里叶变换(FFT))
      • [方法 3:矩阵形式](#方法 3:矩阵形式)
    • [5. 实际应用](#5. 实际应用)
    • [6. 注意事项](#6. 注意事项)
    • [7. 总结](#7. 总结)
  • 时域的循环卷积等价于频域的点乘
    • [步骤 1:定义循环卷积和 DFT](#步骤 1:定义循环卷积和 DFT)
    • [步骤 2:将循环卷积代入 DFT](#步骤 2:将循环卷积代入 DFT)
    • [步骤 3:改变求和顺序](#步骤 3:改变求和顺序)
    • [步骤 4:变量替换](#步骤 4:变量替换)
    • [步骤 5:识别 DFT](#步骤 5:识别 DFT)
    • [步骤 6:结论](#步骤 6:结论)
  • 卷积(Convolution)
    • [1. 什么是卷积](#1. 什么是卷积)
    • [2. 卷积的数学定义](#2. 卷积的数学定义)
      • [2.1 连续卷积](#2.1 连续卷积)
      • [2.2 离散卷积(线性卷积)](#2.2 离散卷积(线性卷积))
    • [3. 卷积的直观理解](#3. 卷积的直观理解)
    • [4. 卷积的物理意义](#4. 卷积的物理意义)
    • [5. 卷积的性质](#5. 卷积的性质)
    • [6. 卷积的计算方法](#6. 卷积的计算方法)
      • [6.1 时域直接计算](#6.1 时域直接计算)
      • [6.2 频域计算(使用 FFT)](#6.2 频域计算(使用 FFT))
      • [6.3 滑动窗口法](#6.3 滑动窗口法)
    • [7. 卷积的实际应用](#7. 卷积的实际应用)
    • [8. 总结](#8. 总结)
  • 参考资料

循环卷积(Circular Convolutions)

1. 什么是循环卷积

循环卷积(Circular Convolution)是信号处理和数学中的一种运算,专门用于处理周期性有限长度 的离散信号。与普通的线性卷积(Linear Convolution)不同,循环卷积假设输入信号是周期性的,即信号在有限长度后会重复。这种假设使得循环卷积在某些场景下(如数字信号处理、图像处理和快速傅里叶变换)非常有用。

循环卷积的输出长度与输入信号的长度相同,通常用于长度为 N N N 的离散信号。它的核心思想是将信号"环绕"起来,模拟一个循环的结构(可以想象信号的首尾连接成一个圆环)。

2. 数学定义

假设有两个长度为 N N N 的离散信号 x [ n ] x[n] x[n] 和 h [ n ] h[n] h[n],它们的循环卷积定义为:

y [ n ] = ( x ⊛ h ) [ n ] = ∑ m = 0 N − 1 x [ m ] h [ ( n − m ) m o d    N ] y[n] = (x \circledast h)[n] = \sum_{m=0}^{N-1} x[m] h[(n - m) \mod N] y[n]=(x⊛h)[n]=m=0∑N−1x[m]h[(n−m)modN]

其中:

  • ⊛ \circledast ⊛ 表示循环卷积运算。
  • n = 0 , 1 , ... , N − 1 n = 0, 1, \dots, N-1 n=0,1,...,N−1 是输出信号的索引。
  • ( n − m ) m o d    N (n - m) \mod N (n−m)modN 确保索引是周期性的,即如果索引超出 [ 0 , N − 1 ] [0, N-1] [0,N−1],它会"绕回"到信号的开头。

关键点

  • 模运算 :模运算 m o d    N \mod N modN 是循环卷积的核心,它体现了信号的周期性。比如,如果 n − m = − 1 n - m = -1 n−m=−1,则 ( − 1 ) m o d    N = N − 1 (-1) \mod N = N-1 (−1)modN=N−1,相当于从信号的末尾绕回到开头。
  • 长度一致 :输入信号 x [ n ] x[n] x[n] 和 h [ n ] h[n] h[n] 必须长度相同(都为 N N N),输出 y [ n ] y[n] y[n] 的长度也是 N N N。
  • 周期性假设 :循环卷积假设 x [ n ] x[n] x[n] 和 h [ n ] h[n] h[n] 是周期为 N N N 的信号,即 x [ n + N ] = x [ n ] x[n + N] = x[n] x[n+N]=x[n]。

3. 循环卷积与线性卷积的区别

要理解循环卷积,我们需要先对比一下线性卷积

线性卷积

线性卷积是两个信号的"滑动叠加",没有周期性假设。假设 x [ n ] x[n] x[n] 长度为 M M M, h [ n ] h[n] h[n] 长度为 L L L,线性卷积的输出长度为 M + L − 1 M + L - 1 M+L−1,公式为:

y [ n ] = ( x ∗ h ) [ n ] = ∑ m x [ m ] h [ n − m ] y[n] = (x * h)[n] = \sum_{m} x[m] h[n - m] y[n]=(x∗h)[n]=m∑x[m]h[n−m]

其中,求和范围取决于信号的有效索引(通常需要补零来处理边界)。

循环卷积与线性卷积的差异

  1. 周期性
    • 循环卷积假设信号是周期的,索引超出范围会绕回。
    • 线性卷积不假设周期性,信号在边界外通常补零。
  2. 输出长度
    • 循环卷积的输出长度等于输入长度 N N N。
    • 线性卷积的输出长度为 M + L − 1 M + L - 1 M+L−1。
  3. 边界处理
    • 循环卷积通过模运算处理边界,形成"环状"效果。
    • 线性卷积在边界外补零,导致输出更长。
  4. 计算场景
    • 循环卷积常用于周期信号或通过快速傅里叶变换(FFT)实现的场景。
    • 线性卷积更适合非周期信号或直接时域计算。

特殊情况:循环卷积与线性卷积的关系

如果对两个长度为 N N N 的信号进行循环卷积,但通过补零使信号长度足够长(例如,补零到 2 N − 1 2N - 1 2N−1),可以让循环卷积的输出等价于线性卷积。这是因为补零避免了周期性带来的"混叠"效应。

4. 循环卷积的计算方法

循环卷积可以通过以下几种方式计算:

方法 1:直接时域计算

根据定义公式,直接计算:

y [ n ] = ∑ m = 0 N − 1 x [ m ] h [ ( n − m ) m o d    N ] y[n] = \sum_{m=0}^{N-1} x[m] h[(n - m) \mod N] y[n]=m=0∑N−1x[m]h[(n−m)modN]

步骤

  1. 对于每个 n = 0 , 1 , ... , N − 1 n = 0, 1, \dots, N-1 n=0,1,...,N−1,计算所有 m = 0 , 1 , ... , N − 1 m = 0, 1, \dots, N-1 m=0,1,...,N−1 的贡献。
  2. 使用模运算确定 h h h 的索引。
  3. 累加结果。

缺点 :计算复杂度为 O ( N 2 ) O(N^2) O(N2),对长信号效率较低。

示例

假设 x [ n ] = [ 1 , 2 , 3 , 4 ] x[n] = [1, 2, 3, 4] x[n]=[1,2,3,4], h [ n ] = [ 1 , 0 , 0 , 0 ] h[n] = [1, 0, 0, 0] h[n]=[1,0,0,0], N = 4 N = 4 N=4。

计算 y [ 0 ] y[0] y[0]:

y [ 0 ] = ∑ m = 0 3 x [ m ] h [ ( 0 − m ) m o d    4 ] = x [ 0 ] h [ 0 ] + x [ 1 ] h [ − 1 m o d    4 ] + x [ 2 ] h [ − 2 m o d    4 ] + x [ 3 ] h [ − 3 m o d    4 ] = 1 ⋅ 1 + 2 ⋅ 0 + 3 ⋅ 0 + 4 ⋅ 0 = 1 y[0] = \sum_{m=0}^{3} x[m] h[(0 - m) \mod 4] \\ = x[0]h[0] + x[1]h[-1 \mod 4] + x[2]h[-2 \mod 4] + x[3]h[-3 \mod 4] \\ = 1 \cdot 1 + 2 \cdot 0 + 3 \cdot 0 + 4 \cdot 0 = 1 y[0]=m=0∑3x[m]h[(0−m)mod4]=x[0]h[0]+x[1]h[−1mod4]+x[2]h[−2mod4]+x[3]h[−3mod4]=1⋅1+2⋅0+3⋅0+4⋅0=1

类似地计算 y [ 1 ] , y [ 2 ] , y [ 3 ] y[1], y[2], y[3] y[1],y[2],y[3],得到 y [ n ] = [ 1 , 2 , 3 , 4 ] y[n] = [1, 2, 3, 4] y[n]=[1,2,3,4]。

方法 2:使用快速傅里叶变换(FFT)

循环卷积可以通过频域高效计算,利用卷积定理

  • 时域的循环卷积等价于频域的点乘。
  • 具体步骤:
    1. 对 x [ n ] x[n] x[n] 和 h [ n ] h[n] h[n] 进行 N N N 点 DFT(离散傅里叶变换),得到 X [ k ] X[k] X[k] 和 H [ k ] H[k] H[k]。
    2. 计算频域点乘: Y [ k ] = X [ k ] ⋅ H [ k ] Y[k] = X[k] \cdot H[k] Y[k]=X[k]⋅H[k]。
    3. 对 Y [ k ] Y[k] Y[k] 进行 IDFT(逆离散傅里叶变换),得到时域的 y [ n ] y[n] y[n]。

公式
y [ n ] = IDFT ( DFT ( x [ n ] ) ⋅ DFT ( h [ n ] ) ) y[n] = \text{IDFT}(\text{DFT}(x[n]) \cdot \text{DFT}(h[n])) y[n]=IDFT(DFT(x[n])⋅DFT(h[n]))

优点 :使用 FFT,计算复杂度降为 O ( N log ⁡ N ) O(N \log N) O(NlogN),适合长信号。

方法 3:矩阵形式

循环卷积可以用矩阵表示, h [ n ] h[n] h[n] 形成一个循环矩阵。例如,对于 N = 3 N = 3 N=3, h [ n ] = [ h 0 , h 1 , h 2 ] h[n] = [h_0, h_1, h_2] h[n]=[h0,h1,h2],矩阵为:

H = [ h 0 h 2 h 1 h 1 h 0 h 2 h 2 h 1 h 0 ] H = \begin{bmatrix} h_0 & h_2 & h_1 \\ h_1 & h_0 & h_2 \\ h_2 & h_1 & h_0 \end{bmatrix} H= h0h1h2h2h0h1h1h2h0

则:
y = H ⋅ x y = H \cdot x y=H⋅x

这种方法直观,但计算复杂度仍为 O ( N 2 ) O(N^2) O(N2),实际中较少使用。

5. 实际应用

循环卷积在多个领域有广泛应用,尤其是在数字信号处理(DSP)和相关技术中:

  1. 数字滤波
    • 循环卷积用于实现周期信号的滤波。例如,FIR滤波器可以通过循环卷积实现。
  2. 快速卷积
    • 使用 FFT 实现循环卷积可以加速线性卷积的计算(通过补零)。
  3. 图像处理
    • 在图像处理中,循环卷积用于周期性边界条件的滤波操作,如平滑或边缘检测。
  4. 通信系统
    • 在 OFDM(正交频分复用)系统中,循环卷积用于处理循环前缀,消除符号间干扰。
  5. 音频信号处理
    • 循环卷积用于实现混响、均衡器等效果。
  6. 周期性信号分析
    • 循环卷积适合分析周期性信号,如在周期图谱分析中。

6. 注意事项

  • 补零问题 :如果需要模拟线性卷积,必须补零到至少 M + L − 1 M + L - 1 M+L−1,否则循环卷积会引入混叠。
  • 信号长度:输入信号长度必须一致,否则需要截断或补零对齐。
  • 数值精度:使用 FFT 计算时,浮点运算可能引入微小误差。

7. 总结

循环卷积是一种针对周期性离散信号的卷积运算,通过模运算实现信号的"环绕"效果。它的核心特点是输出长度与输入相同,计算可以通过时域直接求和或频域 FFT 高效实现。与线性卷积相比,循环卷积更适合周期性信号处理,广泛应用于数字信号处理、图像处理和通信系统等领域。

时域的循环卷积等价于频域的点乘

通过离散傅里叶变换(DFT)来计算循环卷积,并证明了卷积定理 在循环卷积中的应用:即时域的循环卷积等价于频域的点乘

步骤 1:定义循环卷积和 DFT

首先,循环卷积 y [ n ] y[n] y[n] 定义为:

y [ n ] = ( x ⊛ h ) [ n ] = ∑ m = 0 N − 1 x [ m ] h [ ( n − m ) m o d    N ] y[n] = (x \circledast h)[n] = \sum_{m=0}^{N-1} x[m] h[(n - m) \mod N] y[n]=(x⊛h)[n]=m=0∑N−1x[m]h[(n−m)modN]

其中 ( n − m ) m o d    N (n - m) \mod N (n−m)modN 体现了循环卷积的周期性。

DFT 的定义为:对于长度 N N N 的信号 y [ n ] y[n] y[n],其 DFT Y [ k ] Y[k] Y[k] 为:

Y [ k ] = ∑ n = 0 N − 1 y [ n ] ⋅ e − i 2 π k n / N , k = 0 , 1 , ... , N − 1 Y[k] = \sum_{n=0}^{N-1} y[n] \cdot e^{-i 2\pi kn / N}, \quad k = 0, 1, \dots, N-1 Y[k]=n=0∑N−1y[n]⋅e−i2πkn/N,k=0,1,...,N−1

目标是计算 Y [ k ] Y[k] Y[k],即 y [ n ] y[n] y[n] 的 DFT。

步骤 2:将循环卷积代入 DFT

将 y [ n ] y[n] y[n] 的表达式代入 DFT 公式:

Y [ k ] = ∑ n = 0 N − 1 y [ n ] ⋅ e − i 2 π k n / N Y[k] = \sum_{n=0}^{N-1} y[n] \cdot e^{-i 2\pi kn / N} Y[k]=n=0∑N−1y[n]⋅e−i2πkn/N

Y [ k ] = ∑ n = 0 N − 1 ( ∑ m = 0 N − 1 x [ m ] h [ ( n − m ) m o d    N ] ) ⋅ e − i 2 π k n / N Y[k] = \sum_{n=0}^{N-1} \left( \sum_{m=0}^{N-1} x[m] h[(n - m) \mod N] \right) \cdot e^{-i 2\pi kn / N} Y[k]=n=0∑N−1(m=0∑N−1x[m]h[(n−m)modN])⋅e−i2πkn/N

这个公式直接将循环卷积的定义代入了 DFT,表示 y [ n ] y[n] y[n] 是 x [ m ] x[m] x[m] 和 h [ ( n − m ) m o d    N ] h[(n - m) \mod N] h[(n−m)modN] 的加权和。

步骤 3:改变求和顺序

由于求和是线性的,可以交换 n n n 和 m m m 的求和顺序:

Y [ k ] = ∑ m = 0 N − 1 x [ m ] ∑ n = 0 N − 1 h [ ( n − m ) m o d    N ] ⋅ e − i 2 π k n / N Y[k] = \sum_{m=0}^{N-1} x[m] \sum_{n=0}^{N-1} h[(n - m) \mod N] \cdot e^{-i 2\pi kn / N} Y[k]=m=0∑N−1x[m]n=0∑N−1h[(n−m)modN]⋅e−i2πkn/N

这里, x [ m ] x[m] x[m] 不依赖于 n n n,所以可以提到 ∑ n \sum_{n} ∑n 的外面。公式变成了一个双重求和:外层对 m m m 求和,内层对 n n n 求和。

步骤 4:变量替换

为了简化内层求和,引入变量替换 r = ( n − m ) m o d    N r = (n - m) \mod N r=(n−m)modN。这意味着:

  • 当 n = 0 , 1 , ... , N − 1 n = 0, 1, \dots, N-1 n=0,1,...,N−1,对于固定的 m m m, r = ( n − m ) m o d    N r = (n - m) \mod N r=(n−m)modN 也会遍历 0 , 1 , ... , N − 1 0, 1, \dots, N-1 0,1,...,N−1。
  • 同时, n = ( r + m ) m o d    N n = (r + m) \mod N n=(r+m)modN。

将 n n n 用 r r r 表示后,内层求和变为:

∑ n = 0 N − 1 h [ ( n − m ) m o d    N ] ⋅ e − i 2 π k n / N \sum_{n=0}^{N-1} h[(n - m) \mod N] \cdot e^{-i 2\pi kn / N} n=0∑N−1h[(n−m)modN]⋅e−i2πkn/N

注意到 ( n − m ) m o d    N = r (n - m) \mod N = r (n−m)modN=r,并且 n = ( r + m ) m o d    N n = (r + m) \mod N n=(r+m)modN。代入 n = r + m n = r + m n=r+m(这里为了简化,我们考虑模运算的周期性,实际计算中 r r r 的范围已经覆盖了所有可能值),指数项变为:

e − i 2 π k ( r + m ) / N = e − i 2 π k r / N ⋅ e − i 2 π k m / N e^{-i 2\pi k (r + m) / N} = e^{-i 2\pi kr / N} \cdot e^{-i 2\pi km / N} e−i2πk(r+m)/N=e−i2πkr/N⋅e−i2πkm/N

因此,公式变为:

Y [ k ] = ∑ m = 0 N − 1 x [ m ] ⋅ e − i 2 π k m / N ∑ r = 0 N − 1 h [ r ] ⋅ e − i 2 π k r / N Y[k] = \sum_{m=0}^{N-1} x[m] \cdot e^{-i 2\pi km / N} \sum_{r=0}^{N-1} h[r] \cdot e^{-i 2\pi kr / N} Y[k]=m=0∑N−1x[m]⋅e−i2πkm/Nr=0∑N−1h[r]⋅e−i2πkr/N

步骤 5:识别 DFT

观察到:

  • 内层求和 ∑ r = 0 N − 1 h [ r ] ⋅ e − i 2 π k r / N \sum_{r=0}^{N-1} h[r] \cdot e^{-i 2\pi kr / N} ∑r=0N−1h[r]⋅e−i2πkr/N 正是 h [ n ] h[n] h[n] 的 DFT,即 H [ k ] H[k] H[k]。
  • 外层求和 ∑ m = 0 N − 1 x [ m ] ⋅ e − i 2 π k m / N \sum_{m=0}^{N-1} x[m] \cdot e^{-i 2\pi km / N} ∑m=0N−1x[m]⋅e−i2πkm/N 正是 x [ n ] x[n] x[n] 的 DFT,即 X [ k ] X[k] X[k]。

因此:

Y [ k ] = ( ∑ m = 0 N − 1 x [ m ] ⋅ e − i 2 π k m / N ) ⋅ ( ∑ r = 0 N − 1 h [ r ] ⋅ e − i 2 π k r / N ) Y[k] = \left( \sum_{m=0}^{N-1} x[m] \cdot e^{-i 2\pi km / N} \right) \cdot \left( \sum_{r=0}^{N-1} h[r] \cdot e^{-i 2\pi kr / N} \right) Y[k]=(m=0∑N−1x[m]⋅e−i2πkm/N)⋅(r=0∑N−1h[r]⋅e−i2πkr/N)

Y [ k ] = X [ k ] ⋅ H [ k ] Y[k] = X[k] \cdot H[k] Y[k]=X[k]⋅H[k]

步骤 6:结论

通过上述推导,我们证明了:

Y [ k ] = X [ k ] ⋅ H [ k ] Y[k] = X[k] \cdot H[k] Y[k]=X[k]⋅H[k]

即,循环卷积 y [ n ] = ( x ⊛ h ) [ n ] y[n] = (x \circledast h)[n] y[n]=(x⊛h)[n] 的 DFT 是 X [ k ] X[k] X[k] 和 H [ k ] H[k] H[k] 的逐点乘积。这正是卷积定理在循环卷积中的体现。

卷积(Convolution)

1. 什么是卷积

卷积是一种数学运算,用于描述两个函数(或信号)之间的"混合"或"叠加"效应。在信号处理、图像处理、概率论等领域,卷积是非常核心的操作。它的本质是通过一个函数(通常称为"核"或"滤波器")对另一个函数进行加权平均,生成一个新的函数

卷积用极简的数学形式漂亮的描述了一个动态过程。

卷积有两种主要形式:

  • 连续卷积:用于连续时间信号(如模拟信号)。
  • 离散卷积:用于离散时间信号(如数字信号)。

此外,根据信号的周期性假设,还分为:

  • 线性卷积:不假设信号周期性,边界外补零。
  • 循环卷积:假设信号周期性,索引超出范围会"环绕"。

2. 卷积的数学定义

2.1 连续卷积

对于两个连续函数 f ( t ) f(t) f(t) 和 g ( t ) g(t) g(t),它们的卷积定义为:

( f ∗ g ) ( t ) = ∫ − ∞ ∞ f ( τ ) g ( t − τ ) d τ (f * g)(t) = \int_{-\infty}^{\infty} f(\tau) g(t - \tau) d\tau (f∗g)(t)=∫−∞∞f(τ)g(t−τ)dτ

其中:

  • ∗ * ∗ 表示卷积运算。
  • τ \tau τ 是积分变量,表示时间偏移。
  • g ( t − τ ) g(t - \tau) g(t−τ) 是 g ( t ) g(t) g(t) 的时间反转和位移版本。

2.2 离散卷积(线性卷积)

对于两个离散信号 x [ n ] x[n] x[n] 和 h [ n ] h[n] h[n],它们的线性卷积定义为:

y [ n ] = ( x ∗ h ) [ n ] = ∑ m = − ∞ ∞ x [ m ] h [ n − m ] y[n] = (x * h)[n] = \sum_{m=-\infty}^{\infty} x[m] h[n - m] y[n]=(x∗h)[n]=m=−∞∑∞x[m]h[n−m]

在实际中,信号通常是有限长度的:

  • 假设 x [ n ] x[n] x[n] 长度为 M M M, h [ n ] h[n] h[n] 长度为 L L L,则:
    • x [ n ] x[n] x[n] 在 n = 0 , 1 , ... , M − 1 n = 0, 1, \dots, M-1 n=0,1,...,M−1 有值,其余为 0。
    • h [ n ] h[n] h[n] 在 n = 0 , 1 , ... , L − 1 n = 0, 1, \dots, L-1 n=0,1,...,L−1 有值,其余为 0。
  • 此时,求和范围可以简化为有效部分:
    y [ n ] = ∑ m = 0 M − 1 x [ m ] h [ n − m ] y[n] = \sum_{m=0}^{M-1} x[m] h[n - m] y[n]=m=0∑M−1x[m]h[n−m]
  • 输出 y [ n ] y[n] y[n] 的长度为 M + L − 1 M + L - 1 M+L−1,因为 n − m n - m n−m 的有效范围使得 n n n 从 0 到 M + L − 2 M + L - 2 M+L−2。

3. 卷积的直观理解

卷积的计算过程可以看作一种"滑动窗口"操作

  1. 反转 :将一个信号(例如 h [ n ] h[n] h[n])进行时间反转,得到 h [ − m ] h[-m] h[−m]。
  2. 位移 :将反转后的信号 h [ − m ] h[-m] h[−m] 滑动到位置 n n n,变成 h [ n − m ] h[n - m] h[n−m]。
  3. 乘积并求和 :在每个位置 n n n,将 x [ m ] x[m] x[m] 和 h [ n − m ] h[n - m] h[n−m] 逐点相乘,然后对所有 m m m 求和,得到 y [ n ] y[n] y[n]。

形象化理解

  • 想象 x [ n ] x[n] x[n] 是一个输入信号, h [ n ] h[n] h[n] 是一个"滤波器"或"系统响应"。
  • 卷积的过程是:用 h [ n ] h[n] h[n] 的反转版本去"扫描" x [ n ] x[n] x[n],在每个位置计算加权和,生成输出信号 y [ n ] y[n] y[n]。

示例

假设 x [ n ] = [ 1 , 2 , 3 ] x[n] = [1, 2, 3] x[n]=[1,2,3], h [ n ] = [ 1 , 1 ] h[n] = [1, 1] h[n]=[1,1],我们计算线性卷积:

  • x [ n ] x[n] x[n] 长度 M = 3 M = 3 M=3, h [ n ] h[n] h[n] 长度 L = 2 L = 2 L=2。
  • 输出长度为 M + L − 1 = 4 M + L - 1 = 4 M+L−1=4。

计算 y [ n ] y[n] y[n]:
y [ n ] = ∑ m = 0 2 x [ m ] h [ n − m ] y[n] = \sum_{m=0}^{2} x[m] h[n - m] y[n]=m=0∑2x[m]h[n−m]

  • n = 0 n = 0 n=0:
    y [ 0 ] = x [ 0 ] h [ 0 ] + x [ 1 ] h [ − 1 ] + x [ 2 ] h [ − 2 ] = 1 ⋅ 1 + 2 ⋅ 0 + 3 ⋅ 0 = 1 y[0] = x[0]h[0] + x[1]h[-1] + x[2]h[-2] = 1 \cdot 1 + 2 \cdot 0 + 3 \cdot 0 = 1 y[0]=x[0]h[0]+x[1]h[−1]+x[2]h[−2]=1⋅1+2⋅0+3⋅0=1
  • n = 1 n = 1 n=1:
    y [ 1 ] = x [ 0 ] h [ 1 ] + x [ 1 ] h [ 0 ] + x [ 2 ] h [ − 1 ] = 1 ⋅ 1 + 2 ⋅ 1 + 3 ⋅ 0 = 1 + 2 = 3 y[1] = x[0]h[1] + x[1]h[0] + x[2]h[-1] = 1 \cdot 1 + 2 \cdot 1 + 3 \cdot 0 = 1 + 2 = 3 y[1]=x[0]h[1]+x[1]h[0]+x[2]h[−1]=1⋅1+2⋅1+3⋅0=1+2=3
  • n = 2 n = 2 n=2:
    y [ 2 ] = x [ 0 ] h [ 2 ] + x [ 1 ] h [ 1 ] + x [ 2 ] h [ 0 ] = 1 ⋅ 0 + 2 ⋅ 1 + 3 ⋅ 1 = 0 + 2 + 3 = 5 y[2] = x[0]h[2] + x[1]h[1] + x[2]h[0] = 1 \cdot 0 + 2 \cdot 1 + 3 \cdot 1 = 0 + 2 + 3 = 5 y[2]=x[0]h[2]+x[1]h[1]+x[2]h[0]=1⋅0+2⋅1+3⋅1=0+2+3=5
  • n = 3 n = 3 n=3:
    y [ 3 ] = x [ 0 ] h [ 3 ] + x [ 1 ] h [ 2 ] + x [ 2 ] h [ 1 ] = 1 ⋅ 0 + 2 ⋅ 0 + 3 ⋅ 1 = 0 + 0 + 3 = 3 y[3] = x[0]h[3] + x[1]h[2] + x[2]h[1] = 1 \cdot 0 + 2 \cdot 0 + 3 \cdot 1 = 0 + 0 + 3 = 3 y[3]=x[0]h[3]+x[1]h[2]+x[2]h[1]=1⋅0+2⋅0+3⋅1=0+0+3=3

所以, y [ n ] = [ 1 , 3 , 5 , 3 ] y[n] = [1, 3, 5, 3] y[n]=[1,3,5,3]。

4. 卷积的物理意义

卷积在物理和工程中有重要的意义:

  1. 系统响应

    • 在线性时不变(LTI)系统中,输入信号 x [ n ] x[n] x[n] 通过系统 h [ n ] h[n] h[n](系统的冲激响应)生成输出 y [ n ] y[n] y[n]。
    • 卷积描述了输入如何被系统"过滤"或"变换"。
    • 例如:音频信号通过扬声器,输入信号 x [ n ] x[n] x[n] 和扬声器的冲激响应 h [ n ] h[n] h[n] 卷积后得到输出。
  2. 加权平均

    • 卷积可以看作一种加权平均, h [ n ] h[n] h[n] 决定了每个输入点的权重。
    • 例如:平滑滤波器(如均值滤波器)通过卷积去除信号中的噪声。
  3. 信号混合

    • 卷积描述了两个信号的"叠加"效应,例如在概率论中,两个独立随机变量的概率密度函数的卷积给出了和的概率密度。

5. 卷积的性质

卷积有以下重要性质:

  1. 交换律
    f ∗ g = g ∗ f f * g = g * f f∗g=g∗f

    即 ( x ∗ h ) [ n ] = ( h ∗ x ) [ n ] (x * h)[n] = (h * x)[n] (x∗h)[n]=(h∗x)[n]。这意味着 h [ n − m ] h[n - m] h[n−m] 可以看作 x [ n − m ] x[n - m] x[n−m]。

  2. 结合律
    ( f ∗ g ) ∗ h = f ∗ ( g ∗ h ) (f * g) * h = f * (g * h) (f∗g)∗h=f∗(g∗h)

    卷积可以按任意顺序分组计算。

  3. 分配律
    f ∗ ( g + h ) = ( f ∗ g ) + ( f ∗ h ) f * (g + h) = (f * g) + (f * h) f∗(g+h)=(f∗g)+(f∗h)

    卷积对加法具有分配性。

  4. 频域性质(卷积定理):

    • 时域的卷积对应于频域的乘积:
      DFT ( x ∗ h ) = DFT ( x ) ⋅ DFT ( h ) \text{DFT}(x * h) = \text{DFT}(x) \cdot \text{DFT}(h) DFT(x∗h)=DFT(x)⋅DFT(h)
    • 对于线性卷积,需要补零以避免混叠(之前已讨论)。

6. 卷积的计算方法

卷积可以通过以下方式计算:

6.1 时域直接计算

直接使用定义公式:
y [ n ] = ∑ m x [ m ] h [ n − m ] y[n] = \sum_{m} x[m] h[n - m] y[n]=m∑x[m]h[n−m]

  • 复杂度 :对于长度 M M M 和 L L L 的信号,复杂度为 O ( M ⋅ L ) O(M \cdot L) O(M⋅L)。
  • 适用场景:短信号或需要直观理解时。

6.2 频域计算(使用 FFT)

根据卷积定理:

  1. 补零 x [ n ] x[n] x[n] 和 h [ n ] h[n] h[n] 到长度 N ≥ M + L − 1 N \geq M + L - 1 N≥M+L−1。
  2. 计算 X [ k ] = DFT ( x [ n ] ) X[k] = \text{DFT}(x[n]) X[k]=DFT(x[n]), H [ k ] = DFT ( h [ n ] ) H[k] = \text{DFT}(h[n]) H[k]=DFT(h[n])。
  3. 频域点乘: Y [ k ] = X [ k ] ⋅ H [ k ] Y[k] = X[k] \cdot H[k] Y[k]=X[k]⋅H[k]。
  4. 逆 DFT: y [ n ] = IDFT ( Y [ k ] ) y[n] = \text{IDFT}(Y[k]) y[n]=IDFT(Y[k])。
  • 复杂度 :使用 FFT,复杂度为 O ( N log ⁡ N ) O(N \log N) O(NlogN),通常比直接计算快。
  • 适用场景:长信号。

6.3 滑动窗口法

手动计算时,可以用滑动窗口的方式,直观但效率较低。

7. 卷积的实际应用

卷积在多个领域有广泛应用:

  1. 信号处理
    • 滤波:用卷积实现低通、高通滤波器(如平滑信号、去除噪声)。
    • 混响:音频信号通过卷积添加混响效果。
  2. 图像处理
    • 边缘检测:用卷积核(如 Sobel 核)检测图像边缘。
    • 模糊:用高斯核进行卷积,实现图像模糊。
  3. 通信系统
    • 通道效应:信号通过通信信道时,信道的冲激响应与输入信号卷积。
    • OFDM:使用循环卷积处理循环前缀。
  4. 概率论
    • 两个独立随机变量的和的概率密度是它们概率密度的卷积。
  5. 机器学习
    • 卷积神经网络(CNN):卷积操作用于特征提取,捕捉图像的空间结构。

8. 总结

卷积是一种描述两个函数"混合"的数学运算,在时域表现为滑动加权平均,在频域表现为点乘(卷积定理)。它在信号处理、图像处理、通信系统等领域有广泛应用。线性卷积适用于非周期信号,而循环卷积适用于周期信号,两者通过补零可以互相转换。计算卷积可以直接在时域进行,也可以通过 FFT 在频域高效实现。

参考资料

【卷积】直观形象的实例,10分钟彻底搞懂

【卷积神经网络】8分钟搞懂CNN,动画讲解喜闻乐见

相关推荐
lboyj5 分钟前
AI赋能高频PCB信号完整性优化
大数据·人工智能
__Benco16 分钟前
OpenHarmony平台驱动开发(十一),PIN
人工智能·驱动开发·harmonyos
拓端研究室TRL17 分钟前
CNN-LSTM、GRU、XGBoost、LightGBM风电健康诊断、故障与中国银行股票预测应用实例
人工智能·神经网络·cnn·gru·lstm
零炻大礼包29 分钟前
【coze】意图识别(售前售后问题、搜索引擎去广告)
人工智能·coze
小小毛桃30 分钟前
使用PyTorch训练马里奥强化学习代理的完整指南
人工智能·pytorch·python
南玖yy37 分钟前
内存安全革命:工具、AI 与政策驱动的 C 语言转型之路
c语言·开发语言·c++·人工智能·安全·c++23·c++基础语法
Dipeak数巅科技40 分钟前
数巅智能携手北京昇腾创新中心深耕行业大模型应用
人工智能·数据分析·商业智能bi
明朝百晓生42 分钟前
【Survival Analysis】【机器学习】【3】deepseek流程图
人工智能·机器学习
mzak42 分钟前
Linux系统(OpenEuler22.03-LTS)部署FastGPT
linux·人工智能·fastgpt
DIY机器人工房1 小时前
[6-1] TIM定时中断 江协科技学习笔记(45个知识点)
笔记·科技·stm32·单片机·学习