<p>我试着计算交流电压的总谐波失真值。我正在使用Arduino以超过8千赫的速率采样电压数据,并将这些数据存储到一个文本文件中。然后,我尝试使用以下python编写的代码片段来计算thd:</p>
<pre><code> import numpy as np
import scipy.fftpack
from scipy.fftpack import fft
from numpy import genfromtxt
sampled_data = genfromtxt('/../file.txt',delimiter=',')
abs_yf=np.abs(fft(sampled_data))
#As far as I know, THD=sqrt(sum of square magnitude of
#harmonics+noise)/Fundamental value (Is it correct?)So I'm
#just summing up square of all frequency data obtained from FFT,
#sqrt() them and dividing them with fundamental frequecy value.
def thd(abs_data):
sq_sum=0.0
for r in range(len(abs_data)):
sq_sum=sq_sum+(abs_data[r])**2
sq_harmonics=sq_sum-(max(abs_data))**2.0
thd=100*sq_harmonics**0.5/max(abs_data)
return thd
print "Total Harmonic Distortion(in percent):"
print thd(abs_yf)
</code></pre>
<p>问题是,在我的例子中,得到的Thd值在5%到25%之间变化。(实际上不超过5%)。我做错什么了?有没有其他方法可以找出这个问题?在</p>