我要各种信号。第一种类型的信号使得它们的直方图是单峰的(单峰)。第二种类型的信号使得它们的直方图是双峰的(双峰)。如何最好地检测信号是单峰还是双峰?在某些信号中存在很多噪声,因此我想检测会很困难。关于如何衡量“双峰”的任何想法?
如何检测信号是单峰还是双峰?
信息处理
直方图
时间序列
2022-02-06 16:25:10
1个回答
Cross Validated.SE上有类似问题的一些答案。
一个建议的答案是使用 Hartigan 的浸渍测试。另一种是使用mixtools
包。
我在R中模拟了一些示例数据并使用了diptest
包和mixtools
包。下图显示了图表顶部的原始数据,以及根据mixtools
.
结果diptest
是:
数据:one_mode D = 0.0219,p 值 = 0.9915
数据:two_mode D = 0.0628,p 值 = 0.004434
也就是说diptest
,第一个(单峰)数据集有 99.15% 的机会成为单峰,第二个(双峰)数据集有 0.44% 的机会成为单峰。
下面的 R 代码 # Q26358
one_mode <- rnorm(100, 0, 1)
two_mode <- c(rnorm(50, -2, 1), rnorm(50, +2, 1))
plot(1:100,one_mode,pch=16, col="green")
lines(1:100,two_mode, pch=16, col="red")
library(mixtools)
par(mfrow=c(2,2))
plot(1:100,one_mode,pch=16, col="green")
plot(1:100,two_mode, pch=16, col="red")
mixmdl = normalmixEM(one_mode)
plot(mixmdl,which=2)
lines(density(one_mode), lty=2, lwd=2)
mixmdl_two = normalmixEM(two_mode)
plot(mixmdl_two,which=2)
lines(density(two_mode), lty=2, lwd=2)
library(diptest)
dip.test(one_mode)
dip.test(two_mode)
其它你可能感兴趣的问题