我在数字图像恢复领域工作。我已经阅读了有关卷积的所有内容,对于LTI系统,如果我们知道它的冲激响应,那么仅通过使用输入和冲激响应之间的卷积就可以找到它的输出。

谁能告诉我它背后的主要数学哲学是什么?您的经验不仅可以让我在网上冲浪上了解更多。

评论

值得一读:dsp.stackexchange.com/questions/4723/…; dsp.stackexchange.com/questions/8530/…; dsp.stackexchange.com/questions/6451 / ...

我之所以反对这个问题,是因为该网站(或网站的一些细微变化)已被反复问及回答,如pichenettes的评论所述。您应该在此站点上进行“互联网冲浪”。

#1 楼

卷积的思想

我最喜欢的主题表达是布拉德·奥斯古德(Brad Osgood)关于傅立叶变换的演讲之一。卷积的讨论始于36:00左右,但是整个讲座还有其他值得关注的内容。

基本思想是,当您定义诸如Fourier Transform之类的内容时,而不是直接使用始终定义,有助于简化计算的高级属性很有用。例如,一种这样的性质是两个函数的和的变换等于变换的和,即

$$
F \ {f + g \} = F \ {f \} + F \ {g \}。
$$

这意味着如果您有一个函数具有未知的变换,并且可以将其分解为具有已知的转换,您基本上可以免费获得答案。

现在,由于我们具有两个变换之和的标识,所以自然要问两个变换的乘积的标识是什么,即

$$
F \ {f \} F \ {g \} = \ space?。
$$

事实证明,当您计算答案时,就会出现卷积。整个推导都在视频中给出,由于您的问题主要是概念性的,因此我在这里不做任何概括。

以这种方式进行卷积的含义是,这是方法的内在部分拉普拉斯变换(傅里叶变换是特例)将线性常系数常微分方程(LCCODE)转换为代数方程。可以使用这种转换使LCCODE的分析易于处理的事实,是在信号处理中对其进行研究的很大一部分原因。例如,引用奥本海姆(Oppenheim)和舍弗(Schafer):


因为它们在数学上相对容易表征,并且
因为它们可以被设计为执行有用的信号处理功能,将研究线性位移不变系统的类别



因此,对该问题的一个答案是,如果您使用转换方法来分析和/或合成LTI系统,迟早会出现卷积(隐式或明确地)。注意,在微分方程的上下文中,这种引入卷积的方法是非常标准的。例如,请参阅Arthur Mattuck的MIT讲座。大多数演示文稿要么不加注释地展示卷积积分,然后导出其特性(即从帽子中取出),要么下摆和摆弄积分的奇怪形式,谈论翻转和拖动,时间反转等,等等。

我之所以喜欢Osgood教授的方法,是因为它避免了所有的tsouris,而且我认为,它提供了对数学家如何首先想到这个想法的深刻见解。我引用:


我说:“有没有一种在时域中组合F和G的方法,所以
在频域中频谱成倍增加,傅立叶
转换是乘法吗?”答案是,是的,有了这个
复杂的积分。这不是很明显。您不会在早上起床
写下来,并希望这将
解决该问题。我们如何得到它?您说的是,假设问题已解决,看看将要发生什么,然后我们就必须认识到何时该宣布胜利。现在是时候宣布胜利了。

现在,作为一个令人讨厌的数学家,您会掩盖自己的足迹,并说:
“好吧,我只想通过<定义两个函数的卷积
此公式。“

LTI Systems

在大多数DSP文本中,卷积通常以不同的方式引入(避免了对转换方法的任何引用) )。通过将任意输入信号$ x(n)$表示为按比例缩放和偏移的单位脉冲的总和,

$$
x(n)= \ sum_ {k =-\ infty} ^ \ infty {x(k)\ delta(n-k)},\ tag {1}
$$

其中

$$
0,&n \ ne 0 \\
1,& n = 0,
\ end {cases} \ tag {2}
$$

线性时不变系统的定义性质直接导致涉及脉冲响应的卷积和$ h(n)= L [\ space \ delta(n)\ space] $。如果由LTI运算符$ L $定义的系统表示为$ y(n)= L [\ space x(n)\ space] $,则通过应用相应的属性,即线性

