畳み込みが必要な理由、または畳み込みの背後にある哲学は何ですか?


14

私はデジタル画像復元の分野で働いています。畳み込みに関するすべてのことを読みました。LTIシステムでは、インパルス応答を知っていれば、入力とインパルス応答の間の畳み込みを使用するだけで出力を見つけることができます。

誰もがその背後にある主要な数学的哲学は何であるか教えてもらえますか?あなたの経験はそれについての単なるインターネットサーフィン以上のものを私に教えてくれます。



3
ピチェネットのコメントが述べているように、このサイトでこの質問(またはそのわずかなバリエーション)が繰り返し質問され、回答されたため、この質問に賛成します。代わりに、このサイトで「インターネットサーフィン」する必要があります。
ディリップサルワテ

回答:


13

畳み込みのアイデア

このトピックに関する私のお気に入りの説明は、Brad Osgoodのフーリエ変換に関する講義の 1つです。畳み込みの議論は36:00頃から始まりますが、講義全体には、見る価値のある追加のコンテキストがあります。

基本的な考え方は、フーリエ変換のようなものを定義するとき、常に定義を直接操作するのではなく、計算を簡素化するより高いレベルのプロパティを導出することが有用であるということです。たとえば、そのような特性の1つは、2つの関数の合計の変換が変換の合計に等しいことです。つまり、

F{f+g}=F{f}+F{g}.

つまり、未知の変換を持つ関数があり、既知の変換を持つ関数の合計として分解できる場合、基本的には無料で答えが得られます。

さて、2つの変換の合計に対するアイデンティティがあるので、2つの変換の積に対するアイデンティティが何であるかを尋ねるのは自然な質問です。

F{f}F{g}= ?.

答えを計算すると、畳み込みが表示されます。派生物全体がビデオで提供されており、あなたの質問はほとんど概念的なものであるため、ここでは説明しません。

この方法で畳み込みに近づくことの意味は、それがラプラス変換(そのフーリエ変換が特別なケースである)が線形定数係数常微分方程式(LCCODE)を代数方程式に変える方法の本質的な部分であるということです。そのような変換がLCCODEを分析的に扱いやすくするために利用できるという事実は、それらが信号処理で研究される理由の大部分です。たとえば、OppenheimとSchaferを引用するには:

それらは数学的に比較的容易に特徴付けられ、有用な信号処理機能を実行するように設計できるため、線形シフト不変システムのクラスが広範囲に研究されます。

したがって、質問に対する1つの答えは、変換メソッドを使用してLTIシステムを分析および/または合成している場合、遅かれ早かれ畳み込みが(暗黙的または明示的に)発生するということです。畳み込みを導入するこのアプローチは、微分方程式のコンテキストでは非常に標準的であることに注意してください。たとえば、Arthur MattuckによるこのMIT講義を参照してください。ほとんどのプレゼンテーションは、コメントなしで畳み込み積分を提示し、その特性を引き出します(つまり、帽子からそれを引き出します)。または、積分の奇妙な形式について裾と鷹、反転とドラッグ、時間反転などについて話します。 。

私がオズグッド教授のアプローチが好きな理由は、それがすべてのツォリスを回避するだけでなく、数学者が最初にアイデアにたぶん到達した方法についての深い洞察を提供するからです。そして私は引用します:

「時間領域でFとGを組み合わせて、周波数領域でスペクトルを乗算し、フーリエ変換を乗算する方法はありますか?」そして、答えは、そうです、この複雑な積分によるものです。それほど明白ではありません。あなたは朝ベッドから起きてこれを書き留めて、これがその問題を解決するだろうと期待しないでしょう。どうやって手に入れますか?あなたは言った、問題が解決されたと仮定し、何が起こらなければならないかを見て、それから私たちは勝利を宣言する時が来たと認識する必要があるだろう。そして、勝利を宣言する時です。

今、不快な数学者であるあなたは、あなたのトラックをカバーし、「まあ、私は単にこの式で2つの関数の畳み込みを定義するつもりです」と言います。

LTIシステム

ほとんどのDSPテキストでは、畳み込みは通常、別の方法で導入されます(変換メソッドへの参照を回避します)。任意の入力信号をスケーリングおよびシフトされた単位インパルスの合計として表すことにより、x(n)

