特定类型多谐波信号结构解决方案的推荐资源/文献检索词

信息处理 过滤器 自适应滤波器 去噪 时间序列
2022-01-16 08:44:42

希望这不会被认为太离题。这些天我在工业界工作,想出了一个解决我们一直面临的信号处理问题的方法。我想了解上述解决方案之前是否已经发布过,或者是否有其他我应该考虑的替代方案,但我在搜索这个特定的信号场景时遇到了麻烦。我将在下面描述信号结构,并感谢任何关于我应该如何搜索文献的输入。

所以我有两个信号:一个是纯噪声(noise_only),另一个是非常相似的噪声加上感兴趣的目标信号(noise_plus_target)。在每个信号中,噪声实际上是由多个频率不同的信号组成的,同一组所述噪声信号对每个观察到的信号有加性贡献,但两者之间的权重不同。理论上,我们应该能够使用信号中的信息noise_only来帮助消除信号中的噪声noise_plus_target,我已经想出了一种方法来实现这一点,但我想知道可能已经为此发布了哪些其他解决方案种情景。

在 R 中,用于生成与我的真实信号特征相匹配的虚假信号的代码将是:

library(tidyverse)

# define a function to generate simple sinusoid given time and hz
sine = function(time,hz) sin(time*(2*pi)*hz)

#define a function to scale values to 0:1
scale01 = function(x) (x - min(x)) / diff(range(x))

#specify sample rate
sample_rate = 10 #in Hz
max_time = 30

#construct a tibble
latent_signals = tibble(
    #specify sampling times (in seconds)
      time = seq(0,max_time,1/sample_rate) #30s of data
    #construct some latent noise signals, each at a decently separated Hz
    , noise1 = sine(time,1/11)
    , noise2 = sine(time,1/3)
    , noise3 = sine(time,1)
    #specify a target signal that will be hidden in the noise 
    # This could take any shape; here I've chosen a bump midway 
    # through the timeseries
    , target = scale01(dnorm(time,mean=max_time/2,sd=3))
)

#show the latent signals
latent_signals %>%
    tidyr::pivot_longer(
        cols = -time
    ) %>%
    ggplot()+
    facet_grid(
        name ~ .
    )+
    geom_line(
        mapping = aes(
            x = time
            , y = value
        )
    )

#combine the latent signals into two observed signals, with different weights
# for each and the latent target only in one
latent_signals %>%
    dplyr::mutate(
        noise_only =
            noise1*runif(1,.5,1.5) +
            noise2*runif(1,.5,1.5) +
            noise3*runif(1,.5,1.5)
        , noise_plus_target =
            noise1*runif(1,.5,1.5) +
            noise2*runif(1,.5,1.5) +
            noise3*runif(1,.5,1.5) +
            target
    ) %>%
    dplyr::select(
        time
        , contains('_')
    ) ->
    observed_signals

#show the observed signals
observed_signals %>%
    tidyr::pivot_longer(
        cols = -time
    ) %>%
    ggplot()+
    facet_grid(
        name ~ .
    )+
    geom_line(
        mapping = aes(
            x = time
            , y = value
        )
    )

```
1个回答

如果我正确理解了这个问题,您可以访问 2 个信号:

  1. 噪声信号 -w[n]. 它由谐波信号的线性组合组成。就像是w[n]=imaisin[2πfifsn+ϕi].
  2. 输入信号 -y[n]由感兴趣的信号组成x[n]和相同的谐波w[n]只是重量不同。就像是y[n]=x[n]+imbisin[2πfifsn+ψi].

目标是估计x[n]鉴于这些信号。

因为我们可以建模y[n]=x[n]+(hw)[n]我们可以利用自适应滤波器框架并以高效的方式解决这个问题。

备注
在现实世界中,每个观察到的信号也会有某种测量噪声,我们可以将其建模为 AWGN。但现在让我们把它放在一边。