【发布时间】:2017-03-03 20:40:56
【问题描述】:
我在 MATLAB 中使用具有属性的数字滤波器。我使用 designfilt 设计了这个过滤器。我已将过滤器对象 filt(1) 定义为:
digitalFilter with properties:
Coefficients: [20x6 double]
Specifications:
FrequencyResponse: 'bandpass'
ImpulseResponse: 'iir'
SampleRate: 1000
PassbandFrequency1: 59.9000
PassbandRipple: 3
StopbandAttenuation2: 80
StopbandAttenuation1: 80
PassbandFrequency2: 60.0800
FilterOrder: 40
DesignMethod: 'ellip'
同样,我在 filt 对象下还有其他过滤器,例如 filt(2)、filt(3) 到 filt(8),每个过滤器的频率都不同。
现在,由于某种原因,当我的程序尝试运行该行时,我得到了错误:
Q = filter(filt(1),x);
其中,x 是一个 600000x1 的列向量,只有正负实值(类似于长正弦波)
我得到的错误是:
Subscript indices must either be real positive integers or logicals.
Error in digitalFilter/filter (line 870)
y = obj.FilterFunction(obj.Coefficients,x);
谁能指出问题?非常感谢。
编辑:
designfilt
command 打开一个交互式界面,您可以在其中更改和调整您的过滤器要求。我优化了过滤器,并将结果保存为 .mat 文件。 [整个程序过去都可以运行,是我们成功完成的重要项目的一部分,但一年后似乎无法以某种方式运行。]
我已附上 filter_8th.mat 文件。这里有各种过滤器。我已经事先创建了这些过滤器,因为 Matlab 需要花费大量时间来创建这些过滤器。
在这个 .mat 文件中,过滤器对象被命名为 D_n1_50、D_n1_60、D_sig50、D_sig60 等(从工作区很容易识别。)
将这些过滤器分配给变量 filt 的代码行是,例如:
filt = D_sig50
这是在循环中选择的。将选择哪个过滤器取决于条件 if-else 结构。
the .mat file containing "filters" and the variable "x" are in this dropbox link:
【问题讨论】:
-
"x 是一个 ... 向量,只有正数和 负 实数值 VS. x 必须是实数 正 整数或逻辑数" Don你不觉得,这可能是错误的根源吗?
-
我不认为这是问题所在。但即便如此,我尝试使用 abs(x),但问题仍然存在。过滤器应该对具有正值和负值的 x 起作用(这些是幅度采样点)。下标索引必须是正的和逻辑的。 “x”是信号。
-
如果没有实际数字,则无法重现错误。您是否使用名为
filter的变量?你可以通过运行这个命令来检查which filter -
如果 x 包含浮点数或零值,abs(x) 将无法解决问题。 x 只能包含正数整数
-
按如下方式测试过滤器:
filter(filt(1),rand(1000,1))这应该可以工作。
标签: matlab filter signal-processing