提问人:256qam 提问时间:9/6/2023 最后编辑:256qam 更新时间:9/6/2023 访问量:35
在 Python 中使用 FFT 对方波函数执行 THD 计算的错误结果
Wrong results performing THD calculation with FFT on square wave function in Python
问:
我构建了一个函数,该函数应首先对生成的函数执行 FFT,然后再对实际数据执行 FFT。然后我想要信号的 THD(总谐波失真)。为了证明系统,我想用方波和其他波形等功能来检查它。我在 FFT 后无法获得正确的结果。我希望我计算的输出阵列上的振幅不正确,或者我的 THD 计算错误。也许失败也可能是第一步的明星。 将来,此代码应处理来自测量卡的真实数据。但首先我想用一个虚拟代码来尝试它。 我预计结果约为 48.3%。但我的结果大约是 43%。
我试图四舍五入我的时基(“时间”数组),因为时间数组没有精确的数字到浮点数。但这无济于事。我还以 .csv 格式打印了 fft 数据,数组中的最大点是正确的,因此结果振幅应该不正确。
samplingFrequency = 100000
seconds = 10
samplingInterval = 1 / samplingFrequency
beginTime = int(0)
endTime = int(10);
signal1Frequency = 50
Multiplier = 1000000
arranged_timefactor = int((endTime/(1/signal1Frequency))*2)
time_unround = np.linspace(beginTime, endTime, samplingFrequency*seconds, endpoint=False) #Timebase
time = np.around(time_unround, decimals=5) #round timebase
forStart = int(0) #define startpoint and endpoint with a number of samples
forEnd = int(len(time)) #from the signalperiod
for x in range (forStart, forEnd):
if signal.square(2 * np.pi * signal1Frequency * (x/Multiplier)) > 0.5:
Startpoint = x
break
print("Startpoint",Startpoint)
for y in range (forStart, forEnd):
if signal.square(2 * np.pi * signal1Frequency * (y/Multiplier)) < -0.5:
Endpoint = y
break
print("Endpoint",Endpoint)
test = signal.square(2 * np.pi * signal1Frequency * time)
print("Endpointarr:", test[Endpoint])
time_arranged = time[Startpoint:Endpoint*arranged_timefactor]
amplitude1_arranged = signal.square(2 * np.pi * signal1Frequency * time_arranged)
fourierTransform = fftpack.fft(amplitude1_arranged)/len(amplitude1_arranged) # Normalize amplitude
fourierTransform = fourierTransform[range(int(len(amplitude1_arranged)/2))] # Exclude sampling frequency
tpCount = len(amplitude1_arranged)
values = np.arange(int(tpCount/2))
timePeriod = tpCount/samplingFrequency
frequencies = values/timePeriod
X_mag = np.array(np.abs(fourierTransform))
print (X_mag)
Vrms = (X_mag[10*signal1Frequency])
Vrms1 = (X_mag[20*signal1Frequency])
Vrms2 = (X_mag[30*signal1Frequency])
Vrms3 = (X_mag[40*signal1Frequency])
Vrms4 = (X_mag[50*signal1Frequency])
Vrms5 = (X_mag[60*signal1Frequency])
Vrms6 = (X_mag[70*signal1Frequency])
Vrms7 = (X_mag[80*signal1Frequency])
Vrms8 = (X_mag[90*signal1Frequency])
Vrms9 = (X_mag[100*signal1Frequency])
Vrms10 = (X_mag[110*signal1Frequency])
THD = (sqrt(Vrms1**2+Vrms2**2+Vrms3**2+Vrms4**2+Vrms5**2+Vrms6**2+Vrms7**2+Vrms8**2+Vrms9**2+Vrms10**2))/Vrms
THDR = (THD/(sqrt(1+(THD**2))))
print ('THD ', THD*100,'%')
print ('THDR ', THDR*100,'%')
答: 暂无答案
下一个:按词频排序列表:排序时不输出频率
评论