【发布时间】:2013-10-29 18:29:39
【问题描述】:
我正在尝试创建一个 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 并且仍然可以永远运行。
【问题讨论】:
-
"问题是它永远运行。"但是在“永远”之后的某个时间你会得到输出吗?还是真的“永远”永远运行下去?
-
可能你要求的太多了,过滤器的尺寸变得特别长,或者遇到了数值问题。
-
@thewaywewalk 好吧,它连续运行了大约 1 天,然后我就放弃了,因为它不是解决我的问题的好方法......编辑:下采样版本在几分钟内运行,我会说 10 左右,这还不错,但我真的很想使用整个数据...
-
@BasSwinckels 这就是我所担心的,有什么建议吗?