我正在使用dsp库和dsp.biquad
函数来实现butterworth IIR过滤器。我在创建过滤器时设置初始值,如下所示:
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);
我想定期重置滤镜,当我这样做时,初始值会有所不同。双二次重置功能不允许我传递一个初始值,因此我只需通过调用上面的方法重新创建过滤器。
但是,我认为这可能有点慢。我没有测量它,但它被频繁调用。任何人都可以建议一种方法将过滤器重置为任意初始值?或者是否有其他图书馆可以让我这样做?
答案 0 :(得分:0)
您可以调用dsp.BiquadFilter的release方法,然后将InitialConditions设置为其他值。下次计算输出时,应自动选取新的InitialConditions值。与不调用release方法相比,这会导致轻微的减速。但这应该比重新创建对象更快。
lowpassIIR_minutes = dsp.BiquadFilter( ...
'Structure', 'Direct form II', ...
'SOSMatrix', [1 1 0 1 -0.999455396157461 0], ...
'ScaleValues', [0.00027230192126942; 1],...
'InitialConditions', initialValue./2);
out = lowpassIIR_minutes(in);
release(lowpassIIR_minutes);
lowpassIIR_minutes.InitialConditions = initialValue/5;
out = lowpassIIR_minutes(in); % Uses new InitialConditions