循环卷积(Circular Convolutions)

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

循环卷积(Circular Convolutions)

  • 循环卷积(Circular Convolutions)
    • 1. 什么是循环卷积
    • 2. 数学定义
      • 关键点
    • 3. 循环卷积与线性卷积的区别
      • 线性卷积
      • 循环卷积与线性卷积的差异
      • 特殊情况:循环卷积与线性卷积的关系
    • 4. 循环卷积的计算方法
      • 方法 1:直接时域计算
      • 方法 2:使用快速傅里叶变换(FFT)
      • 方法 3:矩阵形式
    • 5. 实际应用
    • 6. 注意事项
    • 7. 总结
  • 时域的循环卷积等价于频域的点乘
    • 步骤 1:定义循环卷积和 DFT
    • 步骤 2:将循环卷积代入 DFT
    • 步骤 3:改变求和顺序
    • 步骤 4:变量替换
    • 步骤 5:识别 DFT
    • 步骤 6:结论
  • 卷积(Convolution)
    • 1. 什么是卷积
    • 2. 卷积的数学定义
      • 2.1 连续卷积
      • 2.2 离散卷积(线性卷积)
    • 3. 卷积的直观理解
      • 示例
    • 4. 卷积的物理意义
    • 5. 卷积的性质
    • 6. 卷积的计算方法
      • 6.1 时域直接计算
      • 6.2 频域计算(使用 FFT)
      • 6.3 滑动窗口法
    • 7. 卷积的实际应用
    • 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]=(xh)[n]=m=0N1x[m]h[(nm)modN]

其中:

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

关键点

  • 模运算:模运算 m o d N \mod N modN 是循环卷积的核心,它体现了信号的周期性。比如,如果 n − m = − 1 n - m = -1 nm=1,则 ( − 1 ) m o d N = N − 1 (-1) \mod N = N-1 (1)modN=N1,相当于从信号的末尾绕回到开头。
  • 长度一致:输入信号 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+L1,公式为:

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]=(xh)[n]=mx[m]h[nm]

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

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

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

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

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

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=0N1x[m]h[(nm)modN]

步骤

  1. 对于每个 n = 0 , 1 , … , N − 1 n = 0, 1, \dots, N-1 n=0,1,,N1,计算所有 m = 0 , 1 , … , N − 1 m = 0, 1, \dots, N-1 m=0,1,,N1 的贡献。
  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=03x[m]h[(0m)mod4]=x[0]h[0]+x[1]h[1mod4]+x[2]h[2mod4]+x[3]h[3mod4]=11+20+30+40=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=Hx

这种方法直观,但计算复杂度仍为 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+L1,否则循环卷积会引入混叠。
  • 信号长度:输入信号长度必须一致,否则需要截断或补零对齐。
  • 数值精度:使用 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]=(xh)[n]=m=0N1x[m]h[(nm)modN]

其中 ( n − m ) m o d N (n - m) \mod N (nm)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=0N1y[n]ei2πkn/N,k=0,1,,N1

