2

オーディオ サンプルで (デ) コンボリューションを実行しようとしています。1 つのサンプルsと、その上にいくつかのフィルターが追加された同じサンプルs_fがあります。両方のサンプルは、numpy 配列として表されます。分離フィルターfを表す配列を取得するために、それらをデコンボリューションしたいと考えています。これを行うと、 sfの畳み込みを使用してs_fを再現できるはずです。

コードは次のとおりです。

f = signal.deconvolve(s, s_f)
convolved = signal.convolve(s, f)

ただし、2行目に次のエラーが表示されます。

ValueError: in1 and in2 should have the same rank

ここで私が間違っていることを誰かが知っていますか?

どうもありがとう、オマー

4

2 に答える 2

3

deconvolve商と剰余の2 つの配列を返します。だから試してください:

f, r = signal.deconvolve(s, s_f)

長い間、deconvolve適切な docstring はありませんでしたが、github の master ブランチに 1 つありました: https://github.com/scipy/scipy/blob/master/scipy/signal/signaltools.py#L731

docstring は、 の使用例を示していますdeconvolve。ここに別のものがあります ( sigisscipy.signalnpis numpy):

デコンボリューションする信号はzで、フィルター係数は ですfilter

In [9]: z
Out[9]: 
array([  0.5,   2.5,   6. ,   9.5,  11. ,  10. ,   9.5,  11.5,  10.5,
         5.5,   2.5,   1. ])

In [10]: filter = np.array([0.5, 1.0, 0.5])

適用deconvolve:

In [11]: q, r = sig.deconvolve(z, filter)

In [12]: q
Out[12]: array([ 1.,  3.,  5.,  6.,  5.,  4.,  6.,  7.,  1.,  2.])

にフィルターを適用して、qが返されることを確認しますz

In [13]: sig.convolve(q, filter)
Out[13]: 
array([  0.5,   2.5,   6. ,   9.5,  11. ,  10. ,   9.5,  11.5,  10.5,
         5.5,   2.5,   1. ])

構造上、これは非常にクリーンな例です。剰余はゼロです。

In [14]: r
Out[14]: array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])

もちろん、常に良い結果が得られるとは限りません。

于 2013-06-12T13:09:46.123 に答える