我正在开发针对EEG信号的套件分类器,我将需要以下列方式定义的均值函数周围的零交叉:
理想情况下,如果我有一些向量,其值的范围表示一个正弦曲线或任何随时间变化的信号,我将希望返回一个布尔值向量,该布尔值向量的大小与该向量相同,说明该特定值是否是均值交叉。我有以下Matlab实现:
ZX = @(x) sum(((x - mean(x)>0) & (x - mean(x)<0)) | ((x - mean(x)<0) & (x - mean(x)>0)));
根据玩具数据进行测试:
[0 4 -6 9 -20 -5]
收益率:
0
编辑:但是我相信它应该返回:
3
我在这里想念什么?
类似的表达式:
((x-m)>0) & ((x-m)<0)
总是将返回全零的向量,因为x的单个元素都不会大于或小于零。您需要考虑x
定义中ZX
的下标:
((x(1:end-1)-m)>0) & ((x(2:end)-m)<0)
一种简单的解决方案是使用movprod
,并计算负数的乘积,即]
cnt = sum(sign(movprod(x-mean(x),2))<0);
通过您的玩具示例,您将获得cnt = 3
。