FFT后Y轴值异常

问题描述 投票:0回答:1

我有一个包含振动数据的 UFF 文件。目的是将时间波形信号转换到频域。

我编写了一个 python 脚本,使用 scipy.fft 将时间波形信号转换为频域。 我有一个 UFF 文件。我正在使用 pyuff 导入 uff。 我正在使用另一个软件的输出(BKV 的 WTG 分析器)验证 python 脚本的输出

Python 脚本

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import pyuff
from scipy.fft import fft, fftfreq

uff_file=pyuff.UFF('new1.uff')
data = uff_file.read_sets()

#Taking the second dataset from the data dictionary and plotting the timewaveform

avg=np.mean(data[1]['data'])
new_y=data[1]['data']-avg
plt.plot(data[1]['x'], (new_y),linestyle='-', color='c')
plt.xlabel('secs')
plt.ylabel(data[1]['id5'])
plt.xlim([min(data[1]['x']),max(data[1]['x'])+0.25])
plt.show()
[Python Plot](https://i.stack.imgur.com/Ye3LU.png)
[WTG Analyzer](https://i.stack.imgur.com/Lm3mf.png)
#The above plot matches exactly with the timewaveform of the WTG analyzer#

#Performing FFT#
x=data[1]['x']
y=new_y
N=262144 #no of samples
T=1.024/25600 #time interval
yf=(abs(fft(y)))
xf=abs(fftfreq(N,T))
plt.plot(xf,yf)
plt.grid()
plt.show()

[Python FFT Plot](https://i.stack.imgur.com/7BRwV.png)
[WTG Analyzers Autospectrum plot](https://i.stack.imgur.com/prJnW.png)

执行FFT后得到的值与WTG分析仪的值不匹配。我已经尝试了所有可能的方法,例如将 y 轴的输出除以样本数、rfft 等。但没有任何内容与 WTG 分析仪的输出匹配。我想要获得与 WTG 分析仪完全相同的输出。

谢谢

python fft time-frequency
1个回答
0
投票

WTG 分析仪可能正在绘制功率谱。您可以尝试使用

scipy.signal.welch
函数来生成此内容(例如,像 this answer)。例如,

from scipy.signal import welch

fs = 1 / T  # sampling frequency
f, pxx = welch(
    y,  # input data
    fs=fs,
    window="flattop",  # a flat window
    nperseg=len(y),  # just use one FFT the same length as the data
    scaling="spectrum"  # output the power spectrum rather than spectral density
)

plt.plot(f, pxx)

如果我使用一些与您的数据具有相似尺度的高斯白噪声,对于没有谱线的区域,它似乎与 WTG 分析仪的输出具有相似的尺度(尽管很难准确地判断)。

您可能还想尝试

welch
使用的窗口函数,因为 WTG 分析器可能使用不同的窗口,例如 Hann 窗口。

© www.soinside.com 2019 - 2024. All rights reserved.