2011-12-06 13 views

答えて

10

filterはFIRおよびIIRシステムを処理できますが、convは2つの入力を受け取り、その畳み込みを返します。従ってconv(h,x)filter(h,1,x)は同じ結果を与えます。 1 inフィルタは、フィルタの再帰係数がちょうど[1]であることを示します。しかし、IIRフィルタを使用している場合は、convを使用することはできません。 filterは、フィルタの状態を返すこともできるため、後続の呼び出しでフィルタの過渡現象を発生させることなく使用できます。

詳細については、convおよびfilterのドキュメントを参照してください。

+0

私はそれがIIRシステムで、私が 'conv'を使うと、' h'の長さに等しいサンプル量だけ正しい出力を得ます。あれは正しいですか? – nikos

+2

フィルタH(z)= [1 - 2z^-1 + z^-2]/[1 - z^-1] 'を考えてみましょう。入力を 'x = [1 0 0 0]'に設定すると、 '[1 -2 1 0]'と 'conv([1、-2,1]、x)'と 'フィルタ([1、-2,1]、[1、-1]、x)を使って[1 -1 0 0]を返します。 – mtrw

+4

実際、 'conv(b、x)'と 'filter(b、1、x)'は**まったく同じ**ではありません。 'filter'は' x'と同じ長さの出力を与え、 'conv'は' length(x)+ length(b)-1'の長さの出力を与えます。 – LWZ

8

conv(x,b)は、完全な畳み込みを実行します。結果の長さはlength(x)+ length(b)-1です。 filter(b,[1],x)は、xと同じ長さの出力を返します。フィルターのディレイラインをフラッシュしません。

xは行ベクトルです。 Make x0 = [x zeros(1,length(b)-1)];今filter(b,[1],x0)conv(x,b)と同じです。これは、遅延ラインをフラッシュするために追加の0が使用されるためです。

どちらがより合理的ですか?それはあなたが必要なものに依存します!

関連する問題