$$
\ overbrace {L [\ space ax_1(n)+ bx_2(n)\ space]} ^ \ text {缩放后的输入总和的转换} = \ overbrace {aL [\ space x_1(n) \ space] + bL [\ space x_2(n)\ space]} ^ \ text {缩放变换的总和},\ tag {3}
$$

和时移不变

$$
L [\ space x(n)\ space] = y(n)\ space \ xrightarrow {\ text {implies}} L [\ space x(nk)\空格] = y(nk),\ tag {4}
$$

系统可以重写为

$$
$$

这是呈现卷积的一种非常标准的方法,也是一种完美而优雅且有用的方法。在Oppenheim和Schafer,Proakis和Manolakis,Rabiner和Gold中可以找到类似的推导,我敢肯定还有很多。 Dilip在其出色的回答中给出了更深入的见解(比标准介绍要深入得多)。

但是请注意,这种推导有些魔术。再看一下信号如何在$ \ left(1 \ right)$中分解,我们可以看到它已经是卷积形式了。如果

$$
\ overbrace {(f * g)(n)} ^ \ text {f与g卷积} = \ sum_ {k =-\ infty} ^ \ infty { f(k)g(nk)},
$$

那么$ \ left(1 \ right)$只是$ x * \ delta $。因为delta函数是卷积的标识元素,所以说可以以这种形式表示的任何信号都非常像说任何数字$ n $可以表示为$ n + 0 $或$ n \ x 1 $。现在,选择以这种方式描述信号是很了不起的,因为它直接导致了脉冲响应的想法-只是卷积的想法已经“扎根”在信号的分解中。

从这个角度来看,卷积与增量函数的概念本质上相关(即,卷积运算是以增量函数为标识元素的二进制运算)。即使不考虑其与卷积的关系,信号的描述也主要取决于增量函数的概念。那么问题就变成了,我们首先从何处得到delta函数的想法?据我所知,它至少可以追溯到傅立叶关于热分析理论的论文,它隐含地出现了。本文的进一步来源之一是AlejandroDomínguez撰写的《卷积的起源和历史》。

现在,在线性系统理论的背景下,这是实现该思想的两种主要方法。一个偏爱分析洞察力,另一个偏爱数值解法。我认为两者都有助于全面了解卷积的重要性。但是,在离散情况下,完全忽略了线性系统,从某种意义上说,卷积是一个更古老的想法。

多项式乘法

吉尔伯特·斯特兰(Gilbert Strang)在本讲座中大约5:46开始,很好地介绍了离散卷积只是多项式乘法的思想。从这个角度来看,这个想法可以追溯到引入位置数系统(位置数隐式表示为多项式)。因为Z变换将信号表示为z中的多项式,所以在这种情况下也会发生卷积-即使Z变换在形式上被定义为延迟算子而不求助于复杂分析和/或作为Laplace的特殊情况转换。

评论


$ \ begingroup $
先生,感谢您的宝贵指导,您刚刚向我展示了正确的跟踪方法。您的帮助已教会我如何成为别人的好人....::)
$ \ endgroup $
– Mayank Tiwari
2013年6月27日10:11



$ \ begingroup $
这个大巧的巧合如何解释您需要进行卷积的情况?我相信,在每个域中,当您将参数恢复到时域时,都会有一个卷积运算。我们可能需要在时域中进行多重复制以获得响应吗?为什么我们要乘以频率而不是时间扫描?
$ \ endgroup $
–Val
13年6月27日在11:36

$ \ begingroup $
考虑到OP已经问了有关脉冲在LTI系统中的作用的问题,我读了这个问题,因为他以此为例来激发一个关于卷积来自何处的问题-不一定是卷积的作用计算脉冲响应本身。那是你要的吗
$ \ endgroup $
–datageist♦
13年6月27日在11:52

$ \ begingroup $
如果我们不知道为什么需要傅里叶乘法,那么说我们需要卷积是因为它与傅里叶乘法相同,这对我来说是无稽之谈。当我们得到脉冲响应时,这意味着时域和卷积,而不是傅立叶基础上的任何黑魔法。我不认为提及该问题可以澄清这一点。无论如何,对一般的基本问题(即系统问题)给出“局部答案”是不好的。问答必须对未来的访问者有用。
$ \ endgroup $
–Val
13年6月27日在12:12

