对不想要的幅度怎么办?

时间:2018-08-14 14:16:21

标签: r signal-processing fft

我正在信号处理应用程序中工作。这个想法是为了过滤掉噪音,我发现我使用的大多数数据都具有正态分布。 (CLT)

我运行了FFT,并且正如预期的那样,数据仍然看起来像振幅的正态分布。但是我查看的每个数据集都有一个不寻常的幅度颠簸,与均值有大约4个标准差。

我的问题是,这些振幅通常会做什么?

这是频率幅度分布的示例:

Example of qplot of a signal in frequency domain

我的第一个想法是简单地删除遥远的幅度或将其重新映射为更接近均值(我使用rnorm),但是我确定其他人也面临同样的情况。

这是一个产生非常有趣结果的测试。略有不同的分布方式通常会产生离群值:

    a <- rnorm(10000)
    b <- rnorm(500,1,1)
    u <- sample(union(a,b))
    qplot(Re(fft(u)))

enter image description here

1 个答案:

答案 0 :(得分:1)

要真正了解您的要求仍然有些困难。如果您要询问如何处理异常值,最好不要在Cross Validated上浏览问答。对于这个网站来说太宽了。

但是,如果您要问的是为什么您的地块会遇到这么小的颠簸,以及如何消除这种颠簸,我想我会帮忙的。

称其为离群数是不正确的,它更多是傅立叶变换的伪像。发生这种情况是因为您的信号带有轻微的DC offset,并且避免这种伪影的方法是消除此DC偏移。删除信号的最简单方法是均匀地移动整个信号,以使平均幅度为0。通常就足够了,但是有时您必须消除信号的趋势或应用高通滤波器。

set.seed(1)
sig1 <- sample(c(rnorm(1e4), rnorm(500, 1, 1)))
ft1 <- fft(sig1)

sig2 <- sig1 - mean(sig1)
ft2 <- fft(sig2)

yl <- c(-280, 430)
par(mfrow=c(2, 1), mar=c(2, 3, 0.1, 0.1))
plot(Re(ft1)[1:(length(ft1)/2)], type="l", ylim=yl, xlab="", ylab="Original")
plot(Re(ft2)[1:(length(ft2)/2)], type="l", ylim=yl, xlab="", ylab="Centred")

enter image description here