1

0.1 Hz から 50 Hz の範囲でバンドパス フィルターを作成しようとしています。MATLAB の filterbuilder ツールを使用しているため、出力されるコードは次のようになります。

function y = filter050(x)

persistent Hd;

if isempty(Hd)

    Fstop1 = 0.1;    % First Stopband Frequency
    Fpass1 = 0.15;    % First Passband Frequency
    Fpass2 = 45;   % Second Passband Frequency
    Fstop2 = 50;   % Second Stopband Frequency
    Astop1 = 60;   % First Stopband Attenuation (dB)
    Apass  = 1;    % Passband Ripple (dB)
    Astop2 = 60;   % Second Stopband Attenuation (dB)
    Fs     = 500;  % Sampling Frequency

    h = fdesign.bandpass('fst1,fp1,fp2,fst2,ast1,ap,ast2', Fstop1, Fpass1, ...
        Fpass2, Fstop2, Astop1, Apass, Astop2, Fs);

    Hd = design(h, 'equiripple', ...
        'MinOrder', 'any');


    set(Hd,'PersistentMemory',true);

end

y = filter(Hd,x);

問題は、これが永久に実行されることです。フィルターは非常に低い周波数でサンプリング レートが 500 Hz であるため、多数のポイントが必要になることは理解していますが、信号をダウンサンプリングしたくありませんでした...回避する方法はありますか?

また、ダウンサンプリングを試みて、より高速に動作するかどうかを確認し、100 Hz にダウンサンプリングしても永久に動作します。

4

2 に答える 2