$ \ begingroup $
Val在上面的评论是正确的。我想知道在发明/发现傅立叶变换之前线性系统是如何工作的。一个无情的无生命物体到底是如何发现如此复杂的公式的呢?
$ \ endgroup $
– Dilip Sarwate
13年6月27日在13:33

#2 楼

我曾经在Wikipedia卷积讨论页面上给出了答案,该页面基本上提出了相同的问题:为什么要进行时间倒置?其原理是您在时间0向滤波器施加单个脉冲,并在时间0、1、2、3、4,…记录其响应。基本上,响应看起来像一个函数h(t)。您可以绘制它。如果脉冲高/高n倍,则响应脉冲将成比例地高(这是因为始终采用线性滤波器)。现在,所有DSP(不仅是DSP)都涉及将滤波器应用于信号时会发生什么情况?你知道冲动的反应。您的信号(尤其是数字信号)不过是一系列高度为x(t)的脉冲。它在时间$ t $处具有高度/值$ x $。线性系统很酷,您可以将每个这样的输入脉冲的输出求和,以获得输入函数x(t)的响应函数y(t)。您知道输出脉冲y(t = 10)取决于立即输入x(1​​0),这贡献了h(0)* x(10)。但是,前一个脉冲x(9)的输出也有x(9)* h(1)的贡献,甚至更早的输入值也有贡献。您会看到,当您从较早的输入中添加贡献时,一个时间参数会减少,而另一个时间参数会增加。您将所有贡献MAC MAC为y(10)= h(0)* x(10)+ h(1)* x(9)+ h(2)* x(8)+…,这是一个卷积。

您可以将函数y(t),h(t)和x(t)视为向量。矩阵是线性代数中的算子。他们采用输入向量(一系列数字)并产生输出向量(另一系列数字)。在这种情况下,y是卷积矩阵与向量x的乘积,

$ \ vec y = \ begin {bmatrix} y_0 \\ y_1 \\ y_2 \\ \ vdots \ end {bmatrix} = \ begin {bmatrix} h_0&0&0&\ cdots \\ h_1&h_0&0&\ cdots \\ h_2&h_1&h_0&\ cdots \\ \ vdots&\ vdots&\ vdots&\ ddots \ end { bmatrix} \ begin {bmatrix} x_0 \\ x_1 \\ x_2 \\ \ vdots \ end {bmatrix} = H \ vec x $

现在,由于卷积是一个Toeplitz矩阵,它具有傅立叶本征基,因此卷积算子(线性算子由矩阵表示,但矩阵也取决于基)在傅里叶域中是一个很好的对角矩阵,

$ \ vec Y = \ begin {bmatrix} Y_0 \\ Y_1 \\ Y_2 \\ \ vdots \ end {bmatrix} = \ begin {bmatrix} \ lambda_0&0&0&\ cdots \\ 0&\ lambda_1 &0&\ cdots \\ 0&0&\ lambda_2&\ cdots \\ \ vdots&\ vdots&\ vdots&\ ddots \ end {bmatrix} \ begin {bmatrix} X_0 \\ X_1 \\ X_2 \\ \ vdots \ end {bmatrix} = diag(H)\ vec X $

注意,更多的零,因此计算简单得多。这个结果被称为“卷积定理”,并且作为第一个回答,它在傅立叶域中要简单得多。但是,这是“卷积定理”,傅立叶基和线性算符背后的系统论,而不是普遍存在的卷积需求。

通常,您进行卷积是因为您具有输入信号,冲激响应并且需要在时域中进行输出。您可以转换到傅立叶空间以优化计算。但是,正如我在DSPGuide中所看到的那样,它对于简单的过滤器是不切实际的。如果您的过滤器看起来像$ y [currentTime] = k_1 x [time-1] + k_2 x(time-2)+ b * y [time-1] $,则对傅立叶变换没有意义。您只需进行n次乘法,即可计算每个y。实时也很自然。实时您一次只计算y。如果您记录了信号x并且需要立即计算整个向量y,您可能会想到傅里叶变换。这将需要NxN个MAC运算,而Fourier可以帮助将其减少为N log(N)。

