dsp biquad过滤器重置为初始值

时间:2017-05-03 14:14:01

标签: matlab filter signal-processing

我正在使用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);

我想定期重置滤镜,当我这样做时,初始值会有所不同。双二次重置功能不允许我传递一个初始值,因此我只需通过调用上面的方法重新创建过滤器。

但是,我认为这可能有点慢。我没有测量它,但它被频繁调用。任何人都可以建议一种方法将过滤器重置为任意初始值?或者是否有其他图书馆可以让我这样做?

1 个答案:

答案 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