• ベストアンサー

畳み込み

ある回路の出力y(t)は,回路のインパルス応答がf(t)のとき,入力x(t)との畳み込みによって y(t)=f(t)*x(t)=∫(-∞,∞)f(τ)(t-τ)dτ です.(*は畳み込み演算) さて,出力と応答特性から入力を求める場合は,どうするのでしょう?時系列データが等時間間隔でないため,fftが使えないので困っています.

  • tkfm
  • お礼率76% (20/26)

質問者が選んだベストアンサー

  • ベストアンサー
noname#11476
noname#11476
回答No.6

書き方にちょっと誤解があったかもしれませんので。 >やはりFFTが正統なのでしょうね ガウス-ザイデルの方法は、FFTは使いません。 直接デコンボリューション(内部ではコンボリューションもしている)を行う手法です。 > #3にも書きましたとおり,補完してFFTでやってみました. > 今のところ,期待した結果とはなっておりません. 単純にFFTして、わり算して求めても、測定値が実測の場合はノイズの影響でうまく復元しないでしょう。 実測データに対してやらなければならない手順は、 1.データ補間  No.5の方の言われる窓関数を使った方法はかなり有効です。  詳しくはNumerical Recipes in C などの本を参照して下さい。 2.ノイズフィルタで可能な限りノイズの除去  窓関数を使う方法をとれば、同時にフィルタの役目もしますので、これは必要なくなります。  保管方法によってはこれがないとまともな結果が得られません。 3.デコンボリューション  もっとも数学的にわかりやすいのはガウスザイデルの方法(ガウスの消去法で連立方程式を解く)ですね。  これ以外にも沢山の方法が考案されています。 h(t)が推定とのことですが、それだけではそれらしい結果が得られない理由にはなりません。 うまくデコンボリューション出来ない理由の大半はノイズによる影響です。 このデコンボリューションというのはかなり難しく、色々なやり方が研究されています。 デコンボリューション(deconvolution)、ガウス、ウィナーフィルタなどでwebを検索すると色々出てくると思いますよ。 では、がんばって下さい。

その他の回答 (5)

  • nuubou
  • ベストアンサー率18% (28/153)
回答No.5

yの帯域に上限があることがはっきりしている場合には 直線補間より高度な sin(x)/xを使う方法があります これだと無限個のサンプリング値を必要とするので 窓関数w(x)をかけて w(x)・sin(x)/x を補間に使うと良いでしょう するとサンプリング値を補間点近辺に限定できます サンプリング間隔が大きいと単なる直線補間は余りにも荒すぎます

noname#11476
noname#11476
回答No.4

>逆畳み込み積分は応答関数の複素共役と畳み込み積分をするということで良いのでしょうか? どのようにイメージされているかが、今一つ理解できませんでしたが、 y(t) = f(t) * x(t) の操作をしてy(t)を得ているという点はよろしいわけですね。 原理的には、No.1の方が書いたように、フーリエ変換で表すと、x(t)をy(t)とx(t)から逆算出来ることになります。 (これが最も簡単で早い解法です) が、もし実測波形の場合は、 y(t) = f(t)*x(t) + n(t) とノイズの項n(t)が入ってしまうために、最もx(t)に近い波形を推定しなければ求めることが出来ません。 ノイズn(t)も実測できれば良いのでしょうけど、事実上無理ですよね? また、わずかなノイズでもx(t)に大きく影響してしまうためにうまく復元できません。 なお、どの手法を選ぶにしてもデータは等間隔でないと、扱いがとても面倒(私にはその扱い方は理解できませんでした)なので、普通は補間などの方法で、等間隔にマッピングし直して処理します。 >単に相関を取ったのではなぜだめなのでしょうか? デコンボリューションは、応答関数f(t)によってゆがめられた信号から、元の波形を推定することになりますので、相関(コリレーションの意味ですか?)では解けないと思いますが。 それとも相関という意味を、最小2乗法でfittingするようなイメージで使われていますか? ならば、ガウス-ザイデル法がそれに該当します。 y1(t) = f(t) * x1(t) x1(t)を初期値として、y(t)-y1(t)の残差から、次のx2(t)を推定して、また残差をみて、、、と繰り返して、残差が小さくなるようなxn(t)を求めることで、元波形を推定します。 では。

