-2

我正在使用 Python。输入是带有时间戳的 .csv 文件,当前 (AC)。我能够绘制信号的 FFT 并看到谐波。我想找到并输出(或在绘图上显示 x 和 y 坐标)谐波的幅度(例如,每个幅度到 50 次谐波)。这样做的最佳方法是什么?谢谢你。


更新

这是我的情节: 谐波情节

我的信号是 60Hz,所以我知道我的谐波将在 120、180、...

我想要做的是找到或输出所有谐波的幅度(从第 2 次到第 50 次)。所以我想问有一个很好的方法来解决这个问题。

最终,我想要实现的是能够计算出基波的谐波幅度(百分比)。


更新

我最终使用 zip 来映射频率和幅度,然后将其打印出来。这是我的代码:

import pandas as pd
import numpy as np
import plotly
import matplotlib.pyplot as plt
from scipy.fftpack import fft, ifft
from scipy import arange
import csv
import math

df=pd.read_csv (r'C:\Users\20amps.csv')
N=df.shape[0] #Number of samples
T=125000 #Frequency of Signal
k=arange(N)
Ts=N/T
freq=k/Ts
freq=freq[range(N//40)]

amp=df["AC1 A"]
rms= [i * math.sqrt(2) for i in amp]
yf=fft(rms)/N
yf=yf[range(N//40)]

zipped = zip (freq, abs(yf))
print (zipped)
w = list(zipped)
print(w)

#Writing to csv file
#with open('data.csv', 'w') as csvFile: 
#    writer =csv.writer(csvFile, delimiter=',')
#   writer.writerow(w)

plt.plot(freq, abs(yf),'r') #plot results
plt.grid()
plt.xlabel('Frequency')
plt.ylabel(r'Amplitude')
plt.show()  

然后我会查找我需要的频率和幅度。

愿意就更好的方法提出建议。

4

1 回答 1

0

只需查看相应频率区间中的幅度即可。您可以编写一个方法来定义感兴趣的基频(例如 60Hz),然后您就知道要查看谐波的频率区间(120Hz、180Hz 等)。如果您正确设置 DFT,您就会知道 bin 内和 bin 之间的频率范围。

这篇 stackoverflow 帖子更详细地介绍了如何正确计算 bin 以及不同参数对您意味着什么:如何在 python 中提取与 fft 值相关的频率

同样,如果你知道你的 bin 宽度,检查给定谐波的功率/幅度是微不足道的,因为你知道要查看哪些 bin。

希望这能让你走上正轨。

于 2019-10-04T12:38:54.350 回答