卷积(Convolution)
卷积是一种积分变换的数学方法,与傅立叶变换有着密切的联系。在数字信号处理、通信系统、光学系统、神经网络计算许多方面得到了广泛应用。
在泛函分析中,卷积、旋积或摺积是通过两个函数g
和h
生成第三个函数f的一种数学算子,表征函数g
与h
经过翻折、平移之后重叠部分函数值乘积对重叠长度的积分。
定义
简单定义:
设f(x), g(x)
是R1上的两个可积函数,作积分:
∫
−
∞
∞
f
(
τ
)
g
(
x
−
τ
)
d
τ
\int_{-\infty}^{\infty}f(\tau)g(x-\tau)d\tau
∫−∞∞f(τ)g(x−τ)dτ
可以证明,关于几乎所有实数x,上述积分都是存在的。随x的不同取值,这个积分有不同的函数值,定义为新函数f(x)
,成为函数f
和g
的卷积,记为:
f
(
x
)
=
g
(
x
)
∗
h
(
x
)
=
(
g
∗
h
)
(
x
)
f(x)=g(x)*h(x)=(g*h)(x)
f(x)=g(x)∗h(x)=(g∗h)(x)
与傅立叶变换的关系
傅立叶变换有一条性质:两函数g
,h
的傅立叶变换的乘积,等于两函数卷积
g
∗
h
g*h
g∗h的傅立叶变换。
卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积。即,一个域中的卷积相当于另一个域中的乘积,例如时域中的卷积就对应于频域中的乘积。
卷积的特点
- 由卷积得到的函数
g
∗
h
g*h
g∗h一般要比
g
和h
都光滑。 - 两个操作函数
g
,h
满足交换律,结合律,分配律,数乘结合律(对任意实数和复数)。
卷积的应用
- 统计学中,加权的滑动平均是一种卷积。
- 卷积是在信号与线性系统的基础上或背景中出现的。
信号与线性系统,讨论的就是信号经过一个线性系统以后发生的变化(就是输入 输出 和所经过的所谓系统,这三者之间的数学关系)。所谓线性系统的含义,就是,这个所谓的系统,带来的输出信号与输入信号的数学关系式之间是线性的运算关系。
卷积关系最重要的一种情况,就是在信号与线性系统或数字信号处理中的卷积定理。利用该定理,可以将时间域或空间域中的卷积运算等价为频率域的相乘运算,从而利用FFT等快速算法,实现有效的计算,节省运算代价。
C语言实现
void convolution(float *input1, float *input2, float *output, int mm, int nn)
{
float *xx = new float[mm+nn-1];
// do convolution
for (int i = 0; i < mm+nn-1; i++)
{
xx[i] = 0.0;
for (int j = 0; j < mm; j++)
{
if (i-j > 0 && i-j < nn)
xx[i] += input1[j] * input2[i-j];
}
}
// set value to the output array
for (int i = 0; i < mm; i++)
output[i] = xx[i + (nn-1) / 2];
delete[] xx;
}