tkfm
質問者

お礼

またまた回答ありがとうございました.経過報告です. 本屋にて信号処理関係を漁りましたが,直接デコンボルーションをする方法については全く見つかりませんでした.やはりFFTが正統なのでしょうね. #3にも書きましたとおり,補完してFFTでやってみました. 今のところ,期待した結果とはなっておりません. 元データが2万5000点を,補完して2万点にしてしまったので,この時点でおかしいかも知れません.もう少しやってみます. 又,f(t)またはf(ω)が正確に判っているわけでは無く,判っているのは時定数だけなのです.mHz程度の応答であるため,手持ちの測定器では調べることもままならずというところです. このセンサ自体にヒステリシスも含まれているようなので,計測方法自体も見直すことにします.

  • nuubou
  • ベストアンサー率18% (28/153)
回答No.3

出力信号を直線補間をして等間隔にあるデータを求めfftを行えばいいと思います もし精度を上げたかったら高次補間をすればいいと思います xが未知なのだからfは予測値で我慢するしかありません

tkfm
質問者

お礼

補完処理->FFTしてみました. f(t)は一次遅延で時定数のみが判っており,そのまま計算したのでは期待した結果は得られませんでした. きっと周波数特性が一致していないのだと思います.他にもヒステリシスが含まれていそうで,これらを元信号からできる限り除去しないと,信号処理だけでは厳しいようでした. 助言ありがとうございました.

noname#11476
noname#11476
回答No.2

その操作は、一般に「逆畳み込み積分」または「デコンボリューション」と呼ばれます。 やり方は実に様々あるので、お探しになってみて下さい。一番簡単なのはガウス-ザイデルの方法です。 (連立一次方程式を解く形となります) データが等時間間隔でない場合は、扱いが大変面倒なので、一度等時間間隔の空間へ補間などを用いてマッピングし直してから計算すると良いでしょう。 観測波形にノイズなどがあると、強調されてしまいますので、事前にフィルタリングが必要になったりします。 (単純なFFTによる復元では、このノイズのために実用にはなりません。) では。

tkfm
質問者

お礼

回答ありがとうございます. まだよく判っていないのですが,逆畳み込み積分は応答関数の複素共役と畳み込み積分をするということで良いのでしょうか? 単に相関を取ったのではなぜだめなのでしょうか?

  • nuubou
  • ベストアンサー率18% (28/153)
回答No.1

Y(ω)=∫dt・exp(-i・ω・t)・y(t) X(ω)=∫dt・exp(-i・ω・t)・x(t) F(ω)=∫dt・exp(-i・ω・t)・f(t) とする Y(ω)=F(ω)・X(ω) であるから X(ω)=Y(ω)/F(ω) である これより x(t)=1/(2・π)・∫dω・exp(i・ω・t)・X(ω) =1/(2・π)・∫dω・exp(i・ω・t)・Y(ω)/F(ω) もしy(t)が y(t)=Σ(n)・x[n]・δ(t-t[n]) と表されるならば Y(ω)=Σ(n)・x[n]・exp(-i・ω・t[n]) である ただしiは虚数単位である(jにしたほうがいいと思いますが) x(t),y(t),f(t)のうち何が時系列データになるのですか? adc、dacがどこかには行っているのでしょうか? もっと詳しい構成を教えてください

tkfm
質問者

お礼

回答ありがとうございます. 得られているのはtとy(t)だけで,f(t)というのは部品カタログからの予測値です. y(t)の測定が等時間間隔で無い(ある条件から外れたときはデータを取り込まないようになっているため),fftは使えないのです. tが判っているので,フーリエ積分をコツコツやればいいのかと思ったのですが,やはり等時間間隔で無いでない為,積分値に誤差が生じてしまいそうです. そのためフーリエ積分を用いないでやればいいのかと思ったのでした.

