【问题标题】:Extracting the imaginary part of data from fft in R从R中的fft中提取数据的虚部
【发布时间】:2013-12-09 00:37:08
【问题描述】:

我需要过滤正向傅里叶变换的虚部。

我一直在尝试使用 filter.complex(但 R 一直说函数 filter.complex 不存在)

我只使用了过滤器,我收到以下警告消息-

imaginary parts discarded in coercion

如果我遗漏了什么,请告诉我

这是一个例子:

    x = fft(rec-mean(rec))/sqrt(length(rec))
    y = fft(soi-mean(soi))/sqrt(length(soi))
    fyx = filter.complex(y * Conj(x), rep(1, 15), sides = 2, circular = TRUE)

【问题讨论】:

  • 我不确定我是否正确理解了您的问题。您能否添加一个可重现的示例?或者像x <- 1:4; filter(Im(fft(x)), 1) 之类的东西(即使用Im 提取虚部)对你有用吗?
  • 我添加了一个例子。

标签: r filtering


【解决方案1】:

我试图找到一个filter.complex 函数但没有成功(而且我在搜索这些东西方面相当出色。)我认为它不存在。我想你可能已经掌握了一些旧的 S 代码,这些代码是为分派到复杂类而设置的。如果我将命令修剪为:

fyx = filter(y * Conj(x), rep(1, 15), sides = 2, circular = TRUE)

....,我收到了同样的信息。这显然来自在 C 级别调用的更深层次的代码,因为当您在命令行中键入“filter”时,该消息在出现的 R 代码中不可见。使用 Google 搜索错误消息显示它可能来自:http://svn.r-project.org/R/trunk/src/main/coerce.c

这只是一个警告,不一定是您的不当行为的证据。

【讨论】:

    【解决方案2】:

    我知道出了什么问题。函数“filter.complex”未在任何包中定义。 所以,我定义如下-

    filter.complex=function(x,...){complex(real=filter(Re(x),...), imag=filter(Im(x),...))}
    

    这过滤了我需要的虚部。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-28
      • 2015-05-21
      • 2014-11-23
      • 1970-01-01
      • 1970-01-01
      • 2018-08-17
      • 1970-01-01
      相关资源
      最近更新 更多