Я пытаюсь рассчитать общие значения гармонических искажений переменного напряжения. Я беру данные об измерении напряжения, используя Arduino со скоростью более 8 кГц и сохраняя эти данные в текстовом файле. Тогда я пытаюсь вычислить THD, используя следующий фрагмент кода, написанный на питоне:Вычисление th в python
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)
Проблема, полученные значения THD варьируются в пределах от 5% до 25% в моем случае. (На самом деле это не более 5% на самом деле). Что я делаю не так? Есть ли другой способ узнать это?
Проверьте отступ вашего кода, пожалуйста – Dmitry
THD - это только сумма гармоник, а не каждый бит в fft, если только ваш фундаментальный период не равен длине записи данных. Если ваш основной период частоты не является точным делителем длины выборки, тогда вы должны использовать функцию окна и длину записи, которая содержит много периодов фундаментального значения. – f5r5e5d
На самом деле я пытаюсь вычислить THD + N. Согласно wiki, (https://en.wikipedia.org/wiki/Total_harmonic_distortion) он включает в себя шумы (частоты, отличные от гармоник). – tahsin314