(1)x(n)=k=x(k)δ(nk),

どこ

(2)δ(n)={0,n01,n=0,

線形時不変システムの定義プロパティは、インパルス応答含む畳み込み和を直接導きます。LTIオペレータによって定義されたシステムならばLは、のように表現されるY N = L [ X N ]、次いでrepective特性を適用することにより、すなわち、直線h(n)=L[ δ(n) ]Ly(n)=L[ x(n) ]

(3)L[ ax1(n)+bx2(n) ]Transform of the sum of scaled inputs=aL[ x1(n) ]+bL[ x2(n) ]Sum of scaled transforms,

および時間/シフト不変性

(4)L[ x(n) ]=y(n) impliesL[ x(nk) ]=y(nk),

システムは次のように書き直すことができます

y(n)=L[k=x(k)δ(nk)]Tranform of the sum of scaled inputs=k=x(k)L[δ(nk)]Sum of scaled transforms=k=x(k)h(nk).Convolution with the impulse response

これは畳み込みを表現する非常に標準的な方法であり、完全にエレガントで便利な方法です。同様の派生は、OppenheimとSchaferProakisとManolakisRabinerとGoldで見つけることができます。Dilipは、ここでの優れた回答の中で、[標準的な紹介よりもさらに深い]より深い洞察を示しています

ただし、この派生はやや手品であることに注意してください。で信号がどのように分解されるかをもう一度見てみると、すでに畳み込みの形になっていることがわかります。もし(1)

(fg)(n)f convolved with g=k=f(k)g(nk),

そして、だけであるX * δ。デルタ関数は畳み込みの恒等要素であるため、その形式で信号を表現できるということは、任意の数nn + 0またはn × 1として表現できるということとよく似ています。さて、インパルス応答の概念に直接つながるため、そのように信号を記述することを選択するのは素晴らしいことです。たたみ込みの概念は、すでに信号の分解にすでに「組み込まれている」からです。(1)xδnn+0n×1

この観点から見ると、畳み込みは本質的にデルタ関数の概念に関連しています(つまり、デルタ要素を恒等要素として持つバイナリ演算です)。畳み込みとの関係を考慮しなくても、信号の記述はデルタ関数の概念に大きく依存します。では、そもそもデルタ関数のアイデアはどこから得たのでしょうか?私の知る限り、少なくとも熱の分析理論に関するフーリエの論文にまでさかのぼります。さらなる情報源の1つは、アレハンドロドミンゲスによる畳み込みの起源と歴史に関するこの論文です。

さて、これらは線形システム理論の文脈におけるアイデアへの2つの主要なアプローチです。1つは分析的洞察を優先し、もう1つは数値解を優先します。畳み込みの重要性の全体像をつかむには、両方とも役立つと思います。ただし、線形システムを完全に無視する離散的なケースでは、畳み込みがはるかに古いアイデアであるという感覚があります。

多項式乗算

離散畳み込みは単なる多項式乗算であるという考え方の良いプレゼンテーションの1つは、5 :46頃から始まるこの講義で Gilbert Strangによって与えられました。その観点から、このアイデアは位置番号システム(暗黙的に多項式として数を表す)の導入にまでさかのぼります。Z変換は信号をzの多項式として表すため、そのコンテキストでも畳み込みが発生します。これは、Z変換が正式複雑な分析に頼らない遅延演算子として、および/またはラプラスの特殊なケースとして定義されている場合でも同様です変換します。


あなたの貴重な指導に感謝します、あなたはちょうど私に続く正しい方法を示しました。あなたのこのヘルプは:) ....であることをどのように良いの人間が他人のために始めることを私に教えてきました
Mayank Tiwariさん

この大きな偶然は、彼が尋ねた場合に畳み込みを行う必要があることをどのように説明していますか?すべてのドメインで、引数を時間ドメインに戻すと畳み込みになる操作があると思います。応答を得るために、時間領域で多重化を行う必要があるかもしれませんか?タイムスイープの代わりに周波数を乗算する必要があるのはなぜですか?
ヴァル

