Ich benutze die dsp Bibliothek und die dsp.biquad
Funktion, um einen Butterworth IIR Filter zu implementieren. Ich gründe einen Anfangswert, wenn ich die Filter zu erstellen, wie unten dargestellt:dsp biquad Filter zurückgesetzt mit anfänglichen Werten
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);
Ich mag die Filter regelmäßig zurückgesetzt, und wenn ich das tut, werden die Anfangswerte unterschiedlich sein. Die Biquad-Reset-Funktion erlaubt es mir nicht, einen Anfangswert zu übergeben, daher erstelle ich den Filter gerade neu, indem ich das obige aufrufe.
Allerdings denke ich, dass dies ein bisschen langsam sein könnte. Ich habe es nicht gemessen, aber es wird ziemlich häufig genannt. Kann jemand vorschlagen, den Filter auf einen beliebigen Anfangswert zurückzusetzen? Oder gibt es eine andere Bibliothek, die mir das erlauben würde?
Hallo Navan, danke, tolle Antwort. Der Aufruf des Filterobjekts mit der Eingabe als Parameter funktioniert bei mir nicht, aber wenn ich diese durch 'step (lowpassIIR_minutes, value); 'ersetze, dann funktioniert es gut. Wollten Sie auch den Teiler auf den Anfangswert ändern? –
Das Aufrufen des Filterobjekts mit den Eingabedaten ist eine neuere Syntax. Bei älteren Versionen müssen Sie die Schrittmethode aufrufen. Ich habe den Teiler im Anfangswert geändert, nur um die Einstellung des unterschiedlichen Anfangswertes anzuzeigen. – Navan