Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python FFT中的矢量和均方根平均_Python_Python 3.x_Signals_Signal Processing_Fft - Fatal编程技术网

Python FFT中的矢量和均方根平均

Python FFT中的矢量和均方根平均,python,python-3.x,signals,signal-processing,fft,Python,Python 3.x,Signals,Signal Processing,Fft,我有一个数据数组,我在上面执行了FFT。这是我应用的代码 import numpy as np # "data" is a column vector on which FFT needs to be performed # N = No. of points in "data" # dt = time interval between two corresponding data points FFT_data = np.fft.f

我有一个数据数组,我在上面执行了FFT。这是我应用的代码

import numpy as np

# "data" is a column vector on which FFT needs to be performed
# N = No. of points in "data" 
# dt = time interval between two corresponding data points

FFT_data         = np.fft.fft(data)       # Complex values
FFT_data_real    = 2/N*abs(FFT_data)      # Absolute values
然而,我通过以下链接:

这里说,为了提高信噪比,我们可以应用“均方根平均FFT”和“矢量平均FFT”

有人能告诉我如何用Python实现这两种方法,或者有什么文档/链接可供参考吗?

如图所示:

如果你取样本光谱平方平均值的平方根,你就是在做RMS平均。另一种方法是向量平均法,即分别对实分量和复分量进行平均

显然,要执行两种平均,您需要有多个数据集进行平均。在示例代码中,您有一个单列向量
data
。假设有多个这样的列向量排列为2D
N
x
M
矩阵,其中
N
是每个数据集的点数,
M
是数据集的数目。由于数据集存储在列中,因此在计算FFT时,需要指定参数
axis=0
,以沿列计算FFT

RMS平均FFT

顾名思义,这种方法需要取振幅平方平均值的平方根。由于不同的集合存储在列中,因此需要沿轴1(FFT使用的另一个轴)进行平均

矢量平均FFT

在这种情况下,您需要获得FFT数据的实部和虚部,然后分别计算每个数据的平均值:

FFT_data        = np.fft.fft(data, axis=0)  # Complex values
real_part_avg   = 2/N*np.mean(np.real(FFT_data),axis=1)
imag_part_avg   = 2/N*np.mean(np.imag(FFT_data),axis=1)
vector_averaged = np.abs(real_part_avg+1j*imag_part_avg)
请注意,我保留了绝对值的
2/N
缩放比例

但是如果我真的只有一个数据集,我该怎么办?

如果数据集恰好是固定的并且足够大,那么您可以将数据集分解为更小的块。这可以通过以下方法将向量重塑为
N
x
M
矩阵来实现:

data = data.reshape(N,M)
...

然后您可以使用任何一种方法进行平均。

非常感谢@SleuthEye提供的宝贵反馈。
data = data.reshape(N,M)
...