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 にダウンサンプリングしても永久に動作します。