评论


$ \ begingroup $
几个注意事项:您将如何扩展对连续时间情况的描述(显然是在离散时间情况之前)?同样,有许多实时应用程序使用基于傅立叶变换的方法进行快速卷积。说对于实时应用程序总是总是一次计算一次输出是不正确的。
$ \ endgroup $
–Jason R
2013年6月27日13:04

$ \ begingroup $
这样说,很好的工作指出了一个事实,即卷积矩阵的Toeplitz结构意味着它在傅立叶基础上接受对角线表示。
$ \ endgroup $
–Jason R
13年6月27日在13:06

$ \ begingroup $
是的,可能是您实时使用傅立叶转换。我远不是DSP专家。我只是表达了这个主意(我是从我稀少的练习中阅读了DSPGuide得出的)。无论如何,我想强调的是,傅立叶与卷积理论无关。我可能需要删除所有与傅立叶相关的讨论,因为这会分散您的注意力。卷积在时域中是自然的,无论傅里叶有多酷,卷积都是不需要傅里叶的。
$ \ endgroup $
–Val
13年6月27日在13:14

$ \ begingroup $
连续时间案例在历史上是先于事实的事实,并不要求我们以相同的顺序学习。我认为从离散情况开始更容易理解包括卷积在内的许多事物的原理(我们在DSP.se中采用这种方法)。在连续情况下,随着我们使脉冲越来越短,一系列的MAC操作变成了积分。顺便说一句,积分本身$ \ int f(x)dx $被理解为离散求和的极限情况:$ \ int f(x)dx = \ lim_ {dx \ to 0}(\ sum f(x)dx) $。因此,它不可能先于离散求和。
$ \ endgroup $
–Val
2013年6月27日13:47

$ \ begingroup $
@JasonR在连续设置中,将Toeplitz矩阵替换为不变移位运算符。然后,您可以证明傅立叶基础函数对角化了该运算符。
$ \ endgroup $
–lp251
13年6月28日在3:30

#3 楼

尽管前面的答案确实很不错,但我想补充一下关于卷积的观点,在这些观点的帮助下,这些数字将使其更易于可视化。

人们想知道是否有任何方法可以针对给定的输入信号确定系统的输出信号。只要系统是线性的并且是时不变的(LTI),卷积就是该问题的答案。假设我们有一个任意信号$ s [n] $。然后,可以通过以下推理将$ s [n] $分解为位移的单位脉冲的缩放总和。将$ s [n] $与单位脉冲相乘$ m $个样本,即$ \ delta [n-m] $。由于$ \ delta [nm] $在$ n = m $处都等于0,因此当$ n $不等于$ m $时,会将$ s [n] $的所有值乘以0,在$ n $不等于$ m $时乘以1。 $ n $等于$ m $。因此,所得序列将在$ n = m $处具有其值等于$ s [m] $的脉冲。下图清楚地说明了此过程。

$ \ hspace {2cm} $

