2016-04-09 22 views
1

私は機能sos2tfが異なる作成されていることを指摘しているがC.MatlabのIIRフィルタ伝達関数

にフィルタをコーディング、フィルタを設計するとするために、伝達関数の係数abを取得するためにMATLABを使用してい期待値よりも実際にfvtoolを使用してba係数を使用してフィルタを表示すると、フィルタはsos行列または実際のフィルタfを使用してプロットしたものとは異なります。

以下のコードを試してみると、私が言っていることをよりよく理解できます。これはMATLABの関数問題ですか?必要なフィルタ係数を与える代替品をsos2tfに使用できますか?または、最初にsosを使用せずに直接検索することはできますか?

designfiltを使用して試した結果、tf関数を使用した結果、以下のコードで得られた係数と正確に等しくなりました。それはどちらか私のために働いていないようおかげであなたの助け

H = fdesign.lowpass('Fp,Fst,Ap,Ast',60,75,1,60,10000); 
f = design(H,'butter','MatchExactly','passband'); % Design an FIR BW filt 
info(f)     % View information about filter 
fvtool(f); 
[b,a] = sos2tf(f.sosMatrix); 
fvtool(b,a); 
+0

使用しているフィルターの仕様とサンプリング周波数を教えてください。 – VMMF

答えて

0

のために私は、問題が何であるかを正確に知りませんが、私はあなたのフィルタ係数を取得するための回避策を提供するつもりです。 Matlab Command Windowのfdatoolタイプでは、フィルタ設計アプリケーションのウィンドウがポップアップし、必要なパラメータを適切に選択してフィルタを設計します。完了したら、そのfdatoolウィンドウでFile-> Export-> Export As-> Coefficientsを選択します。その同じツールから、File-> matlab code-> Filter design function(または3つのオプションのいずれか)を選択することができます。そして、あなたがあなたの質問に投稿したコードにある可能性のあるバグを排除します。それは私がそれを行う方法です、それはいつもうまくいっています

+0

しかし、これは私が必要とするaとbのベクトル係数を生成しません... – fbdg

+0

たとえフィルタを使っていても、係数を抽出するためにtfを適用しても、オリジナルよりはるかに優れています。私が気にするのは、fvtoolをsos値に適用すると、fvtoolをtfベクトルに適用すると、フィルターが設計どおりに出てくることです。 – fbdg

関連する問題