如何创建一个防反跳过滤器使用时间戳

18视图(30天)
我正在创建过滤器对布尔timeseries数据工作。我们谈论的是简单的真假值切换时间。数据是许多成千上万的元素,但我们只有“稀疏”切换事件,即我们看不到真正的改变经常为false。
所以我想,我一直只是时间戳和处理这些,所以我从10年代成千上万的分,只是,说,7。
一路上我创建了一个防反跳过滤和遇到的有关结果debouncedTimeOn,我无法解释。完整的函数(很短,大约4 x下面的代码片段)我使用的输入,见附件文件。
如果isEven & & ~ onFirst
% FFF
% NNN
%三k党
keepDips = timeOn - timeOff >防反跳;
% FFF
% NNN
%单色模式
keepPeaks =猫(1 [1]timeOff(2:结束)- timeOn (1: end-1) >防反跳,[endTime - timeOn(结束)>防反跳]);
debouncedTimeOn = timeOn (keepPeaks (1: end-1) & keepDips);%“纠正”,但不知道为什么不keepPeaks & keepDips(2:结束)。
debouncedTimeOff = timeOff (keepPeaks (1: end-1) & keepDips);
返回;
结束
如你所见,我只保留准时和停工时间间隔足够分开,并扔掉。当我运行这段代码,我得到我想要的结果,但可能因为错误的理由。我必须改变这条线得到这个结果。
debouncedTimeOn = timeOn (keepPeaks (1: end-1) & keepDips);%现在
debouncedTimeOn = timeOn (keepPeaks(2:结束)& keepDips);我认为它应该是百分比。但这样做,减产了很多次,和结果上,一些地方性的结果毫无意义。
如果你有解释为什么这条线不应改变,那将是非常有用的。同样,如果你有任何其他意见关于我的一般方法自己编写这些过滤器。我有DSP工具箱,但没有使用过这个问题,因为我认为这种方式编写过滤器可以获得更快的性能,为这个特定的情况下,切换信号分散稀疏。加上我之前还没有真正利用DSP的工具箱,它似乎不适合这种输入数据。乐于接受任何建议。
1评论
本·马勒
本·马勒 2021年8月3日
顺便说一句我忘了解释timeOn和timeOff数据格式。修改posix时代在几秒钟内,有两个变化由于我们imc FAMOS后发送这些数据。1980年1月1日1)时代开始FAMOS,不像在posix 1970。2)《纽约时报》不是整数,因为famos漂浮在几秒钟内,我们有一个小数点,以便毫秒。

登录置评。

接受的答案

本·马勒
本·马勒 2021年8月4日
编辑:本·马勒 2021年8月4日
我发现解决方案。MATLAB是隐式转换timeOn(双)和timeOff(双)整数在47行连接时endTime (int)。这实际上是把所有的时间,这只是一个偶然,使变化对线48似乎“解决”这个问题。
这是重要的是要理解的另一个原因你的答案是如何被计算,即使“看起来”正确的输出。还有一个原因我非常喜欢静态类型的隐式转换。

更多的答案(0)

类别

找到更多的在开始使用DSP系统工具箱帮助中心文件交换

s manbetx 845


释放

R2021a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!