【问题标题】:Finding a power spectrum in Python, without using the inbuilt FFT function在 Python 中查找功率谱,而不使用内置的 FFT 函数
【发布时间】:2015-11-25 14:56:04
【问题描述】:

我想使用以下公式通过 Python 找到功率谱:

Power spectrum

我正在尝试用这个来绘制应该遵循的数组:

P = []
for k in range(0,int(N/2)):
    P.append((2/N)*(sum(x[k]*np.cos(2*np.pi*nu*t[k]))**2+(sum(x[k]*np.sin(2*np.pi*nu*t[k])))**2))

其中 nu 是频率:

nu = []
for j in range(0, int(N/2), 2):
nu.append(j/T)

x 和 t 来自一个数据集,N 只是所有 x 的总和。

Python 一直告诉我:'不能将序列乘以'float' 类型的非整数' 我在这里做错了什么?我确信这与将错误类型的数据相乘有关。但我不确定如何更改。

我知道有一个内置的 FFT 函数,但我认为让这个函数工作对我来说真的很有启发性。

【问题讨论】:

  • 那么你要相乘的所有数据的数据类型是什么?
  • 它们是数组(或列表?),但有些索引为 k,有些索引为 j,这决定了 python 应该对它们做什么。但我可能没有正确编码,是吗?然后是 pi,它是一个浮点数,但它应该很容易与一切相乘。

标签: python python-3.x physics


【解决方案1】:

nu 是一个列表,因此代码段 2*np.pi*nu*t[k] 会给您错误。尝试类似:

for i in nu:
    P.append((2/N)*(sum(x*np.cos(2*np.pi*nu[i]*t))**2+(sum(x*np.sin(2*np.pi*nu[i]*t)))**2))

这样你就可以将每个 i 的数量 (2/N)*(sum(x*np.cos(2*np.pi*nu[i]*t))**2+(sum(x*np.sin(2*np.pi*nu[i]*t)))**2) 相加。

【讨论】:

  • 这很有意义。但我不确定我是否只是用索引 k 总结这些术语,我应该这样做。你能解释一下如何确定我总结的到底是什么吗?
  • 你是对的,实际上第二个 for 应该被删除,sum 需要一个可迭代的参数。
猜你喜欢
  • 2017-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-06
  • 2013-05-29
  • 2013-03-01
  • 1970-01-01
相关资源
最近更新 更多