python scipy.fft快速傅立叶变换的巨大y尺度



我有一个用于快速傅立叶变换(fft(信号的工作python脚本,它正确地绘制了图形和fft,我从postgre中获取数据,所以我提交了该代码。由于粘贴的限制,我粘贴了较短版本的信号,但信号在较长的时间段上非常相似。

fft的x标度很好,但我得到的是一个我不理解的大y标度。

我有一个由机器直接处理的fft,看起来是正确的,我有另一个由手持机器完成的测量。fft在x尺度上看起来几乎相同,在y尺度上看起来相对大小,但实际计算的y尺度相差很大。

数据

从python 绘制

来自设备

在脚本中,data_step在两个时间戳之间的微秒内。n和datastep不会错,因为x轴很好。从我得到的数据来看:

Min of signal(value_points_sensor1): -0.057881687
Max of signal: 0.07810274
Max of fft y: 5522.93

fft的大小不应该与信号幅度的大小相似吗?fft上的振幅单位和y轴上的信号不一样吗?

import matplotlib.pyplot as plt
from scipy.fft import rfft, rfftfreq, irfft
import numpy as np
figure, axis = plt.subplots(2, 1)
plt.subplots_adjust(hspace=1)

time_points_sensor1 = np.array(row[4])
value_points_sensor1 = np.array(row[3])

axis[0].plot(time_points_sensor1, value_points_sensor1)

n  = len(row[2])
data_step = (abs((int(row[2][-2] - row[2][-1]))) / 1000000)
yf = rfft(value_points_sensor1)
xf = rfftfreq(n,data_step)
axis[1].plot(xf,abs(yf))

plt.show()

rfft的值与数据的大小和点数成比例。因此,您应该期望yf中的值较大。

比较:

# One cycle of a cosine curve
x = rfft(np.cos(np.linspace(0, 2 * np.pi, 1000)))
max(abs(x))
500.2493021844711
# Two cycles of a cosine curve, again 1000 points per cycle
x = rfft(np.cos(np.linspace(0, 4 * np.pi, 2000)))
max(abs(x))
1000.2484171710441

请参阅下面对scipy.fft.rfft的输入参数norm的描述。默认情况下,归一化是在irfft上完成的。然而,您可以选择正交来对rfft和irfft 应用归一化

范数{"向后"、"正交"、"向前"},可选规范化模式。默认值为"后向",这意味着前向变换没有归一化,ifft按1/n缩放。"forward"将1/n因子应用于正向变换。对于范数="0";"正交";,两个方向都按1/sqrt(n(进行缩放

最新更新