1
OPがすでにLTIシステムに関連する衝動の役割について質問をしていることを考慮して、私は彼がそれを例として使用して質問を読み、畳み込みがどこから来るのかについての質問を動機付けます-応答自体。それはあなたが求めていることですか?
データガイスト

1
それがフーリエ乗算と同一であるため、畳み込みが必要であると言うのは、なぜフーリエ乗算が必要なのかわからない場合、私には無意味に聞こえます。インパルス応答が与​​えられると、これはフーリエベースのブラックマジックではなく、時間領域と畳み込みを意味します。私はその質問への言及がこれを明確にするかもしれないとは思いません。いずれにせよ、一般的な基本的な(つまり、物理的な)質問に「ローカライズされた答え」を与えるのは良くありません。Q&Aは将来の訪問者にとって役立つものでなければなりません。
ヴァル

上記のValのコメントは目標に沿っています。フーリエ変換が発明/発見される前に、線形システムはどのように機能したのだろうか。どのように地球上の非衆生無生物は、このような複雑な式を発見しましたか?
ディリップサルワテ

6

私はかつてウィキペディアの畳み込みディスカッションページで答えを出しましたが、基本的に同じ質問をしました:なぜ時間反転ですか?。哲学は、時間0で単一パルスをフィルターに適用し、時間0、1、2、3、4、…で応答を記録することです。基本的に、応答は関数h(t)のようになります。プロットできます。パルスがn倍高い/高い場合、応答パルスは比例して高くなります(これは、線形フィルターが常に想定されるためです)。さて、DSPだけではなく、すべてのDSPは、信号にフィルターを適用したときに何が起こるかについてです。インパルス応答を知っています。信号(特にデジタル)は、高さx(t)の一連のパルスにすぎません。時刻tに高さ/値ますxt。線形システムは優れているため、このような各入力パルスの出力を合計して、入力関数x(t)の応答関数y(t)を取得できます。出力パルスy(t = 10)は、h(0)* x(10)に寄与する即時入力x(10)に依存することを知っています。しかし、前のパルスx(9)からの出力への寄与x(9)* h(1)、および以前の入力値からの寄与もあります。前の入力からの寄与を追加すると、ある引数が減少し、別の引数が増加することがわかります。もしMAC畳み込みであるY(10)= H(0)* X(10)+ H(1)* X(9)+ H(2)* X(8)+ ...、にすべての貢献。

関数y(t)、h(t)およびx(t)はベクトルと考えることができます。行列は線形代数の演算子です。入力ベクトル(一連の数字)を受け取り、出力ベクトル(別の一連の数字)を生成します。この場合、yはベクトルxの畳み込み行列の積です。

y=[y0y1y2]=[h000h1h00h2h1h0][x0x1x2]=Hx

これで、畳み込みはテプリッツ行列であるため、フーリエ固有基底を持ち、したがって、畳み込み演算子(線形演算子は行列で表されますが、行列も基底に依存します)はフーリエ領域のすてきな対角行列です。

Y=[Y0Y1Y2]=[λ0000λ1000λ2][X0X1X2]=diag(H)X

はるかに多くのゼロ、したがって、はるかに簡単な計算に注意してください。この結果は「畳み込み定理」として知られており、最初の回答が答えたように、フーリエ領域でははるかに簡単です。しかし、これは、たたみ込みのユビキタスな必要性ではなく、「畳み込み定理」、フーリエ基底、線形演算子の背後にある物理学です。

通常、入力信号、インパルス応答があり、時間領域で出力する必要があるため、畳み込みを行います。計算を最適化するためにフーリエ空間に変換できます。しかし、DSPGuideで見たように、単純なフィルターには実用的ではありません。フィルターが、フーリエ変換には意味がありません。すべてのyを計算するために、n回の乗算を行うだけです。リアルタイムでも自然です。リアルタイムでは、一度に1つのyのみを計算します。信号xを記録していて、ベクトルy全体を一度に計算する必要がある場合、フーリエ変換を考えることができます。これにはNxN MAC操作が必要であり、フーリエはそれらをN log(N)に減らすのに役立ちます。y[currentTime]=k1x[time1]+k2x(time2)+by[time1]