関連するQ&A

  • 畳み込み積分 での インパルス応答

    畳み込み積分で x(t)*h(y) = h(t)*x(t)  このように、交換法則が可能ということは、 式だけ与えられて、入力がどちらであると示されてない場合、 x(t)が入力、h(t)がインパルス応答、というこどもでき h(t)が入力、x(t)がインパルス応答 ということもできる。 と考えていいのでしょうか? (つまりどっちもインパルス応答になり得るのでしょうか?) よろしくおねがいします。

  • 畳み込み積分と畳み込み和の違いについて

    畳み込みについて勉強し始めたばかりなのですがどうしてもわからないとことがあったため投稿させていただきます。 私は以下のurlから畳み込み和について考えていました。 http://www.ic.is.tohoku.ac.jp/~swk/lecture/yaruodsp/conv.html ここでは、単位インパルスδ(t)から応答関数h(t)を考え入力信号x(t)を離散化し、応答関数をそれぞれの入力の大きさで倍にしてその値を重ね合わせで出力信号y(t)を計算していると私は理解しています。 ここで、畳み込み積分を考えますと畳み込み積分は y(t)=∫h(τ)x(t-τ)dτ となりますので、応答関数h(t)と入力信号x(t)に関してその時間に応じた面積を計算しているんだろうなーという風に考えています。 以下のurlにある入力信号と出力信号が矩形波の図からそのことを考えました。 http://ja.wikipedia.org/wiki/%E7%95%B3%E3%81%BF%E8%BE%BC%E3%81%BF そこで疑問が浮かびました。 上で示す畳み込み和による考えならば wikiに書いてあるような矩形波と矩形波の畳み込みを考えるときに 単純に出力を足し合わせていくと最大値が1ではなくもっと大きな値になるんではないでしょうか?? おそらく自分が理解できていないところがまだあるんだと思います。 馬鹿な質問かもしれませんが、何日か悩んでもよくわかりません。 よろしくお願いします。

  • 畳み込み積分とインパルス応答

    畳み込み積分とインパルス応答 畳み込み積分 「∫ f(t-τ) g(τ) dτ」において、 g(τ)=dx(τ)/dτ はインパルス応答である・・・という部分が分かりません。 x(τ)はステップ応答ですよね? (入力前の信号に視点を戻して)τ範囲を縮めていくと、ステップ信号→インパルス信号の様になりそうですが、 インパルス信号→τ=0において∞の値をとり、∞(値)×1/∞(幅)=1 ステップ信号 →τが0以上の範囲において、常に1という値をキープ         →τの幅をいくら縮めても、値は1であり、インパルスの様に∞にはならない であるので、ステップの幅を縮めても、インパルスにはならない様に思うんです。

  • 畳み込み積分と畳み込み演算

    こんにちは。 今、ディジタル信号処理についてレポートを作成しています。 その中で、畳み込みについて書こうと調べているんですが、 手元にある参考書などをみてもよくわからないんです。 まずひとつ、 Σx(t)y(t-i) この式で表されるものを、畳み込み演算と言うのだと思っていました。 しかし過去の質問を見て、これは実は畳み込み和と言うのではないかなと思ったのですが、畳み込み和でいいのでしょうか? そして、畳み込み積分と畳み込み和は、一体何が違うのかがよくわかりません。 畳み込み積分と畳み込み和は、具体的に何が違うのか? どのような時は畳み込み積分で、どのようなとき畳み込み和なのか? また、畳み込み和→畳み込み積分(orその逆)のように、 式の変形で導き出すことはできるのでしょうか? 畳み込み和は、行列の形に表せること、 これをシステムとして実現したものがFIRフィルタであることはわかります。 畳み込み積分については、 ∫h(t-τ)x(τ)dτ=h(t)*x(t) という式であることぐらいしかわかりません; できるだけ詳しく教えていただけると助かります。 よろしくお願いします。

  • デルタ関数の畳み込み

    f(t)*δ(t-T)=f(t-T) を証明せよ。という問題なのですが ∫[-∞,∞]δ(x-T)f(t-x)dx と畳み込みをし、その後 x-T=τと変数変換を行いf(τ+t-T)を作ろうとしたのですが うまくいきませんでした。 この畳み込みの後どのように行えば証明できるでしょうか? お願いします。

  • 畳み込みについて

    関数f(t) (0≦t≦1のときf(t)=1、other f(t)=0)と関数h(t) (0≦t≦1のときh(t)=-t+1、other h(t)=0)の畳み込み積分y(t)=∫f(τ)h(t-τ)dτを実際に数値を入れて計算しろと言われたのですが、どのようにやったらいいのかわかりません。 自分の解釈では、τ=0.1のとき、y(t)は、y(0)=1.0、y(1)=1.9、y(2)=2.7、y(3)=3.4、y(4)=4.0 … となるのでは?と思ったのですがどうも違うみたいです。どなたかわかる方がいましたらわかりやすく解説していただけないでしょうか?

  • インパルス応答は、入力信号をf(t)、出力信号をg(t)、インパルス応

    インパルス応答は、入力信号をf(t)、出力信号をg(t)、インパルス応答関数をh(t)とすると、畳み込み積分∫[0→t]f(τ)h(t-τ)dτで表されると思うのですが、この積分に従うとすれば、g(t)やh(t)がどんな関数であってもg(0)=0となると思います。 一方で、g(0)=f(0)h(0)=f(0)なので、f(0)もh(0)もゼロではないとすると、g(0)≠0となるような気がします。 何か勘違いをしていると思うのですが、どこが間違っているのかわからないので、教えて頂けないでしょうか。よろしくお願いします。

  • 畳み込み積分と線形性、時不変性、因果性について

    こんにちは。見ていただいてありがとうございます。 今専門の勉強をしていて、たたみ込み積分がでてきたのですが、 良く分らなくてつまずいています。 よろしければご指導お願いします。 問題は、y(t)=∫[-∞→∞]x(τ)h(t-τ)dτなるインパルス応答h(t)が存在するとき、 この関係を畳み込み積分というが、この場合、システムの線形性、時不変性、因果性について判定せよ。 というものです。 線形性も時不変性も分るのですが、畳み込み積分のこの式からどう判定していいのか分りません。 考え方から分らないので、解説していただけると助かります。 よろしくお願いします(> <)

  • 微分要素のインパルス応答の周波数領域

    先日MATLABで次のような波形を作りインパルス応答を調べました。 入力x(t)=sin波 出力y(t)=微分フィルタのよって出力された波形(cos波) X=fftshift(fft(x)),Y=fftshift(fft(y))として H=Y./X としたところ、添付画像のような結果が得られました。 時間領域でのインパルス応答h(t)は以前同じような質問がなされていたので理解できましたが、この周波数領域(ラプラス変換をするならばS領域)でこのような結果が得られる理由をご教授いただきたく思います。 私の考えうる限りでは、周波数領域で考えれば Y(ω)=iωX(ω) (Xを微分すればiωが前に出るため) H(ω)=iω となり少なくとも添付画像のように実数部が値を持ったり、虚数部が値を持つことがないと思うのですが・・・ ※ t=((1:N)-1)*(T/N) omega=((1*N)-N/2)*(2*pi/T) と設定しました。 どうかよろしくお願い致します。

  • 畳み込み積分の交換律の証明

    今、学部レベルのデジタル信号処理の教科書を読み直しているのですが、畳み込み積分の記述で疑問に思ったことがあります。 畳み込み積分では交換律が成り立ちますが、 f(t) * g(t) = g(t) * f(t) ... (1) これをどのように証明したらよいか分かりません。 ちなみにWikipediaではこれについての解説が「積分演算に由来する性質」とあるのみで参考になりませんでした。 (1)の両辺を展開すると \int f(x)・g(t-x) dx = \int g(x)・f(t-x) dx と、なります、多分、これの両辺が等しいことを証明すればいいと思うのですが、そこから先に進めません。(僕のデスクトップでは2バイト文字の積分記号が出てこないので\intと書きました) どうぞよろしくお願いいたします。