目标是计算 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=0N1y[n]ei2π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=0N1(m=0N1x[m]h[(nm)modN])ei2π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[(nm)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=0N1x[m]n=0N1h[(nm)modN]ei2π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=(nm)modN。这意味着:

  • n = 0 , 1 , … , N − 1 n = 0, 1, \dots, N-1 n=0,1,,N1,对于固定的 m m m r = ( n − m ) m o d N r = (n - m) \mod N r=(nm)modN 也会遍历 0 , 1 , … , N − 1 0, 1, \dots, N-1 0,1,,N1
  • 同时, 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=0N1h[(nm)modN]ei2πkn/N

注意到 ( n − m ) m o d N = r (n - m) \mod N = r (nm)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} ei2πk(r+m)/N=ei2πkr/Nei2π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=0N1x[m]ei2πkm/Nr=0N1h[r]ei2π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=0N1h[r]ei2π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=0N1x[m]ei2π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=0N1x[m]ei2πkm/N)(r=0N1h[r]ei2π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]=(xh)[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 (fg)(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]=(xh)[n]=m=x[m]h[nm]

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

  • 假设 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,,M1 有值,其余为 0。
    • h [ n ] h[n] h[n] n = 0 , 1 , … , L − 1 n = 0, 1, \dots, L-1 n=0,1,,L1 有值,其余为 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=0M1x[m]h[nm]
  • 输出 y [ n ] y[n] y[n] 的长度为 M + L − 1 M + L - 1 M+L1,因为 n − m n - m nm 的有效范围使得 n n n 从 0 到 M + L − 2 M + L - 2 M+L2

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[nm]
  3. 乘积并求和:在每个位置 n n n,将 x [ m ] x[m] x[m] h [ n − m ] h[n - m] h[nm] 逐点相乘,然后对所有 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+L1=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=02x[m]h[nm]

  • 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]=11+20+30=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]=11+21+30=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]=10+21+31=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]=10+20+31=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 fg=gf
    ( x ∗ h ) [ n ] = ( h ∗ x ) [ n ] (x * h)[n] = (h * x)[n] (xh)[n]=(hx)[n]。这意味着 h [ n − m ] h[n - m] h[nm] 可以看作 x [ n − m ] x[n - m] x[nm]

  2. 结合律
    ( f ∗ g ) ∗ h = f ∗ ( g ∗ h ) (f * g) * h = f * (g * h) (fg)h=f(gh)
    卷积可以按任意顺序分组计算。

  3. 分配律
    f ∗ ( g + h ) = ( f ∗ g ) + ( f ∗ h ) f * (g + h) = (f * g) + (f * h) f(g+h)=(fg)+(fh)
    卷积对加法具有分配性。

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

    • 时域的卷积对应于频域的乘积:
      DFT ( x ∗ h ) = DFT ( x ) ⋅ DFT ( h ) \text{DFT}(x * h) = \text{DFT}(x) \cdot \text{DFT}(h) DFT(xh)=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]=mx[m]h[nm]

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

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 NM+L1
  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,动画讲解喜闻乐见

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/904800.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机视觉】Car-Plate-Detection-OpenCV-TesseractOCR:车牌检测与识别

Car-Plate-Detection-OpenCV-TesseractOCR:车牌检测与识别技术深度解析 在计算机视觉领域,车牌检测与识别(License Plate Detection and Recognition, LPDR)是一个极具实用价值的研究方向,广泛应用于智能交通系统、安…

MATLAB制作柱状图与条图:数据可视化的基础利器

一、什么是柱状图与条图? 柱状图和条图都是用来表示分类数据的常见图表形式,它们的核心目的是通过矩形的长度来比较各类别的数值大小。条图其实就是“横着的柱状图”,它们的本质是一样的:用矩形的长度表示数值大小,不同…

