フォワードバックワードフィルタリングで過渡を最小化するためのGustafsonのアルゴリズムに精通している人はいますか[1]?私はそれを実装しようとしていますが、私の最初の推測は、Matlabのfiltfilt.mをチェックすることでした。Matlab関数では、起動過渡を最小化する初期条件ziを見つけるために線形方程式系も解かれますが、参照とコードの関係は私には明らかではありません。最小化に関するコードの行は次のとおりです(nfiltは係数ベクトルの長さです):
zi = ( eye(nfilt-1) - [-a(2:nfilt), [eye(nfilt-2); zeros(1,nfilt-2)]] ) \...
( b(2:nfilt) - b(1)*a(2:nfilt) );
それらの行がGustafsonの記事で説明されているアルゴリズムとどのように関連しているかについて、誰かが正しい方向に私を指摘できますか?
[1] Gustafsson、F。「フォワードバックワードフィルタリングでの初期状態の決定」信号処理に関するIEEE®トランザクション。巻。44、1996年4月、988〜992ページ。
filtfilt()
ので、理由がわかりません。私はGustafsonの論文を読んでいません(IEEEではないため、無料で入手することはできません。コピーを持っている人は誰でも、その.pdfをメールで送信してください)。の概念を使用するfiltfilt
場合、サンプルのファイル全体に対して行うことができます(私にとっては、.wavのようなオーディオファイルまたはサウンドファイルです)最初に、最後にゼロが埋め込まれたサウンドを前方にフィルタリングします。フォワードフィルターのインパルス応答が期待されます。これによりファイルが長くなりますが、出力は実質的にゼロになります。次に、結果のファイルをフィルターで逆方向に実行します。
filtfilt
、入力をサンプルのブロックに分割し、各ブロックをゼロパディングし、ブロックを後方にフィルタリングしながら、「テール」を前方に反転させたままにする別の用途があります。オーバーラップ加算。Powell-Chauはこれを実行しませんでしたが、これはTruncated IIRフィルターの優れたアプリケーションであると考えているため、減衰ブロックの出力がいつ終了するかがわかります。