【问题标题】:dsp biquad filter reset with initial values用初始值重置 dsp 双二阶滤波器
【发布时间】:2017-05-03 14:14:01
【问题描述】:

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

我想定期重置过滤器,当我这样做时,初始值会有所不同。 biquad 重置函数不允许我传递初始值,所以目前我只是通过调用上面的方法重新创建过滤器。

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

【问题讨论】:

    标签: matlab filter signal-processing


    【解决方案1】:

    您可以调用 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
    

    【讨论】:

    • 嗨,Navan,谢谢,很好的回答。使用输入作为参数调用过滤器对象对我不起作用,但如果我用step(lowpassIIR_minutes,value); 替换它们,那么它工作正常。另外,您是否打算更改初始值的除法器?
    • 使用输入数据调用过滤器对象是一种较新的语法。对于旧版本,您需要调用 step 方法。我更改了初始值中的除法器只是为了显示不同初始值的设置。
    猜你喜欢
    • 2016-03-22
    • 2017-03-21
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 2020-11-19
    • 2011-03-04
    • 2021-01-20
    • 2018-10-02
    相关资源
    最近更新 更多