いくつかのメモ:連続時間の場合(明らかに離散時間の場合の前に明らかになった)にこの説明をどのように拡張しますか?また、高速畳み込みのためにフーリエ変換ベースの方法を使用する多くのリアルタイムアプリケーションがあります。リアルタイムアプリケーションの出力は常に一度に1つずつ計算されると言うのは正しくありません。
ジェイソンR

そうは言っても、畳み込み行列のテプリッツ構造は、フーリエ基底の下で対角表現を受け入れることを意味するという事実を指摘する素晴らしい仕事です。
ジェイソンR

はい、リアルタイムでフーリエ変換を使用できますか。私はDSPの専門家ではありません。アイデアを表明しただけです(私は希少な練習とDSPGuideを読んで得ました)。とにかく、フーリエが畳み込みの物理学とは何の関係もないことを強調したいと思います。気が散るので、フーリエ関連の議論をすべて削除する必要があるかもしれません。畳み込みは時間領域で自然であり、フーリエがどれほどクールであっても、フーリエなしで必要です。
ヴァル

連続時間のケースが歴史的に前に来たという事実は、私たちが同じ順序で学ぶ必要があることを私たちに要求しません。離散的なケースから始めて、畳み込みを含む多くの事柄の哲学を理解する方が簡単だと思います(そして、このアプローチを取るためにD SP.seにいます)。連続ケースでは、パルスをますます短くするため、一連のMAC操作が統合に変わります。ところで、統合自体離散総和の限界事例として理解されるF X D 、X = LIM D X 0Σf(x)dx。したがって、離散加算の前に来ることはできません。f(x)dx=limdx0(f(x)dx)
ヴァル

@JasonR連続設定では、テプリッツ行列をシフト不変演算子で置き換えます。その後、フーリエ基底関数がこの演算子を対角化することを示すことができます。
lp251

3

これまでの答えは本当に良かったですが、畳み込みについての私の視点を付け加えたいと思います。ここでは、数字のために視覚化を簡単にします。

与えられた入力信号に対してシステムの出力信号を決定できる方法があるかどうか疑問に思います。システムが線形で時不変(LTI)であれば、畳み込みはその質問に対する答えです。

s[n]s[n]s[n]mδ[nm]δ[nm]n=ms[n]nmnmn=ms[m]

ここに画像の説明を入力してください

s[n]δ[nm]=s[m]δ[nm]
m
s[n]δ[nm]=s[m]δ[nm]

s[m]<m<s[n]

s[n]=+s[2]δ[n+2]+s[1]δ[n+1]+s[0]δ[n]+s[1]δ[n1]+s[2]δ[n2]+=m=s[m]δ[nm]

s[n]δ[nm]s[m]

ここに画像の説明を入力してください

h[n]

ここに画像の説明を入力してください

これは、次のような入出力シーケンスにつながります。

ここに画像の説明を入力してください

r[n]s[n]h[n]

畳み込みは非常に論理的で単純なプロセスですが、多くのDSP学習者は、説明の仕方により混乱を招くことがあります。従来の方法と、より直感的な別のアプローチについて説明します。

従来の方法


n

r[n]=m=s[m]h[m+n]mh[m]m=0h[m]

h[m+n]nh[m]nnn

s[m]h[m+n]s[m]h[m+n]

n

n

s[n]=[211]h[n]=[112]r[n]n

s[n]h[n]nmnh[m]s[m]r[n]nh[m]

ここに画像の説明を入力してください

次に、信号を反転する必要のない、より直感的な方法に移ります。

直感的な方法


r[n]

r[n] = +s[2]h[n+2] +s[1]h[n+1] +s[0]h[n] + s[1]h[n1] + s[2]h[n2] +
s[n]=[2 11]h[n]=[112]

ここに画像の説明を入力してください

このような方法を次の図に示します。実装の観点からは、両方の方法に違いはありません。

ここに画像の説明を入力してください

要約すると、畳み込みは特定の入力に応答してLTIシステムがどのように動作するかを示し、上記の直感的な方法のおかげで、畳み込みは時間領域での乗算でもあると言えます(信号を反転する必要はありません)この時間領域の乗算にはメモリが関係します。フリップがどこから来て、周波数領域で何が起こるかをより深いレベルでさらに理解するために、ここの私の本からサンプルセクションをダウンロードできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.