代码之家  ›  专栏  ›  技术社区  ›  Pando MM

如何处理不需要的振幅?[关闭]

  •  0
  • Pando MM  · 技术社区  · 8 年前

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

    我做了一次快速傅立叶变换,结果和预期的一样,数据看起来仍然是振幅的正态分布。但我观察过的每个数据集在平均值的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 回复  |  直到 8 年前
        1
  •  1
  •   AkselA    8 年前

    看你到底在问什么还是有点困难。如果你在询问如何处理异常情况,最好还是浏览问题解答。 Cross Validated . 这个网站太宽了。

    但是,如果你问你为什么在你的情节中会有这样的小碰撞,以及如何去除它,我想我可以帮你。

    称之为离群值并不完全正确,它更像是傅立叶变换的产物。因为你的信号有点小 DC offset 避免这种假象的方法就是消除这种直流偏移。消除它的最简单的方法是均匀地移动整个信号,使平均振幅为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