【发布时间】:2014-04-09 23:29:41
【问题描述】:
我正在尝试在 Matlab 中应用巴特沃斯滤波器。我已按如下方式设置过滤器:
[z,p,k] = butter(5,[30/2000,1000/2000]);
即在 30 Hz 以下和 1000 Hz 以上截断(以 2000 Hz 采样)
输入数据是更大矩阵 A 中的一列。
然后我按如下方式应用过滤器:
M=filter(z,p,A(:,2));
并且也尝试过:
M=filtfilt(z,p,A(:,2));
A 有 1577563 行。过滤器返回实际值,最高可达约 1700 行,但之后条目为 NaN。我尝试从A(:,2) 中提取一些值,这些值在 M 中生成 NaN,但是这些返回数字本身,所以我假设它与 A 的长度有关,而不是与特定值有关。这似乎是过滤函数的不稳定性,因为 NaN 的开始在不同的测试中有所不同。
我尝试过降低阶数,但使用二阶甚至一阶过滤器得到了类似的结果。
如果有办法我很乐意将数据上传到A(:,2),但是我不确定如何在 StackExchange 中执行此操作。
【问题讨论】:
-
我猜
NaN发生在某处的0/0操作中。我以前从未见过这种情况,请问您的信号是否静止?或者信号有多大(大约)? -
我将其应用于几个不同的数据集,并为每个数据集遇到相同的问题。平均信号强度为 0.1 - 1。我注意到通过将滤波器的阶数增加到 n,NaN 开始的点增加到 ~9900。
-
好的,但是信号不仅仅取值在 0-1 之间,对吧?也就是说,它的平均值是否接近于 0?
-
我尝试将其应用于的 4 个信号的平均值是 0.0778、0.0251、0.0419 和 0.2532。每种情况下的最大值为 0.9202、1.2755、2.2430 和 2.4905。最小值都是 10^-4 或 10^-5 的顺序。
-
嗯,可能和你想的一样,但显然某处还有更多代码,所以对我来说很难说。