[计算机科学#13]:算法

【核知坊】:释放青春想象,码动全新视野。 我们希望使用精简的信息传达知识的骨架,启发创造者开启创造之路!!! 内容摘要: 算法是解决问题的系统化步骤,不同的问题…

HTTP传输大文件的方法、连接管理以及重定向

目录 1. HTTP传输大文件的方法 1.1. 数据压缩 1.2. 分块传输 1.3. 范围请求 1.4. 多段数据 2. HTTP的连接管理 2.1. 短连接 2.2. 长连接 2.3. 队头阻塞 3. HTTP的重定向和跳转 3.1. 重定向的过程 3.2. 重定向状态码 3.3. 重定向的应用场景 3.4. 重定向的相关问题…

PostgreSQL 18 Beta 1发布,有哪些功能亮点?

PostgreSQL 全球开发组于 2025 年 5 月 8 日发布了第一个 PostgreSQL 18 Beta 版本,现已开放下载。虽然细节可能会有所改变,但是该版本包含了 PostgreSQL 18 最终正式版中所有新功能的预览。 以下是 PostgreSQL 18 引入的部分关键功能亮点。 性能优化 …

vue dev-tools插件

背景 在项目上用到vue技术,在bilibili上学习vue,期间老师推荐使用vue dev-tools调试神器,所以过来安转和使用了,用了感觉不错,希望给大家带来效率的提升。 定义 Vue DevTools 是一款旨在增强 Vue 开发者体验的工具&am…

单片机-FLASH软件模拟EEPROM,提升flash保存重要参数的使用寿命

目录 1. FLASH和EEPROM读写数据的对比   2. FLASH模拟EEPROM的原理   3. FLASH模拟EEPROM的优点   4. 实战项目工程代码 1. FLASH和EEPROM读写数据的对比 1.1 擦除操作 EEPROM通常支持按单字节擦除和写入,这一特性使其非常适合需要频繁更新小量数据的应…

探索Stream流:高效数据处理的秘密武器

不可变集合 stream流 Stream流的使用步骤: 先得到一条Stream流(流水线),并把数据放上去 使用中间方法对流水线上的数据进行操作 使用终结方法对流水线上的数据进行操作 Stream流的中间方法 注意1:中间方法&#xff0…

vue3笔记(自存)

1. Vue3简介 2020年9月18日,Vue.js发布版3.0版本,代号:One Piece(n 经历了:4800次提交、40个RFC、600次PR、300贡献者 官方发版地址:Release v3.0.0 One Piece vuejs/core 截止2023年10月,最…

实验4 mySQL查询和视图

一、实验目的 掌握SELECT语句的基本语法多表连接查询GROUP BY的使用方法。ORDER BY的使用方法。 二、实验步骤、内容、结果 实验内容: 实验4.1数据库的查询 目的与要求 (1)掌握SELECT语句的基本语法。 (2)掌握子查询的表示。 (3)掌握连接查询的表示。 (4)掌…

【bug】fused_bias_act_kernel.cu卡住没反应

简述 在推理人脸修复face restoration算法 GPEN的时候,发现有时候fused_bias_act_kernel.cu卡住没反应。 解决 清理下缓存,让程序自己再编译下

.net/C#进程间通信技术方案总结

C# 应用进程间通信(IPC)技术方案 进程间通信(Inter-Process Communication, IPC)是不同进程之间交换数据和消息的机制。以下是C#中常用的IPC技术方案: 1. 命名管道(Named Pipes) 适用于本地机器上的进程通信,支持双向通信。 ​​服务端示例​​&…

阿里云服务器数据库故障排查指南?

阿里云服务器数据库故障排查指南? 以下是针对阿里云服务器(如ECS自建数据库或阿里云RDS等托管数据库)的故障排查指南,涵盖常见问题的定位与解决方案: 一、数据库连接失败 检查网络连通性 ECS自建数据库 确认安全组规则放行数据库…

深度学习 ———— 迁移学习

迁移学习原理 什么是迁移学习? 迁移学习利用在大规模数据集(如ImageNet)上预训练的模型,改装小数据集(如CIFAR-10)。优势: 减少训练时间:预训练模型已学习通用特征(如边…

单调栈模版型题目(3)

单调栈型题目贡献法 基本模版 这是数组a中的 首先我们要明白什么叫做贡献,在一个数组b{1,3,5}中,连续包含1的连续子数组为{1},{1,3},{1,3,5},一共有三个,这三个数一共能组成6个连续子数组,而其…

日常知识点之随手问题整理(思考单播,组播,广播哪个更省带宽)

新入职的公司在某些场景下无脑使用组播技术,自己突然就意识到一个问题:单播,组播,广播,哪个更省带宽? 有所收获,做点笔记,仅仅是个人理解~ 1:简单理解 单播&#xff1…

R1-Omni

一、Omni概述 Omni 文本视频音频,全模态。 R1Omni 强化学习全模态。 二、Omni举例-humanOmni humanOmni:以人体姿态和人物交互为中心的全模态模型。 visual projector有3个,分别负责人脸标签、姿态检测、人和物交互。有点像moe。text enc…

linux中的日志分割

1.问题背景,nginx日志过大不好删除 [rootlocalhost cron.daily]# cd /lk/nginx/log/ [rootlocalhost log]# ll 总用量 2386188 -rw-r--r--. 1 root root 2078699697 5月 9 13:02 access.log -rw-r--r--. 1 root root 11138 5月 6 10:28 error.log [rootloc…

华为云Flexus+DeepSeek征文|从开通到应用:华为云DeepSeek-V3/R1商用服务深度体验

前言 本文章主要讲述在华为云ModelArts Studio上 开通DeepSeek-V3/R1商用服务的流程,以及开通过程中的经验分享和使用感受帮我更多开发者,在华为云平台快速完成 DeepSeek-V3/R1商用服务的开通以及使用入门注意:避免测试过程中出现部署失败等问…

【机器学习-线性回归-5】多元线性回归:概念、原理与实现详解

线性回归是机器学习中最基础且广泛应用的算法之一,而多元线性回归则是其重要扩展。本文将全面介绍多元线性回归的核心概念、数学原理及多种实现方式,帮助读者深入理解这一强大的预测工具。 1. 多元线性回归概述 1.1 什么是多元线性回归 多元线性回归(…