2

多くのローパスフィルターのカットオフ周波数を見つけたいです。そのため、それを行うことができる関数が必要です。ボード線図を作成して、-3dB の周波数を見つけることはできますが、それは退屈で時間がかかります。この手順を自動化する方法を誰かが知っていますか? 私は試していました

[mag,phase] = bode(sys) 

しかし失敗しました。これについてどうすればよいですか?

利用可能なフィルター係数abあります。変換関数を離散化するときにいくつかの異なる手法を使用しようとしているため、EKV から経験的にカットオフ周波数が必要です。

y_k = b(1)*x_k + b(2)*x_{k-1} – a(2)*y_{k-1}
4

3 に答える 3

5

LTI オブジェクト (伝達関数など) に対してbandwidthコマンドを使用できます。

G = tf(1, [1 1])
bandwidth(G)

ans =

    0.9976
于 2012-08-24T14:13:43.597 に答える
2

Control System Toolbox がない場合は、次のように実行できます。

% some filter
[b, a] = butter(5, 0.6);

% Determine frequency response
[h, w] = freqz(b, a, 2048);

% linear approximation of 3 dB cutoff frequency
ind = find(abs(h) < sqrt(1/2), 1, 'first');
slope = (abs(h(ind)) - abs(h(ind - 1))) / (w(ind) - w(ind - 1));
w_3dB = ( sqrt(1/2) - abs(h(ind - 1)) + slope * w(ind - 1) ) / slope;

% check result
figure; plot(w,abs(h))
hold on;
plot(w_3dB, sqrt(1/2), 'rx');

加えて、DSP ツールボックス for が必要になりますfreqz()

于 2012-08-24T14:42:38.137 に答える
0

matlabには、カットオフ周波数と「freqz」と呼ばれる関数を与えることができる関数があります

フィルター係数 'a' と 'b' が既にわかっている場合。次に、freqz は 2 つの変数出力を提供します。1 つの変数には複素ゲインが格納され、もう 1 つの変数には正規化された周波数が格納されます。基本的に必要なことは、パスバンド ゲインから 3dB 引いた値に最も近いゲインを見つけるループを実行することだけです。次に、頻度変数の対応するインデックスを読み取ると、答えが得られます。

于 2015-11-28T19:40:10.047 に答える