我知道如何使用Python从Tektronix示波器获取绘图和保存数据。我有一些峰值,然后它们衰减(周期性阻尼)。我想写一个代码来捕获一个峰值,并通过2000个点(阻尼结束,见图表)保存数据(因为我想得到阻尼系数)
我知道如何通过detect_peaks
通过以下方法获得峰值:
ind = detect_peaks(Volts, mph:1.4, show=True)
print(ind)
当Iprint(ind)
时,它会打印电压为峰值的时间,而不是电压。我有一个问题,因为如果我使用while
循环,我可以从一个峰值到2000点之后计算时间,但我不知道如何以自动给我时间和电压的方式进行计算
总结如下:
我想得到一个峰值,得到所有的电压,直到阻尼振荡结束
这是我的密码:
import visa
import numpy as np
from struct import unpack
import pylab
from detecta import detect_peaks
#how to get the plot from Tektronix
# Establish Connection
rm = visa.ResourceManager('@py') # Calling PyVisaPy library
#scope = rm.open_resource('USB0::0x0699::0x0409::C010730::INSTR') # Connecting via USB
scope = rm.open_resource('USB0::1689::883::C011533::0::INSTR') # Connecting via LAN
# Setting source as Channel 1
scope.write('DATA:SOU CH2')
scope.write('DATA:WIDTH 1')
scope.write('DATA:ENC RPB')
# Getting axis info
ymult = float(scope.query('WFMPRE:YMULT?')) # y-axis least count
yzero = float(scope.query('WFMPRE:YZERO?')) # y-axis zero error
yoff = float(scope.query('WFMPRE:YOFF?')) # y-axis offset
xincr = float(scope.query('WFMPRE:XINCR?')) # x-axis least count
# Reading Binary Data from instrument
scope.write('CURVE?')
data = scope.read_raw() # Reading binary data
headerlen = 2 + int(data[1]) # Finding header length
header = data[:headerlen] # Separating header
ADC_wave = data[headerlen:-1] # Separating data
# Converting to Binary to ASCII
ADC_wave = np.array(unpack('%sB' % len(ADC_wave),ADC_wave))
Volts = (ADC_wave- yoff ) * ymult + yzero
Time = np.arange(0, xincr * len(Volts), xincr)
#getting peaks
ind = detect_peaks(Volts, mph=1.4, show=True)
print(ind)
#attempt for taking 2000 piint after the first peak
a2=ind[0] #first peak
i=ind[0]
while i<a2+20:
print(i)
i+=1
#Plotting Volt Vs. Time
pylab.plot(Time, Volts)
pylab.show()
Volts
是一个numpy数组。当您在Volts
数组上调用detect_peaks
时,它应该返回数据点(即索引,而不是我在注释中错误建议的时间值),然后您可以说:只需通过选择相应的峰值来选择要打印的间隔,例如:
相关问题 更多 >
编程相关推荐