我正在尝试分析以120 Hz收集的一些信号数据。我有Excel和SPSS(以及MATLAB,但我并不熟悉它)。我一直在网上搜索大约一小时左右,虽然我知道它应该相对简单,但似乎无法找到我想要的东西。
我有一个0和1的列表。我想计算每个信号的持续时间,然后绘制信号的频率分布图(即,描绘信号百分比@ 1/10秒,信号百分比@ 2/10秒,@ 3/10秒......的直方图... @ 1秒,依此类推)。我相信这是我正在寻找的反向累积分布,但在我能够实现之前,我需要处理电子表格中的数据。
我无法弄清楚如何对每个“组”进行求和以获得每个信号的持续时间。它会做这样的事情:对于包含1的单元格,如果上面的单元格包含0,则开始新的总和并继续对1进行求和直到出现0。在电子表格的最后,我会有一个信号持续时间列表(用1/120秒表示 - 即,30表示0.25秒)
我有超过100个要处理的文件,所以我正在寻找一个公式或宏来快速为每个文件执行此操作。
我有4种不同设备的数据,我希望按设备比较这些信号分布。 我最好不要在excel,spps或matlab中这样做吗?
谢谢!
数据按列格式化 - 我在A列中有帧计数,在B列中有信号(0或1)。每帧是1/120秒(我每个文件有数千帧)。我对波形本身并不感兴趣 - 为了统计目的,我这样做是为了检测长信号和短信号的分布是否在条件之间显着不同。最后,我想要一个可以在频率直方图中表示的信号长度列表(并且按频率,我不是指波频率,而是出现次数。
答案 0 :(得分:0)
"总结每个"组"获得每个信号的持续时间"应用小计并在每次更改时:选择您的列表,使用函数:求和并将小计添加到:您要添加的列。
答案 1 :(得分:0)
这是在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.
在此示例中,实际上不需要创建工作副本数据表,因为您可以在其前面运行带有SELECT IF
的{{1}}命令,并且不会丢失任何数据。但是,如果要进行进一步分析,使用数据集副本可能很有用。