计算二进制信号频率和持续时间

我正试图分析一些在120Hz采集的信号数据。 我有Excel和SPSS(以及MATLAB,但我不太熟悉)。 我一直在网上search大约一小时半,似乎无法find我在找什么,但我知道它应该是相对简单的。

我有一个0和1的列表。 我想计算每个信号的持续时间,然后绘制信号的频率分布(即,一个直方图描绘信号百分比@ 1/10秒,信号百分比@ 2/10秒,@ 3/10秒… @ 1秒等等)。 我相信这是一个反向累积分布我正在寻找,但在我可以做到这一点之前,我需要处理我的电子表格中的数据。

我很难找出如何总结每个“组”来获得每个信号的持续时间。 它会做这样的事情:对于包含1的单元格,如果上面的单元格包含0,则会启动一个新的总和并继续总计1,直到出现0。 在电子表格的末尾,我会列出信号持续时间(以秒的1/120来表示 – 即,30将是0.25秒)

我有超过100个文件要处理,所以我正在寻找一个公式或macros来快速为每个文件做这件事。

我有4个不同的设备的数据,我期待比较这些信号分布的设备。 在excel,spps或matlab中,我会做得更好吗?

谢谢!

数据被格式化为列 – 我在A列的帧数和B列的信号(0或1)。 每个帧是1/120秒(我有每个文件数千帧)。 我对波形本身并不感兴趣 – 为了统计目的,我正在这样做,以检测长条信号与短信号的分布在条件之间是否有显着差异。 最终,我想要一个可以在频率直方图中表示的信号长度的列表(并且按频率,我不是指波的频率,而是指出现的次数。

“将每个”组“组合起来以获得每个信号的持续时间”apply小计和在每次更改:select您的列表,使用函数:Sum并将小计添加到:无论您希望添加的列。

这是如何在SPSS中完成的一种可能性。

* create some test data. DATA LIST FREE / frame (F8) signal (F1). BEGIN DATA 1 1 2 1 3 0 4 0 5 1 6 0 7 1 8 1 9 1 10 0 11 0 12 0 13 1 14 0 15 1 16 0 17 1 18 0 19 1 20 1 END DATA. DATASET NAME data_orig. * use a work copy because data will be reduced in the process. DATASET COPY data_workcopy. DATASET ACTIVATE data_workcopy. * count the length of each run of "1". COMPUTE signallength = 0. IF (signal=1 AND (LAG(signal)=0 OR frame=1)) signallength = 1. IF (signal=1 AND LAG(signal)>0) signallength = LAG(signallength)+1. EXECUTE. * get the last/highest number of each run. * It's somewhat complicated, but I haven't found a much better idea yet. IF (signallength=1) signalbegin = 1. SORT CASES BY frame (D). IF (signal=1 AND LAG(signal)>0) signallength = LAG(signallength). EXECUTE. SELECT IF signalbegin=1. FREQUENCIES signallength /HISTOGRAM. 

在这个例子中,创build一个工作副本数据表并不是真的需要,因为你可以在它之前运行带有TEMPORARYSELECT IF命令并且不会丢失任何数据。 但是,如果您想进行进一步的分析,使用数据集副本可能会很有用。