如何解决函数“filt”中的数据长度错误?

34个视图(过去30天)
利亚
利亚 2021年1月7日
评论: 星际漫游者 2021年1月7日
你好
我试图用designfilt编写一个四阶巴特沃斯滤波器,然后用函数filtfilt将其应用于我的三维EEG数据。
但我得到一个错误,数据长度必须大于12个样本, 即使长度更大。。。
我想我一定错过了什么。有人能帮我吗?
因此,EEG数据的大小为“8x5121x30双精度”,称为“ssvep0Hz”。通带设置在5Hz和20Hz之间。本例中的采样率为512。
  • 这是我编程的代码:
作用 [filtered_signal]=myfilter(n,f1,f2, ssvepdat ,抽样率)
d=设计过滤器( “bandpassiir” , “过滤器订单” ,2*n, “半功率频率1” ,f1, “半功率频率2” ,f2, “设计方法” , “黄油” , “采样器” ,抽样率);
滤波信号=滤波(d,ssvepdat);
终止
  • 然后在脚本中实现,它看起来像:
过滤的\u ssvep0Hz=我的过滤器(2,5,20,ssvep0Hz,采样率);
先谢谢你。

公认的答案

星际漫游者
星际漫游者 2021年1月7日
过滤 文档:
x 输入信号
矢量 | 矩阵 | N -D阵列
输入信号,指定为实值或复数向量、矩阵或 N -D数组。 x 必须是有限值的。 过滤 沿的第一个数组维度操作 x 其大小大于1。
因此,要过滤的维度必须是 第一
这似乎有效:
作用[filtered_signal]=myfilter(n、f1、f2、ssvepdat、samp_速率)
d=设计过滤器(“bandpassiir”,“过滤器订单”,2*n,“半功率频率1”,f1,“半功率频率2”,f2,“设计方法”,“黄油”,“采样器”,抽样率);
滤波信号=滤波(d,ssvepdat);
终止
抽样率=512;
ssvep0Hz=randn(85121,30);
ssvep0Hz=排列(ssvep0Hz[2 1 3]);
过滤的\u ssvep0Hz=我的过滤器(2,5,20,ssvep0Hz,采样率);
过滤后的频率=排列(过滤后的频率[2 1 3]);
检查=大小(已过滤的\u ssvep0Hz)
第一 排列 调用shift矩阵维数,以便 过滤 过滤最大维度。第二 排列 调用将维度移回其原始方向,与输入矩阵匹配。
.
2评论
星际漫游者
星际漫游者 2021年1月7日
一如既往,我的荣幸!
祝你研究顺利!
.

登录以发表评论。

更多答案(1)

马修·诺
马修·诺 2021年1月7日
你好,莉亚
您的问题与输入数据的大小有关
过滤 仅适用于“垂直”向量,因此第一个维度必须是时间
您必须找到一种方法以5121x8x30或5121x30x8格式放置数据

社区寻宝

在MATLAB Central中查找宝藏,了解社区如何帮助您!

开始打猎吧!