可以用数学方式写为
\ begin {equation *}
s [n] \ delta [nm] = s [m] \ delta [nm]
\ end {equation *}
重复相同的过程但有不同的延迟$ m'$给出
\ begin {equation *}
s [n] \ delta [n-m'] = s [m'] \ delta [n-m']
\ end {equation *}

此时将提取值$ s [m'] $。因此,如果在所有可能的延迟$-\ infty \开始{align}
s [n]&= \ cdots + s [-2] \ delta [n + 2] + s [-1] \ delta [n + 1] + \ nonumber \\
&\ quad \ quad \ quad \ quad \ quad s [0] \ delta [n] + s [1] \ delta [n-1] + s [2] \ delta [n-2] + \ cdots \ nonumber \ \
&= \ sum \ limits _ {m =-\ infty} ^ {\ infty} s [m] \ delta [nm] \ label {eqIntroductionSeqImpulses}
\ end {align}

总而言之,上述等式表明,$ s [n] $可以写成缩放后的单位脉冲的总和,其中每个单位脉冲$ \ delta [n-m] $的幅度为$ s [m] $。这种求和的示例如下图所示。

$ \ hspace {3cm} $

考虑将其作为LTI系统的输入时会发生什么情况。带有脉冲响应$ h [n] $。



这导致输入-输出序列为



在上述过程中,我们得出了著名的卷积方程,该方程描述了输入$ s [n] $到具有脉冲响应$ h [n] $的LTI系统的输出$ r [n] $。

卷积是一个非常逻辑和简单的过程,但是由于它的解释方式,许多DSP学习者会发现它令人困惑。我们将介绍一种常规方法和另一种更直观的方法。

常规方法



大多数定义卷积方程的教科书都建议通过以下步骤来实现。对于每个单独的时移$ n $,

[翻转]将方程式布置为$ r [n] = \ sum _ {m =-\ infty} ^ {\ infty} s [m] h [-m + n] $,将脉冲响应视为变量$ m $的函数,翻转$ h [m] $约$ m = 0 $,以获得$ h [-m] $。

[Shift]要获得$ h [-m + n] $的时移$ n $,请将$ h [-m] $移$ n $个单位,向右移为正数$ n $,向左移为负数$ n $。


[乘]将序列$ s [m] $与序列$ h [-m + n] $逐点相乘,得到乘积序列$ s [m] \ cdot h [-m + n] $。


[Sum]对上述乘积序列的所有值求和,以得到在时间$ n $处的卷积输出。
[重复]对$ n $的每个可能值重复上述步骤。

两个信号$ s [n] = [2 \ hspace {1mm}-\\]之间的卷积示例hspace {-1mm} 1 \ hspace {2mm} 1] $和$ h [n] = [-1 \ hspace {2mm} 1 \ hspace {2mm} 2] $如下图所示,其中结果$ r [每个$ n $显示n] $。

注意上面信号表示的变化。实际信号$ s [n] $和$ h [n] $是时间索引$ n $的函数,但是卷积方程表示这两个时间索引为$ m $的信号。另一方面,$ n $用来表示$ h [-m] $的时移,然后再逐点乘以$ s [m] $。输出$ r [n] $是时间索引$ n $的函数,这是应用于$ h [-m] $的移位。



下一个,我们转向不需要翻转信号的更直观的方法。

直观的方法


还有另一种理解卷积的方法。实际上,它基于卷积方程的推导,即找到输出$ r [n] $ as
\ begin {align}
r [n]〜&=〜\ cdots + \ nonumber \\
&\ qquad \ quad s [-2] \ cdot h [n + 2]〜+ \ nonumber \\
&\ qquad \ qquad \ quad \ quad \ quad s [-1 ] \ cdot h [n + 1]〜+ \ nonumber \\
&\ qquad \ qquad \ qquad \ qquad \ quad \ quad \ quad \ quad s [0] \ cdot h [n]〜+ \ nonumber \\
&\ qquad \ qquad \ quad \ qquad \ qquad \ qquad \ quad \ quad \ quad〜s [1] \ cdot h [n-1]〜+ \ nonumber \\
&\ qquad \ qquad \ qquad \ qquad \ qquad \ qquad \ qquad \ quad \ quad \ quad \ quad〜s [2] \ cdot h [n-2]〜+ \ nonumber \\
&\ qquad \ qquad qquad \ qquad \ qquad \ qquad \ qquad \ qquad \ qquad \ qquad \ quad \ quad \ quad \ quad \ cdots \ label {eqIntroductionConvolution3}
\ end {align}
让我们解决与以下示例相同的示例在上图中,其中$ s [n] = [2 \ hspace {1mm}-〜\ hspace {-2mm} 1 \ hspace {2mm} 1] $和$ h [n] = [-1 \ hspace {2mm } 1 \ hspace {2mm} 2] $。如下表所示。

$ \ hspace {3cm} $

这样的方法如下图所示。从实现的角度来看,这两种方法之间没有区别。

$ \ hspace {3cm} $

综上所述,卷积告诉我们LTI系统如何响应特定输入,并且由于上面的直观方法,我们可以说卷积在时域上也是倍增的(并且不需要翻转信号),除了时域乘法涉及内存。要更深入地了解翻转的来源以及频域中发生的情况,可以从我的书中下载示例部分。