私はdspライブラリとdsp.biquad
関数を使ってバターワースIIRフィルタを実装しています。私は、フィルタを作成するときに、以下のように私は、初期値を設定しています:初期値を持つdspバイカッドフィルタリセット
function [lowpassIIR_minutes] = createLowpassIIR_minutes(initialValue)
% The following code was used to design the filter coefficients:
%
% N = 1; % Order
% F3dB = 8.67e-05; % 3-dB Frequency
% Fs = 1; % Sampling Frequency
%
% h = fdesign.lowpass('n,f3db', N, F3dB, Fs);
%
% Hd = design(h, 'butter', ...
% 'SystemObject', true);
lowpassIIR_minutes = dsp.BiquadFilter(...
'Structure', 'Direct form II', ...
'SOSMatrix', [1 1 0 1 -0.999455396157461 0], ...
'ScaleValues', [0.00027230192126942; 1],...
'InitialConditions', initialValue./2);
私は定期的にフィルターをリセットしたいと私は行うとき、初期値が異なることになります。バイカッドのリセット機能では初期値を渡すことができませんので、私は上記を呼び出してフィルタを再作成するだけです。
しかし、これは少し遅いかもしれません。私はそれを測定していませんが、それはかなり頻繁に呼び出されます。誰もが任意の初期値にフィルタをリセットする方法を提案することはできますか?あるいは私にこれをさせる別の図書館がありますか?
こんにちはNavan、ありがとう、素晴らしい答え。入力としてパラメータを指定してフィルタオブジェクトを呼び出すことはできませんが、それらを 'step(lowpassIIR_minutes、value);と置き換えるとうまくいきます。また、初期値で分周器を変更しようとしましたか? –
入力データでフィルタオブジェクトを呼び出す方が新しい構文です。古いバージョンの場合は、stepメソッドを呼び出す必要があります。初期値の設定を変更するだけで、分周器を初期値に変更しました。 – Navan